DE-102024132088-A1 - Verfahren zur Erzeugung von Quellcode
Abstract
Die Erfindung betrifft ein Verfahren zum Erzeugen von Quellcode aus einem oder mehreren Blöcken eines Blockdiagramms, welches Blöcke und Signalverbindungen zwischen Blöcken umfasst. Das Erzeugen von Quellcode umfasst ein Transformieren des Blockdiagramms in eine Zwischendarstellung, ein sukzessives Optimieren der Zwischendarstellung und ein Übersetzen der optimierten Zwischendarstellung in Quellcode. Die erfindungsgemäße Optimierung umfasst ein Erkennen von mindestens zwei parallelen Kontrollflusszweigen, in denen jeweils eine mehrkomponentige Variable kopiert wird, wobei nach den mindestens zwei Kontrollflusszweigen eine einzelne mehrkomponentige Ausgangsvariable resultiert, ein Überprüfen, ob in allen parallelen Kontrollflusszweigen eine reguläre Wertkopie aus einer Quellvariablen in die Ausgangsvariablen erfolgt, und ein Ersetzen der Ausgangsvariablen durch einen Zeiger auf eine der Quellvariablen. Weiterhin betrifft die Erfindung ein Verfahren zum Konfigurieren eines Steuergeräts, ein Computerprogrammprodukt und ein Computersystem.
Inventors
- Michael Mair
- Florian GAYK
Assignees
- DSPACE SE & CO KG
Dates
- Publication Date
- 20260507
- Application Date
- 20241105
Claims (14)
- Verfahren zum Erzeugen von Quellcode aus einem oder mehreren Blöcken eines Blockdiagramms, welches Blöcke und Signalverbindungen zwischen Blöcken umfasst, wobei das Erzeugen von Quellcode ein Transformieren des Blockdiagramms in eine Zwischendarstellung, ein sukzessives Optimieren der Zwischendarstellung und ein Übersetzen der optimierten Zwischendarstellung in Quellcode umfasst, wobei das Transformieren eines Blocks das Erstellen einer Blockausgangsvariablen umfasst, mit den Schritten • Erkennen von mindestens zwei parallelen Kontrollflusszweigen, in denen jeweils eine mehrkomponentige Quellvariable auf eine Ausgangsvariable kopiert wird, Überprüfen, ob in allen parallelen Kontrollflusszweigen eine reguläre Wertkopie aus einer der Quellvariablen in die Ausgangsvariable erfolgt, und • Ersetzen der Ausgangsvariablen durch einen Zeiger auf eine der Quellvariablen.
- Verfahren zum Erzeugen von Quellcode nach Anspruch 1 , wobei die Ausgangsvariable als Blockausgangsvariable eines Umschalt-Blocks, der zwischen mehreren Signalen umschaltet, oder eines Zusammenführ-Blocks, der mehrere Signale zusammenführt, generiert wurde und/oder wobei die Ausgangsvariable keine festgelegte Lebensdauer aufweist.
- Verfahren zum Erzeugen von Quellcode nach einem der vorhergehenden Ansprüche, wobei die mehrkomponentige Variable ein Vektor, der eine Vielzahl von Variablen desselben Datentyps umfasst, eine Matrix, die eine Vielzahl von Vektoren umfasst, eine Struktur, die eine Vielzahl von Variablen beliebigen Datentyps umfasst, ein Vektor von Strukturen oder eine Matrix von Strukturen ist.
- Verfahren zum Erzeugen von Quellcode nach einem der vorhergehenden Ansprüche, wobei das Ersetzen einer Ausgangsvariable durch einen Zeiger nur dann erfolgt, wenn die Ausgangsvariable ein Größenkriterium erfüllt, insbesondere eine Mindestgröße überschreitet.
- Verfahren nach Anspruch 4 , wobei das Größenkriterium dann erfüllt ist, wenn die Anzahl von Komponenten der Ausgangsvariable einen Dimensions-Schwellenwert überschreitet und/oder wenn der Speicherverbrauch der Ausgangsvariable einen Größen-Schwellenwert überschreitet.
- Verfahren nach einem der vorhergehenden Ansprüche, wobei eine reguläre Wertkopie aus einer Quellvariablen in eine Zielvariable erfolgt, wenn der Wert der Zielvariablen aus einer direkten Zuweisung resultiert, die einen Variablenzugriff auf einen adressierbaren Speicherbereich umfasst, und wenn jeder Komponente der Zielvariablen ein Wert zugewiesen wird.
- Verfahren nach einem der vorhergehenden Ansprüche, wobei vor Ausführung des erfindungsgemäßen Verfahrens mindestens eine Optimierung auf die Zwischendarstellung angewandt wurde.
- Verfahren nach Anspruch 7 , wobei das Anwenden mindestens einer Optimierung auf die Zwischendarstellung eine Überprüfung auf das Vorliegen einer Codemusters, in der mehrere parallele Kontrollflusszweige eine Variable schreiben, wobei auf die Variable anschließend in einer Operation zugegriffen wird, umfasst, und bei Vorliegen der Codemusters eine Überprüfung auf Erfüllung eines Kostenkriteriums erfolgt, wobei in dem Fall die Operation von der ursprünglichen Stelle an die Stellen verschoben wird, wo die Variable geschrieben wurde.
- Verfahren zum Erzeugen von Quellcode nach einem der vorhergehenden Ansprüche, wobei eine Überprüfung daraufhin erfolgt, ob die Lebensdauer mindestens einer Quellvariablen wegen der Ersetzung der Ausgangsvariablen durch einen Zeiger vergrößert werden müsste, und wobei in diesem Fall die Optimierung unterlassen wird, wenn die Größe der mindestens einen Quellvariablen die Größe der einzusparenden Ausgangsvariablen übersteigt.
- Verfahren zum Erzeugen von Quellcode nach einem der vorhergehenden Ansprüche, wobei für den Fall, dass eine Quellvariable mit einem Datentyp-Qualifizierer versehen ist, die Optimierung nur dann durchgeführt wird, wenn die Verwendung der Ausgangsvariable mit dem Datentyp-Qualifizierer kompatibel ist.
- Verfahren zum Erzeugen von Quellcode nach einem der vorhergehenden Ansprüche, wobei eine Überprüfung daraufhin erfolgt, ob für alle Kontrollflusszweige zwischen dem Schreibvorgang auf die Ausgangsvariable und der nachfolgenden Verwendung der resultierenden Ausgangsvariable kein Schreibvorgang auf die Quellvariable erfolgt.
- Verfahren zum Konfigurieren eines Steuergeräts, wobei das Steuergerät mindestens eine Recheneinheit umfasst und vorzugsweise mindestens einen Sensor und/oder mindestens einen Aktor aufweist, um Daten eines physikalischen Prozesses zu erfassen und/oder auf diesen einzuwirken, das Verfahren umfassend die Schritte a. Einlesen eines Blockdiagramms, b. Erzeugen eines Quellcodes mit einem Verfahren nach einem der vorhergehenden Ansprüche, c. Kompilieren des Quellcodes für die Recheneinheit, so dass ein ausführbarer Code erzeugt wird, d. Übertragen des ausführbaren Codes auf das Steuergerät, und e. Hinterlegen des ausführbaren Codes auf einem nichtflüchtigen Speicher des Steuergeräts und/oder Ausführen des ausführbaren Codes durch die Recheneinheit des Steuergeräts.
- Computerprogrammprodukt mit einem computerlesbaren Speichermedium, insbesondere einem nichtflüchtigen Speichermedium, auf dem Befehle eingebettet sind, die, wenn sie von einem Prozessor ausgeführt werden, bewirken, dass der Prozessor dazu eingerichtet ist, ein Verfahren gemäß einem der vorhergehenden Ansprüche auszuführen.
- Computersystem umfassend eine Mensch-Maschine-Schnittstelle, einen nichtflüchtigen Speicher und einen Prozessor, wobei der Prozessor dazu eingerichtet ist, ein Verfahren nach einem der vorhergehenden Ansprüche auszuführen.
Description
Die Erfindung betrifft die Erzeugung von ausführbarem Code aus einem Blockdiagramm, insbesondere für die Programmierung von Steuergeräten. Steuergeräte werden in einer Vielzahl von Anwendungen eingesetzt, um physikalische Größen eines Prozesses zu erfassen und/oder mittels angeschlossener Aktuatoren auf einen Prozess einzuwirken; beispielsweise kann eine Antiblockierregelung eines Bremsvorgangs vorgenommen werden. Die das dynamische Verhalten des Prozesses bestimmenden Zeitkonstanten bedingen häufig Zykluszeiten von 1 ms oder kürzer, so dass eine Echtzeitfähigkeit des Steuergeräts erforderlich ist. Aus Kostengründen weisen Steuergeräte häufig Mikrocontroller mit geringem Speicher und beschränkter Rechenleistung auf, weshalb der Größe und Effizienz des ausführbaren Codes eine große Bedeutung zukommt. Um den Entwurf von Steuergeräten zu beschleunigen, werden Kontrollstrategien häufig anhand von Modellen in einer Rechenumgebung wie MATLAB/Simulink entwickelt. Somit können Prozess und/oder Regler bzw. allgemein das Verhalten des Steuergeräts zunächst simuliert und das Vorliegen von gewünschten Eigenschaften überprüft werden. Bei den Modellen kann es sich insbesondere um Blockdiagramme handeln, welche Blöcke umfassen, die Operationen wie Berechnungen ausführen, wobei ein Block beispielsweise aus mehreren Eingangssignalen ein Ausgangssignal berechnen kann. In der Regel werden Blockdiagramme zyklisch ausgeführt, wobei alle Blöcke dauerhaft im Speicher gehalten werden und jeder Block einmal pro Zeitschritt ausgeführt wird. Insbesondere kann ein Block in jedem Zeitschritt auf Eingangssignale aus dem Vorgängerblock eine oder mehrere Operationen anwenden, um Ausgangssignale des aktuellen Schritts zu erzeugen. Blockdiagramme können zusätzlich auch ein Teilmodell zur Beschreibung eines diskreten Verhaltens umfassen, in dem eine Anzahl von Zuständen und Übergangsbedingungen definiert sind. Aus den Modellen kann mittels eines Codegenerators direkt Quellcode für die Programmierung des Steuergeräts erzeugt werden. Beispielsweise ist aus dem Dokument „Production Quality Code Generation from Simulink Block Diagrams“, Proceedings of the 1999 International Symposium on Computer Aided Control System Design, Kohala Coast, Hawai'i, von H. Hanselmann et al. ein Codegenerator für die Erzeugung von Quellcode in Produktionsqualität bekannt. Wenn Modelle in Form eines Blockdiagramms beschrieben werden, wobei Blöcke zum Austausch von Daten bzw. dem Weiterleiten von Signalen über gerichtete Verbindungen bzw. Signalverbindungen verknüpft sind, besteht ein übliches Vorgehen der Codeerzeugung darin, für jeden Ausgang eines Blocks eine Variable im Quellcode zu erzeugen, wobei also für jedes ausgehende Signal eine Blockausgangsvariable erzeugt wird. Allerdings hat dies den Nachteil, dass in der Regel dabei zunächst mehr Blockvariablen entstehen, als wirklich erforderlich sind. Deshalb erfolgt üblicherweise anschließend eine Optimierung wie aus der EP 2418577 A1 bekannt, um die Anzahl von Blockvariablen bzw. allgemein die Codegröße zu verringern. Wegen nicht erfüllter Vorbedingungen tritt je nach Modellsituation häufig eingeschränkt optimierter Code auf. Besonders im Fall von parallelen Kontrollflusszweigen bzw. einer bedingten Ausführung von Modellteilen kann zum Zeitpunkt der Codegenerierung unklar sein, welcher Zweig ausgeführt wird, weil die Bedingungen erst zur Laufzeit sinnvoll ausgewertet werden können. Dies erfordert die Erstellung einer Zwischenspeichervariable, welche Ziel von Umkopieraktionen bzw. Berechnungen der parallelen Kontrollflusszweige ist. Wenn die Zwischenspeichervariable eine mehrkomponentige Variable ist, also beispielsweise ein Vektor, tritt ein erhöhter Stack-Verbrauch und eine durch das Umkopieren erhöhte Laufzeit auf. Die bisher unveröffentlichte EP-Anmeldung 24157503.4 bietet eine bessere Optimierung beispielsweise für Modellsituationen an, in denen mehrere parallele Kontrollflusszweige eine Variable schreiben, wobei auf die Variable anschließend in einer Operation zugegriffen wird. Wenn ein Kostenkriterium erfüllt ist, wird die Operation von der ursprünglichen Stelle an die Stellen verschoben, wo die Variable geschrieben wurde. Für die Erfüllung des Kostenkriteriums kann es insbesondere erforderlich sein, dass die Codegröße der Operation bzw. des zu vervielfachenden Codes unter einem vorgegebenen Schwellenwert liegt. Nach dem Verschieben kann ein vollständiger Verzicht auf die mehrkomponentige Zwischenvariable möglich werden. Diese Optimierung ist aber nur für bestimmte Modellsituationen anwendbar, so kann sie insbesondere daran scheitern, dass auf die Zwischenspeichervariable in mehreren Operationen zugegriffen wird, und somit eine deutliche Zunahme der Codegröße auftreten würde. Vor diesem Hintergrund ist es eine Aufgabe der vorliegenden Erfindung, den Stand der Technik weiterzuentwickeln und insbesondere eine Erzeugung von Quellcode mit erhöhter Ausführungsgeschwindigkeit und/oder verringertem Stack-Verbrauch f