WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Variablenreduktion im Compiler

 

bmtil
Forum-Anfänger

Forum-Anfänger


Beiträge: 49
Anmeldedatum: 01.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2016, 11:36     Titel: Variablenreduktion im Compiler
  Antworten mit Zitat      
Hallo, im Rahmen eines Projektes beschäftige ich mich mit einem in Matlab geschriebenem Compiler. Der Compiler übersetzt Simulink Programme, welche mit projektinterner Simulink Bibliothek erstellt wurden in Assembler. Die Besonderheit der Bibliothek ist, dass fast alle Blöcke (Addition, Multiplikation, etc) nur maximal zwei Inputs und ein Output haben. Lediglich die Blöcke, welche bedingte Zuweisungen ausführen (vergleich von zwei Zahlen) haben drei Inputs und ein Output.

Eine meiner Aufgaben ist die Dokumentation des Quellcodes, der Verfasser ist leider nicht mehr aufzufinden und leider ist der Quelltext ohne der Kommentare nur schwer verständlich.

Ich habe die Stelle im Compiler gefunden, bei dem der Assembler Code erstellt wird. Im gleichen Zug macht der Programmierer eine Variablenreduktion, welche ich nicht verstehe und deswegen hier Hilfe suche. Vllt. kann mir jemand hier einfach nur im Pseudocode schreiben, was genau in diesem Code Abschnitt passiert:
Code:
if ~strcmp(graph(name).type, 'Outport')
            % reduce number of used variable
            % default variable name
            signal_name = node.arguments{3};
           
            % replace variable when flag is set and not needed for Mov & Mov_*
            if optimizing && OPTIMISATIONS('reduce_variables') && ...
                    ~strcmp('Mov', node.type(1:3)) && ~strcmp(node.arguments{3}, '?')   %hier wirkt variablenreduktion
                % check if a free name is available
                for key = refs.keys
                    var_name = key{1};
                    % check if variable is free for reusage
                    % only constants can have negative ref counts
                    if refs(var_name) < 1 && var_name(1) ~= '_'
                        signal_name = var_name;
                        break;
                    end
                end
            end
            % special case for i.e. wbnone
            if ~strcmp(signal_name, '?')
                % determine number of references to signal_names
                % to avoid code duplicate often overwritten input arguments
                ref_add = update_references(graph, node.arguments{3}, node.next, ...
                    signal_name);
                refs(signal_name) = ref_add;
                node.arguments{3} = signal_name;
            end
        end

Beste Grüße, und vielen Dank.
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.