DE102019218853A1 - Verfahren zum Transformieren eines ersten Quellcodes in einen zweiten Quellcode - Google Patents

Verfahren zum Transformieren eines ersten Quellcodes in einen zweiten Quellcode Download PDF

Info

Publication number
DE102019218853A1
DE102019218853A1 DE102019218853.2A DE102019218853A DE102019218853A1 DE 102019218853 A1 DE102019218853 A1 DE 102019218853A1 DE 102019218853 A DE102019218853 A DE 102019218853A DE 102019218853 A1 DE102019218853 A1 DE 102019218853A1
Authority
DE
Germany
Prior art keywords
constants
variables
executable code
code
source code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102019218853.2A
Other languages
English (en)
Inventor
Christian Granzin
Patrick Schuster
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Robert Bosch GmbH
Original Assignee
Robert Bosch GmbH
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Robert Bosch GmbH filed Critical Robert Bosch GmbH
Priority to DE102019218853.2A priority Critical patent/DE102019218853A1/de
Publication of DE102019218853A1 publication Critical patent/DE102019218853A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

Die Erfindung betrifft ein Verfahren zum Transformieren eines ersten Quellcodes in einen zweiten Quellcode, wobei sich aus dem ersten Quellcode ein erster ausführbarer Code erzeugen lässt und wobei sich aus dem zweiten Quellcode ein zweiter ausführbarer Code erzeugen lässt, wobei der erste und der zweite ausführbare Code bei ihrer Ausführung jeweils dieselben Funktionalitäten ausführen, wobei der zweite ausführbare Code kleiner als der erste ausführbare Code ist, wobei der erste Quellcode Befehle für Zugriffe auf Variablen und/oder Konstanten umfasst, wobei der erste ausführbare Code bezüglich der Zugriffe auf die Variablen und/oder Konstanten analysiert wird (210) und wobei der erste Quellcode in Abhängigkeit von der Analyse (210) des ersten ausführbaren Codes derart in den zweiten Quellcode transformiert wird, dass mehrere Variablen und/oder Konstanten jeweils gruppiert werden (220, 230), so dass bei der Ausführung des zweiten ausführbaren Codes auf diese gruppierten Variablen und/oder Konstanten gemeinsam zugegriffen werden kann.

Description

  • Die vorliegende Erfindung betrifft ein Verfahren zum Transformieren eines ersten Quellcodes in einen zweiten Quellcode sowie eine Recheneinheit und ein Computerprogramm zu dessen Durchführung.
  • Stand der Technik
  • In Rechen- bzw. Steuereinheiten, beispielsweise im (Kraft-) Fahrzeugbereich, können Mikrocontroller unterschiedlicher Hersteller zum Einsatz kommen. Während sich die in derartigen Mikrocontrollern verwendeten Prozessoreinheiten bzw. CPUs unterscheiden können, haben sie alle zumeist die Gemeinsamkeit, dass Zugriffe auf Variablen und Konstanten einen sehr großen Anteil des Code-Verbrauchs einnehmen können. Code für derartige Zugriffe kann zumeist aus einem Vorladen einer Basisadresse der jeweiligen Variable bzw. Konstante in ein Register der Prozessoreinheit sowie ferner ein Laden des eigentlichen Datums mithilfe dieser Basisadresse umfassen.
  • Offenbarung der Erfindung
  • Vor diesem Hintergrund werden ein Verfahren zum Transformieren eines ersten Quellcodes in einen zweiten Quellcode sowie eine Recheneinheit und ein Computerprogramm zu dessen Durchführung mit den Merkmalen der unabhängigen Patentansprüche vorgeschlagen. Vorteilhafte Ausgestaltungen sind Gegenstand der Unteransprüche sowie der nachfolgenden Beschreibung.
  • Aus dem ersten Quellcode lässt sich ein erster ausführbarer Code erzeugen und aus dem zweiten Quellcode entsprechend ein zweiter ausführbarer Code. Die Erfindung zielt dabei darauf ab, dass sich die aus den beiden Quellcodes erzeugten ausführbaren Codes nicht in ihrer Funktion bzw. Funktionalität, jedoch in ihrer Größe unterscheiden. Insbesondere sind die Ausführungen des ersten und zweiten ausführbaren Codes somit identisch bzw. die Ausführungen erzielen denselben Effekt bzw. dieselbe Wirkung, jedoch belegen sie unterschiedlich viel Speicherplatz. Durch die Erfindung kann der ausführbare Code mit hohem Wirkungsgrad komprimiert bzw. reduziert werden, d.h. die gesamte Größe bzw. Dateigröße des Codes kann deutlich reduziert werden. Insbesondere kann somit eine Verkleinerung von verwendeten Speichereinheiten wie Flash- oder RAM-Bausteinen und damit verbunden ferner eine hohe Kosteneinsparung ermöglicht werden. Umgekehrt kann es bei gleichbleibender Größe verwendeter Speichereinheiten ermöglicht werden, mehr Funktionalität auf demselben Speicherbaustein unterzubringen.
  • Der erste Quellcode umfasst Befehle für Zugriffe auf Variablen und/oder Konstanten. Im Rahmen des Verfahrens wird der erste ausführbare Code bezüglich der Zugriffe auf die Variablen und/oder Konstanten analysiert, insbesondere dahingehend, wie diese Zugriffe im Zuge der Ausführung des ersten ausführbaren Codes tatsächlich durchgeführt werden. In Abhängigkeit von dieser Analyse wird der erste Quellcode derart in den zweiten Quellcode transformiert, dass mehrere Variablen und/oder Konstanten gruppiert werden, so dass bei der Ausführung des zweiten ausführbaren Codes auf diese gruppierten Variablen und/oder Konstanten gemeinsam zugegriffen werden kann.
  • Der erste bzw. zweite ausführbare Code lässt sich insbesondere derart erzeugen, indem der jeweilige Quellcode zunächst kompiliert wird und indem dem jeweiligen kompilierten Code durch einen sog. Linker bzw. Binder für die Ausführung benötigte Speicheradressen zugewiesen werden (engl. „Linking“).
  • Um den ersten bzw. zweiten ausführbaren Code zu erzeugen, wird der jeweilige Quellcode zunächst zweckmäßigerweise kompiliert. Durch einen sog. Linker oder Binder werden in dem entsprechend kompilierten Code die Variablen und/oder Konstanten insbesondere konkreten Speicherorten zugewiesen (engl. „Linking“). Insbesondere werden dabei symbolische Adressen in konkrete physikalische Speicheradressen umgewandelt. Der auf diese Weise kompilierte und zugewiesene („gelinkte“) Quellcode stellt den jeweiligen ausführbaren Quellcode dar. Bei Ausführung des ausführbaren Quellcode wird auf die Variablen bzw. Konstanten unter Bezug auf die jeweils zugewiesenen Speicheradressen zugegriffen.
  • Im Rahmen des Verfahrens werden zweckmäßigerweise diese Zuweisungen des ersten ausführbaren Codes analysiert und der erste Quellcode wird in Abhängigkeit von dieser Analyse insbesondere derart in den zweiten Quellcode transformiert, dass die Variablen und/oder Konstanten zur Erzeugeng des zweiten ausführbaren Codes effektiver einzelnen Speicheradressen zugewiesen werden können.
  • Insbesondere kann der erste ausführbare Code automatisiert dahingehend analysiert werden, wie auf die einzelnen Variablen und/oder Konstanten zugegriffen wird, an welchen Speicherorten die Variablen und/oder Konstanten zu diesem Zweck hinterlegt werden und wie die Variablen und/oder Konstanten sinnvoll gruppiert werden können, um diese Zugriffe effizienter durchzuführen.
  • Werden in dem ersten Quellcode die Variablen bzw. Konstanten beispielsweise einzeln, separat bzw. unabhängig voneinander deklariert, definiert und adressiert, dann wird durch die Transformation der Quellcode insbesondere so verändert bzw. überarbeitet, dass für bestimmte gruppierte Variablen bzw. Konstanten ein gemeinsames Objekt definiert wird, welches die jeweiligen gruppierten Variablen bzw. Konstanten umfasst und über welches sie adressiert werden.
  • Eine Reduktion bzw. Komprimierung von ausführbarem Code kann beispielsweise auch durchgeführt werden, indem Teile der Variablen bzw. Konstanten in spezielle Speicherbereiche gelegt werden, die eine zuvor in der jeweils verwendeten CPU festgelegte Basisadresse referenzieren, wodurch sich ein Vorladen von Basisadressen umgehen lässt. Eine derartige Methode ist jedoch zumeist prozessorspezifisch und nicht unabhängig von der konkret verwendeten Prozessoreinheit nutzbar. Ferner können nur Teile der Zugriffe auf Variablen bzw. Konstanten optimiert werden, d.h. diese speziellen Speicherbereiche sind zumeist in ihrer Größe und Anzahl beschränkt.
  • Ferner können Compiler zur Code-Reduktion verwendet werden, welche einzelne Variablen und Konstanten zu einer Gruppe zusammenführen und diese Gruppe mit einer gemeinsamen Basisadresse und variablenspezifischen Offsets adressieren können. Derartige Compiler besitzen jedoch den Nachteil, dass die Variablen bzw. Konstanten zumeist durch feste Offsets untrennbar miteinander verbunden sind und sich somit nur noch in großen Paketen in Speichern verschieben lassen, was eine performanceorientierte Optimierung von einzelnen Variablen in andere Bereiche, um Zugriffszeiten im Gesamtsystem zu reduzieren, verhindert. Ferner kann diese Optimierung zumeist nicht in Systemen eingesetzt werden, welche eine Speicherschutzeinheit (MPU) nutzen, da eine vorgegebene Granularität von Variablengruppen oftmals in Konflikt mit einer geforderten Gruppierung der Variablen zu einem MPU-Speicherbereich stehen kann. Eine Gruppierung durch den Compiler kann dann nicht mehr erfolgen. Zudem kann es in bestimmten Anwendungsbereichen, z.B. bei Steuergeräten im (Kraft-) Fahrzeugbereich, sicherheitsbedingt vorgegeben sein, Compiler-basierte Code-Reduktion zu deaktivieren.
  • Das vorliegende Verfahren ermöglicht hingegen eine prozessorunabhängige Code-Reduktion, die für verschiedene Prozessoren und Hardware gleichermaßen genutzt werden kann. Ferner kann das vorliegende Verfahren unabhängig von der Art des Compilers durchgeführt werden, so dass es auch in Anwendungsbereichen eingesetzt werden kann, in welchen Compileroptimierungen üblicherweise zu deaktivieren sind. Ferner wird eine Kompatibilität des vorliegenden Verfahrens mit Speicherschutzeinheiten ermöglicht. Aufrufe von Variablen und Konstanten können im Rahmen des vorliegenden Verfahrens zweckmäßigerweise derart gruppiert werden, dass eine Granularität der entsprechenden gemeinsamen Strukturobjekte in Einklang mit bzw. in Abhängigkeit von einer Gruppierung gewählt wird, die von der Speicherschutzeinheit gefordert wird.
  • Als Quellcode ist im vorliegenden Zusammenhang insbesondere ein Code zu verstehen, welcher in einer Hochsprache bzw. in einer höheren Programmiersprache verfasst ist und nicht von einer Prozessoreinheit verstanden und ausgeführt werden kann. Der kompilierte ausführbare Code ist hingegen insbesondere als ein Maschinencode anzusehen, der direkt von einer Prozessoreinheit ausgeführt werden kann.
  • Besonders zweckmäßig werden die jeweiligen Variablen und/oder Konstanten bzw. die Zugriffe auf diese Variablen und/oder Konstanten zu einem gemeinsamen Strukturobjekt bzw. Strukturelement gruppiert. Als ein derartiges Strukturobjekt bzw. Strukturelement sei in diesem Zusammenhang insbesondere eine Funktion oder ein Datentyp zu verstehen, der mehrere Variablen und/oder Konstanten gleichen oder verschiedenen Typs zu einem neuen Datentyp zusammenfasst.
  • Zweckmäßigerweise kann das gemeinsame Objekt bzw. Strukturobjekt durch eine gemeinsame, übergeordnete Basisadresse adressiert werden. Somit werden nicht alle zu dem Strukturobjekt gruppierten Variablen bzw. Konstanten jeweils mittels einer einzelnen, individuellen Basisadresse vorgeladen, sondern alle Variablen bzw. Konstanten können mittels der gemeinsamen Basisadresse gemeinsam vorgeladen werden.
  • Ausführbarer Code für derartige Zugriffe kann zumeist aus einem Vorladen einer Basisadresse der jeweiligen Variable bzw. Konstante in ein Register der Prozessoreinheit sowie ferner ein Laden des eigentlichen Datums mithilfe dieser Basisadresse umfassen. Ein Anteil des Codes, der Zugriffe auf Variablen bzw. Konstanten betrifft, kann somit reduziert bzw. komprimiert werden.
  • Insbesondere können im Zuge des vorliegenden Verfahrens eine Analyse-Phase und eine Optimierungs-Phase durchgeführt werden. Im Zuge der Analyse-Phase wird der erste ausführbare Code analysiert und ein Ergebnis dieser Analyse wird z.B. in einer Analysedatei hinterlegt. Mit Hilfe des Analyseergebnisses kann im Zuge der Optimierungs-Phase der erste Quellcode in den zweiten Quellcode transformiert werden.
  • Insbesondere kann das Komprimieren des Quellcodes als ein automatisierter, mehrstufiger Prozess ablaufen, wobei zunächst das Kompilieren und Linken des ersten Quellecodes durchgeführt wird, daraufhin die Analyse- und Optimierungs-Phase sowie das Kompilieren und Linken des zweiten Quellecodes. Beispielsweise können die Analyse- und Optimierungs-Phase auch unabhängig voneinander nach Bedarf durchgeführt werden. Insbesondere kann die erzeugte Analysedatei auch für weitere kompatible Quellcodes verwendet werden.
  • Gemäß einer vorteilhaften Ausführungsform wird der erste ausführbare Code bezüglich einer Zuweisung der Variablen und/oder Konstanten zu einer Speichereinheit und/oder zu Speicherbereichen einer Speichereinheit analysiert. Besonders bevorzugt werden somit Eigenschaften bezüglich einer Speichereinheit und/oder bezüglich Speicherbereichen einer Speichereinheit analysiert, in welche die Variablen und/oder Konstanten während der Ausführung des ersten ausführbaren Codes geladen werden und insbesondere temporär hinterlegt sind.
  • Als Speichereinheit sei in dem vorliegenden Zusammenhang insbesondere eine bauliche Einheit bzw. ein Hardwareelement zu verstehen, beispielsweise ein Flash- oder RAM-Speicher bzw. ein entsprechender Flash- oder RAM-Baustein. Als ein Speicherbereich sei in diesem Zusammenhang insbesondere ein bestimmter Abschnitt bzw. Teil einer Speichereinheit zu verstehen. Insbesondere kann eine Speichereinheit, z.B. ein Flash- oder RAM-Speicher, bzw. die komplette Speicherkapazität einer Speichereinheit konzeptionell in eine Vielzahl einzelner Speicherbereiche unterteilt bzw. eingeteilt sein. Bei einem Speicherbereich kann es sich beispielsweise um eine einzelne Speicheradresse handeln, unter welcher ein spezielles Datum hinterlegt ist, oder auch um eine Vielzahl derartiger Speicheradressen. Die Speichereinheit bzw. bestimmte Speicherbereiche der Speichereinheit werden insbesondere durch eine übergeordnete Instant verwaltet und gesichert, insbesondere durch eine Speicherschutzeinheit (engl. memory protection unit, MPU).
  • Die unterschiedlichen Variablen bzw. Konstanten sind während der Ausführung des ersten ausführbaren Codes insbesondere in einer oder mehreren Speichereinheiten hinterlegt. Ferner sind in derartigen Speichereinheiten jeweils Variablen bzw. Konstanten insbesondere in einem oder mehreren Speicherbereichen hinterlegt.
  • Zweckmäßigerweise werden nun die konkreten Speicherorte analysiert, in welchen die einzelnen Variablen bzw. Konstanten während der Ausführung des ersten ausführbaren Codes hinterlegt sind, zweckmäßigerweise in Form der gesamten Speichereinheiten bzw. Speicherbausteine und/oder in Form der konkreten Speicheradressen bzw. Speicherbereiche innerhalb einzelnen Speichereinheiten. Insbesondere wird analysiert, wo die einzelnen Variablen bzw. Konstanten während der Ausführung des ersten ausführbaren Codes konkret hinterlegt sind, zweckmäßigerweise welche Variablen bzw. Konstanten in derselben Speichereinheit und insbesondere in demselben Speicherbereich hinterlegt sind oder ferner zweckmäßigerweise in benachbarten Speicherbereichen bzw. Speichereinheiten. Besonders zweckmäßig wird der erste ausführbare Code dahingehend analysiert, welche Variablen bzw. Konstanten aufgrund ihrer konkreten Speicherorte sinnvoll gruppiert werden können.
  • Wenn in dem kompilierten ersten Quellcode den Variablen und/oder Konstanten konkrete Speicherorte durch den Linker bzw. Binder zugewiesen werden, können diese Zuweisungen in einer ELF-Datei des ersten ausführbaren Codes hinterlegt werden, wobei das Dateiformat des ausführbaren Codes durch das sog. ELF (engl. „Executable and Linkable Format“, ELF) beschrieben wird. Zur Analyse des ersten ausführbaren Codes können beispielsweise Einträge bezüglich der jeweiligen Zuweisungen bzw. entsprechender Relokationen in einer derartigen ELF-Datei analysiert werden.
  • Vorzugsweise wird der erste ausführbare Code dahingehend analysiert, welche Variablen und/oder Konstanten jeweils in derselben Speichereinheit hinterlegt sind. Insbesondere können Variablen und/oder Konstanten in dem zweiten Quellcode zu einem gemeinsamen Strukturobjekt gruppiert werden, welche während der Ausführung des ersten ausführbaren Codes in derselben Speichereinheit hinterlegt sind, so dass durch das entsprechende gemeinsame Strukturobjekt der Inhalt der jeweiligen Speichereinheit abgebildet werden kann. Ebenso können durch das Wissen um den tatsächlichen Speicherort zweckmäßigerweise auch Variablen bzw. Konstanten zu einem Strukturobjekt zusammengefasst werden, welche in verschiedenen Speichereinheiten hinterlegt sind.
  • Alternativ oder zusätzlich wird der erste ausführbare Code dahingehend analysiert, welche Speicherbereiche der Speichereinheit jeweils gemeinsam von einer Speicherschutzeinheit (memory protection unit, MPU) verwaltet werden. Zweckmäßigerweise können Variablen und/oder Konstanten, deren Speicherbereiche von derselben MPU verwaltet werden, gruppiert werden, so dass durch das entsprechende Strukturobjekt der Inhalt einer MPU-Region abgebildet werden kann. Ebenso wird es durch die Analyse der von Speicherschutzeinheiten verwalteten Speicherbereiche ermöglicht, Variablen bzw. Konstanten zu gruppieren, welche unterschiedlichen MPU-Regionen angehören.
  • Alternativ oder zusätzlich wird vorzugsweise eine statistische Analyse des ersten ausführbaren Codes bezüglich der Zugriffe auf die Variablen und/oder Konstanten durchgeführt. Beispielsweise kann auch eine Analyse von generierten Compiler-Artefakten durchgeführt werden. Insbesondere kann somit analysiert werden, wie oft auf einzelne Variablen und/oder Konstanten während der Ausführung des ersten ausführbaren Codes zugegriffen wird und ferner ob auf bestimmte Variablen und/oder Konstanten gemeinsam zugegriffen wird.
  • Insbesondere kann eine Datenbank untersucht werden, in welcher zweckmäßigerweise der erste ausführbare Code selbst hinterlegt sein kann oder ferner Informationen bezüglich eines konkreten Anwendungsbereichs bzw. eines konkreten Projekts, im Zuge dessen der Code eingesetzt und ausgeführt werden soll.
  • Vorteilhafterweise werden die jeweiligen Variablen und/oder Konstanten jeweils in Abhängigkeit von einer Prozessorarchitektur gruppiert. Insbesondere kann durch eine entsprechende Prozessorarchitektur eine maximale Größe der einzelnen gemeinsamen Strukturobjekte vorgegeben werden. Beispielsweise kann ein maximaler Versatz („Immediate Offset“) eines Lade- bzw. Schreib-Befehls in einem Befehlssatz („Instruction Set“) der entsprechenden Prozessoreinheit vorgegeben werden.
  • Vorteilhafterweise werden die jeweiligen Variablen und/oder Konstanten jeweils im Zuge einer Source-To-Source-Transformation gruppiert. Eine derartige Source-To-Source-Transformation (auch als Transcompiler, Transpiler oder Quer-Übersetzer bezeichnet) ist insbesondere eine Transformation des ersten Quellcodes, der in einer speziellen Programmiersprache verfasst ist, in den äquivalenten zweiten Quellcode, der in derselben Programmiersprache oder in einer anderen Programmiersprache verfasst ist. Diese Programmiersprachen des Quellcodes vor und nach der Transformation besitzen insbesondere dieselbe oder zumindest im Wesentlichen dieselbe Abstraktion bzw. Komplexität. Insbesondere sind diese Programmiersprachen vor und nach der Transformation jeweils Hochsprachen bzw. höhere Programmiersprachen, welche insbesondere nicht von einer Prozessoreinheit verstanden und ausgeführt werden können. Im Gegensatz dazu übersetzt ein herkömmlicher Compiler Quellcode von einer komplexen, abstrakten Programmiersprache bzw. Hochsprache in eine weniger komplexe, weniger abstrakte Sprache, insbesondere in einen Maschinencode, der direkt von einer Prozessoreinheit ausgeführt werden kann. Durch eine derartige Source-To-Source-Transformation kann ein maschinenunabhängiger Quellcode bereitgestellt werden, aus dem sich dann der komprimierte zweite ausführbare Code ergibt.
  • Gemäß einer vorteilhaften Ausführungsform werden die jeweiligen Variablen und/oder Konstanten jeweils in Abhängigkeit von einem vorgebbaren Gruppierungskriterium gruppiert. Durch dieses Gruppierungskriterium kann zweckmäßigerweise vorgegeben werden, auf welche Aspekte die Gruppierung ausgelegt werden soll, beispielsweise Gruppierung eine maximale Komprimierung bzw. Reduktion des ausführbaren Codes erreicht werden soll oder ein möglichst effizienter Zugriff auf die Variablen und/oder Konstanten.
  • Vorteilhafterweise wird als das Gruppierungskriterium vorgegeben, dass der erste ausführbare Code maximal möglich komprimiert werden soll, ohne dass es zu Einschränkungen bei Zugriffen auf die Variablen und/oder Konstanten kommen darf, insbesondere ohne Einschränkungen bei Zugriffen auf die Speichereinheit bzw. Speicherbereiche, in welchen die Variablen/Konstanten hinterlegt sind. Insbesondere kann in diesem Fall ein Kompromiss aus möglichst effizienter Code-Reduktion und schnellstmöglichen Speicherzugriffen erreicht werden.
  • Alternativ oder zusätzlich wird als das Gruppierungskriterium vorzugsweise vorgegeben, dass der erste ausführbare Code maximal möglich komprimiert werden soll, wobei es zu Einschränkungen bei Zugriffen auf die Variablen und/oder Konstanten bzw. auf die Speichereinheit/Speicherbereiche kommen darf. Insbesondere kann in diesem Fall eine maximal mögliche Code-Komprimierung erreicht werden, welche sich jedoch gegebenenfalls auf eine Laufzeit des Codes auswirken kann.
  • Insbesondere können in obigen beiden Fällen zweckmäßigerweise auch Variablen bzw. Konstanten gruppiert werden, die in verschiedenen Speichereinheiten, Speicherbereichen oder MPU-Regionen hinterlegt sind.
  • Alternativ oder zusätzlich wird als das Gruppierungskriterium bevorzugt vorgegeben, dass eine maximal mögliche Gruppierung von Variablen und/oder Konstanten erreicht wird, insbesondere in Abhängigkeit von der Speichereinheit und/oder von den Speicherbereichen der Speichereinheit, in welcher diese hinterlegt sind, insbesondere unabhängig von der Komprimierung des ersten ausführbaren Codes. In diesem Fall ist eine Gruppierung von Variablen und/oder Konstanten besonders zweckmäßig, die in derselben Speichereinheit und/oder in demselben Speicherbereich hinterlegt sind. Ferner können in diesem Fall besonders zweckmäßig Variablen bzw. Konstanten gruppiert werden, die in derselben MPU-Region hinterlegt sind. Somit kann insbesondere eine MPU-Instrumentierung optimiert werden, insbesondere ohne Berücksichtigung des Code-Verbrauchs.
  • Gemäß einer vorteilhaften Ausführungsform wird der erste ausführbare Code bezüglich der Zugriffe auf die Variablen und/oder Konstanten analysiert, , indem für jede Variable und/oder Konstante jeweils ein Knotenpunkt erstellt wird und Verbindungen zwischen den einzelnen Knotenpunkten erstellt werden. Für jeden Knotenpunkt wird vorzugsweise jeweils ein erster Kennwert erstellt, welcher von einer Datengröße der jeweiligen Variable und/oder Konstante abhängt. Insbesondere kann die Größe bzw. Datengröße der jeweiligen Variable bzw. Konstante selbst als erster Kennwert erstellt werden und in dem Knotenpunkt hinterlegt werden. Bevorzugt wird für jede Verbindung zwischen jeweils zwei Knotenpunkten ein zweiter Kennwert erstellt, welcher von Zugriffen auf die Variablen und/oder Konstanten der jeweiligen zwei Knotenpunkte abhängt. Insbesondere kann der zweite Kennwert von der Speichereinheit und/oder dem Speicherbereich der Speichereinheit abhängen, in welcher die Variablen und/oder Konstanten der jeweiligen zwei Knotenpunkte hinterlegt sind. Zweckmäßigerweise charakterisiert der zweite Kennwert eine Attraktivität zwischen den Variablen/Konstanten der jeweiligen beiden Knotenpunkte, insbesondere in Bezug auf die jeweiligen Speicherorte. Beispielsweise kann der zweite Kennwert umso größer sein, je näher die Speicherorte der jeweiligen Variablen/Konstanten beieinander liegen, d.h. für Paare von Variablen/Konstanten innerhalb derselben Speichereinheit oder demselben Speicherbereich wird ein größerer zweiter Kennwert gewählt als für Variablen/Konstanten in verschiedenen Speichereinheit oder Speicherbereichen.
  • Beispielsweise kann die Attraktivität zwischen Variablen/Konstanten insbesondere durch Zugriffe auf mehrere Variablen jeweils innerhalb einer Funktion definiert werden. Basisadressen der gemeinsamen Strukturobjekte werden insbesondere innerhalb einer Funktion geladen. Wird beispielsweise eine erste Variable in einer ersten Funktion genutzt und eine zweite Variable in einer zweiten Funktion, dann ist keine Attraktivität zwischen diesen beiden Variablen bzw. deren Knotenpunkten vorhanden. Die Attraktivität bzw. der entsprechende zweite Kennwert hat in diesem Fall zweckmäßigerweise einen geringen Wert und kann beispielsweise zu null gewählt werden.
  • Vorteilhafterweise werden die jeweiligen Variablen und/oder Konstanten jeweils gruppiert, indem für alle Knotenpunkte bewertet wird, ob die einzelnen Knotenpunkte jeweils über eine Verbindung mit einem weiteren Knotenpunkt verbunden sind. Wenn dies der Fall ist, wird jeweils in Abhängigkeit von den ersten Kennwerten dieser zwei verbundenen Knotenpunkte und in Abhängigkeit von dem zweiten Kennwert der Verbindung dieser zwei Kontenpunkte bewertet, ob die Variablen und/oder Konstanten dieser zwei verbundenen Knotenpunkte gruppiert werden, insbesondere ob diese Variablen und/oder Konstanten dieser zu einem bereits existierenden oder zu einem neuen Strukturobjekt gruppiert werden. Zweckmäßigerweise werden alle Knotenpunkte iterativ abgearbeitet. Wenn ein Knotenpunkt bzw. dessen Variable/Konstante bereits Teil eines Strukturobjekts ist oder wenn ein Kontenpunkt nicht mit einem weiteren Knotenpunkt verbunden ist, wird dieser Knotenpunkt insbesondere übersprungen. Insbesondere wird für jeden Knotenpunkt diejenige Verbindung mit dem höchsten zweiten Kennwert gesucht. Verbundene Knotenpunkte mit höherem zweitem Kennwert werden zweckmäßigerweise zuerst in demselben Strukturobjekt gruppiert als verbundene Knotenpunkte mit niedrigerem zweitem Kennwert. Anhand der ersten Kennwerte kann insbesondere bewertet werden, ob das jeweilige Strukturobjekt seine maximal zulässige Größe erreicht hat. Wenn dies der Fall ist, wird zweckmäßigerweise ein neues Strukturobjekt erstellt.
  • Eine erfindungsgemäße Recheneinheit, z.B. ein Steuergerät eines Kraftfahrzeugs, ist, insbesondere programmtechnisch, dazu eingerichtet, ein erfindungsgemäßes Verfahren durchzuführen.
  • Auch die Implementierung eines erfindungsgemäßen Verfahrens in Form eines Computerprogramms oder Computerprogrammprodukts mit Programmcode zur Durchführung aller Verfahrensschritte ist vorteilhaft, da dies besonders geringe Kosten verursacht, insbesondere wenn ein ausführendes Steuergerät noch für weitere Aufgaben genutzt wird und daher ohnehin vorhanden ist. Geeignete Datenträger zur Bereitstellung des Computerprogramms sind insbesondere magnetische, optische und elektrische Speicher, wie z.B. Festplatten, Flash-Speicher, EEPROMs, DVDs u.a.m. Auch ein Download eines Programms über Computernetze (Internet, Intranet usw.) ist möglich.
  • Weitere Vorteile und Ausgestaltungen der Erfindung ergeben sich aus der Beschreibung und der beiliegenden Zeichnung.
  • Die Erfindung ist anhand von Ausführungsbeispielen in der Zeichnung schematisch dargestellt und wird im Folgenden unter Bezugnahme auf die Zeichnung beschrieben.
  • Figurenliste
    • 1 zeigt schematisch ein Steuergerät eines (Kraft-) Fahrzeugs mit ausführbarem Code, welches einer bevorzugten Ausführungsform des erfindungsgemäßen Verfahrens zugrunde liegen kann.
    • 2 zeigt schematisch eine bevorzugte Ausführungsform des erfindungsgemäßen Verfahrens als ein Blockdiagramm.
  • Ausführungsform(en) der Erfindung
  • In 1 ist eine Recheneinheit in Form eines Steuergeräts eines (Kraft-) Fahrzeugs schematisch dargestellt und mit 100 bezeichnet, beispielsweise ein Motorsteuergerät oder ein Steuergerät zum Ausführen sicherheitskritischer Fahrzeugfunktionen, etwa im Zuge autonomen Fahrens.
  • Das Steuergerät 100 weist eine Prozessoreinheit bzw. CPU 110 auf sowie ferner Speichereinheiten 120 und 130, die jeweils beispielsweise als Flash- oder RAM-Speicher ausgebildet sein können.
  • In der Speichereinheit 120 ist ein erster ausführbarer Code 121 hinterlegt, welcher insbesondere durch Kompilieren und Linken eines ersten Quellcodes erzeugt wird. In unterschiedlichen Speicherbereichen 131 und 132 der Speichereinheit 130 können jeweils Variablen und Konstanten hinterlegt werden, welche zur Ausführung des Codes 121 benötigt werden.
  • Ferner ist ein Speicherschutzeinheit bzw. MPU 140 vorgesehen, welche Zugriffe auf die Speichereinheit 130 bzw. deren Speicherbereiche 131, 132 verwaltet und überwacht. Die Speicherbereiche 131, 132 können dabei jeweils MPU-Regionen darstellen, also Teile der Speichereinheit 130, welche von der Speicherschutzeinheit 140 gemeinsam verwaltet und überwacht werden.
  • Beispielsweise kann der erste ausführbare Code 121 derart ausgestaltet sein, dass für Zugriffe auf die einzelnen Variablen und Konstanten jeweils eine Basisadresse der jeweiligen Variable bzw. Konstante in ein Register der Prozessoreinheit 110 vorgeladen wird und anschließend das eigentliche Datum mithilfe dieser Basisadresse geladen wird.
  • Im Rahmen einer bevorzugten Ausführungsform des erfindungsgemäßen Verfahrens soll der ausführbare Code 121 komprimiert bzw. reduziert werden, so dass die Speichereinheit 120 kleiner gebaut werden kann oder so dass bei gleichbleibender Größe der Speichereinheit 120 mehr Funktionalitäten auf dieser untergebracht werden kann. Zu diesem Zweck sollen die Variablen und Konstanten gruppiert werden, so dass ein Anteil des Codes, welcher Zugriffe auf die Variablen und Konstante betrifft, reduziert werden kann. Zu diesem Zweck wird der dem ersten ausführbaren Code 121 zugrunde liegende erste Quellcode in einen zweiten Quellcode transformiert, welcher sich wiederum in einen zweiten ausführbaren Code kompilieren lässt, der kleiner als der erste ausführbare Code 121 ist.
  • Um die Komprimierung des Codes 121 im Zuge der bevorzugten Ausführungsform des erfindungsgemäßen Verfahrens durchzuführen, kann beispielsweise ein entsprechender Algorithmus bzw. ein entsprechendes Programm von einer weiteren Recheneinheit durchgeführt werden, insbesondere einem Programmiergerät, wie z.B. einem PC.
  • Eine bevorzugte Ausführungsform des erfindungsgemäßen Verfahrens ist in 2 schematisch als ein Blockdiagramm dargestellt und soll nachfolgend in Bezug auf die 1 und 2 erläutert werden.
  • Zunächst wird eine Analyse 210 des ersten ausführbaren Codes 121 vorgenommen. Insbesondere wird zu diesem Zweck eine Analyse bezüglich der Zugriffe auf die Variablen und/oder Konstanten durchgeführt, weiter insbesondere eine Analyse bezüglich einer Zuweisung der Variablen und/oder Konstanten zu der Speichereinheit 130 und ferner zu den Speicherbereichen 131, 132, in welcher die Variablen und Konstanten während der Ausführung des ausführbaren Codes 121 hinterlegt sind.
  • Beispielsweise kann der ausführbare Code 121 dahingehend analysiert werden, welche Speicherbereiche 131, 132 der Speichereinheit 130 jeweils gemeinsam von der Speicherschutzeinheit 140 verwaltet werden.
  • Zu diesem Zweck wird in Schritt 211 für jede Variable und Konstante jeweils ein Kontenpunkt erstellt. Ferner wird für jeden dieser Knotenpunkt jeweils ein erster Kennwert erstellt, welcher beispielsweise der Datengröße der jeweiligen Variable bzw. Konstante entspricht.
  • In Schritt 212 werden Verbindungen zwischen den einzelnen Knotenpunkten erstellt. Für jede Verbindung zwischen jeweils zwei Knotenpunkten wird ein zweiter Kennwert erstellt, welcher von dem Speicherbereich der Speichereinheit 130 abhängt, in welcher die Variablen bzw. Konstanten der jeweiligen zwei Knotenpunkte hinterlegt sind.
  • Wenn die Variablen bzw. Konstanten zweier verbundener Knotenpunkte innerhalb desselben Speicherbereichs bzw. derselben MPU-Region der Speichereinheit 130 hinterlegt sind, wird für die Verbindung dieser Knotenpunkte ein hoher zweiter Kennwert erstellt. Für entsprechend verbundene Variablen/Konstanten, welche nicht innerhalb desselben Speicherbereichs bzw. derselben MPU-Region hinterlegt sind, wird für die entsprechende Knotenpunktverbindung ein niedriger zweiter Kennwert erstellt.
  • Basierend auf dieser Analyse 210 wird eine Gruppierung 220 einzelner Variablen bzw. Konstanten durchgeführt. Zu diesem Zweck wird in Schritt 221 zunächst ein Gruppierungskriterium vorgegeben, beispielsweise dass eine maximal mögliche Gruppierung von Variablen und Konstanten in Abhängigkeit von den Speicherbereichen bzw. MPU-Regionen 131, 132 der Speichereinheit 130 erreicht werden soll.
  • In Schritt 222 werden iterativ alle Knotenpunkte abgearbeitet und jeweils dahingehend überprüft, ob der jeweilige Knotenpunkt über eine Verbindung mit einem weiteren Knotenpunkt verbunden ist und ferner noch nicht einem Strukturobjekt zugeordnet ist. Wenn dies der Fall ist, werden die einzelnen Verbindungen des jeweiligen Knotenpunkts untersucht und insbesondere diejenige bzw. diejenigen Verbindungen mit dem höchsten bzw. den höchsten zweiten Kennwerten gesucht. Diejenigen verbundenen Knotenpunkte mit dem höchsten zweiten Kennwert werden demselben Strukturobjekt zugeordnet.
  • Anhand der ersten Kennwerte der einem Strukturobjekt zugeordneten Knotenpunkte wird überprüft, ob das jeweilige Strukturobjekt seine maximal zulässige Größe erreicht hat. Wenn dies der Fall ist, wird ein neues Strukturobjekt erstellt.
  • In Schritt 223 wird als Ergebnis eine Zuordnung von Variablen bzw. Konstanten, welche jeweils derselben MPU-Region bzw. demselben Speicherbereich 131, 132 der Speichereinheit 130 hinterlegt sind, zu einem gemeinsamen Strukturobjekt bestimmt.
  • Basierend auf diesem Ergebnis wird eine Transformation 230 des ersten Quellcodes in den zweiten Quellcode durchgeführt. Zu diesem Zweck wird in Schritt 231 eine Source-To-Source-Transformation dahingehend durchgeführt, dass die jeweiligen Variablen und Konstanten jeweils zu dem gemeinsamen Strukturobjekt gruppiert werden.
  • Im Zuge dieser Source-To-Source-Transformation wird der Code 121, der in einer speziellen Programmiersprache wie z.B. C++ verfasst ist, in einen äquivalenten Ausgangs-Code transformiert, der beispielsweise ebenfalls in C++ verfasst ist. Insbesondere wird der Code 121 derart transformiert bzw. komprimiert, dass die jeweiligen Variablen und Konstanten nicht mehr einzeln definiert und adressiert werden, sondern dass entsprechendes Strukturobjekt als ein neuer Datentyp definiert wird, welcher diese Variablen und Konstanten umfasst.
  • In Schritt 232 wird aus dem zweiten Quellcode durch Kompilieren und Linken der zweite ausführbare Code erzeugt und der in der Speichereinheit 120 des Steuergeräts 100 hinterlegte erste ausführbare Code 121 wird durch diesen zweiten ausführbaren Code ersetzt.

Claims (14)

  1. Verfahren zum Transformieren eines ersten Quellcodes in einen zweiten Quellcode, wobei sich aus dem ersten Quellcode ein erster ausführbarer Code (121) erzeugen lässt und wobei sich aus dem zweiten Quellcode ein zweiter ausführbarer Code erzeugen lässt, wobei der erste und der zweite ausführbare Code bei ihrer Ausführung jeweils dieselben Funktionalitäten ausführen, wobei der zweite ausführbare Code kleiner als der erste ausführbare Code ist, wobei der erste Quellcode Befehle für Zugriffe auf Variablen und/oder Konstanten umfasst, wobei der erste ausführbare Code (121) bezüglich der Zugriffe auf die Variablen und/oder Konstanten analysiert wird (210) und wobei der erste Quellcode in Abhängigkeit von der Analyse (210) des ersten ausführbaren Codes (121) derart in den zweiten Quellcode transformiert wird, dass mehrere Variablen und/oder Konstanten jeweils gruppiert werden (220, 230), so dass bei der Ausführung des zweiten ausführbaren Codes auf diese gruppierten Variablen und/oder Konstanten gemeinsam zugegriffen werden kann.
  2. Verfahren nach Anspruch 1, wobei der erste ausführbare Code (121) bezüglich einer Zuweisung der Variablen und/oder Konstanten zu einer Speichereinheit (130) und/oder zu Speicherbereichen (131, 132) einer Speichereinheit (130) analysiert wird.
  3. Verfahren nach Anspruch 1 oder 2, wobei der erste ausführbare Code (121) dahingehend analysiert wird, welche Variablen und/oder Konstanten jeweils in derselben Speichereinheit (130) hinterlegt sind.
  4. Verfahren nach einem der vorstehenden Ansprüche, wobei der erste ausführbare Code (121) dahingehend analysiert wird, welche Speicherbereiche (131, 132) der Speichereinheit (130) jeweils gemeinsam von einer Speicherschutzeinheit (140) verwaltet werden.
  5. Verfahren nach einem der vorstehenden Ansprüche, wobei eine statistische Analyse des ersten ausführbaren Codes (121) bezüglich der Zugriffe auf die Variablen und/oder Konstanten durchgeführt wird.
  6. Verfahren nach einem der Ansprüche, wobei die jeweiligen Variablen und/oder Konstanten jeweils in Abhängigkeit von einer Prozessorarchitektur gruppiert werden.
  7. Verfahren nach einem der vorstehenden Ansprüche, wobei die jeweiligen Variablen und/oder Konstanten jeweils im Zuge einer Source-To-Source-Transformation gruppiert werden (231).
  8. Verfahren nach einem der vorstehenden Ansprüche, wobei die jeweiligen Variablen und/oder Konstanten jeweils in Abhängigkeit von einem vorgebbaren Gruppierungskriterium gruppiert werden (220, 230).
  9. Verfahren nach Anspruch 8, wobei als das Gruppierungskriterium vorgegeben wird (221), dass der erste ausführbare Code (121) maximal möglich komprimiert werden soll, ohne dass es zu Einschränkungen bei Zugriffen auf die Variablen und/oder Konstanten kommen darf und/oder dass der erste ausführbare Code (121) maximal möglich komprimiert werden soll, wobei es zu Einschränkungen bei Zugriffen auf die Variablen und/oder Konstanten kommen darf und/oder dass eine maximal mögliche Gruppierung von Variablen und/oder Konstanten erreicht wird.
  10. Verfahren nach einem der vorstehenden Ansprüche, wobei der erste ausführbare Code (121) bezüglich der Zugriffe auf die Variablen und/oder Konstanten analysiert wird, indem für jede Variable und/oder Konstante jeweils ein Kontenpunkt erstellt wird (211) und Verbindungen zwischen den einzelnen Knotenpunkten erstellt werden (212), wobei für jeden Knotenpunkt jeweils ein erster Kennwert erstellt wird (211), welcher von einer Datengröße der jeweiligen Variable und/oder Konstante abhängt und wobei für jede Verbindung zwischen jeweils zwei Knotenpunkten ein zweiter Kennwert erstellt wird (212), welcher von Zugriffen auf die Variablen und/oder Konstanten der jeweiligen zwei Knotenpunkte Zugriffen abhängt.
  11. Verfahren nach Anspruch 10, wobei die jeweiligen Variablen und/oder Konstanten jeweils gruppiert werden, indem für alle Knotenpunkte bewertet wird (222), ob die einzelnen Knotenpunkte jeweils über eine Verbindung mit einem weiteren Knotenpunkt verbunden sind und, wenn dies der Fall ist, jeweils in Abhängigkeit von den ersten Kennwerten dieser zwei verbundenen Knotenpunkte und in Abhängigkeit von dem zweiten Kennwert der Verbindung dieser zwei Kontenpunkte bewertet wird, ob die Variablen und/oder Konstanten dieser zwei verbundenen Knotenpunkte gruppiert werden.
  12. Recheneinheit (100), die dazu eingerichtet ist, alle Verfahrensschritte eines Verfahrens nach einem der vorstehenden Ansprüche durchzuführen.
  13. Computerprogramm, das eine Recheneinheit (100) dazu veranlasst, alle Verfahrensschritte eines Verfahrens nach einem der Ansprüche 1 bis 11 durchzuführen, wenn es auf der Recheneinheit (100) ausgeführt wird.
  14. Maschinenlesbares Speichermedium mit einem darauf gespeicherten Computerprogramm nach Anspruch 13.
DE102019218853.2A 2019-12-04 2019-12-04 Verfahren zum Transformieren eines ersten Quellcodes in einen zweiten Quellcode Pending DE102019218853A1 (de)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE102019218853.2A DE102019218853A1 (de) 2019-12-04 2019-12-04 Verfahren zum Transformieren eines ersten Quellcodes in einen zweiten Quellcode

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102019218853.2A DE102019218853A1 (de) 2019-12-04 2019-12-04 Verfahren zum Transformieren eines ersten Quellcodes in einen zweiten Quellcode

Publications (1)

Publication Number Publication Date
DE102019218853A1 true DE102019218853A1 (de) 2021-06-10

Family

ID=75963081

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019218853.2A Pending DE102019218853A1 (de) 2019-12-04 2019-12-04 Verfahren zum Transformieren eines ersten Quellcodes in einen zweiten Quellcode

Country Status (1)

Country Link
DE (1) DE102019218853A1 (de)

Similar Documents

Publication Publication Date Title
DE69924857T2 (de) Programm-kode-umwandlung
EP0689694B1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
DE69909945T2 (de) Verfahren und Anordnung zur Korrelation von Profildaten dynamisch erzeugt durch ein optimiertes ausführbares Programm mit Quellcodeanweisungen
DE112013001735T5 (de) Optimieren des Verbindens von Anweisungen
DE202015009297U1 (de) Programmprodukt zum Eliminieren zusätzlicher Speicherladungen während des Zugriffs auf globale Variablen in positionsunabhängigem Code
DE102016223939A1 (de) Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeugeigene Vorrichtung
WO2003088039A2 (de) Optimierung von compilergeneriertem programmcode
DE102019102861A1 (de) Verfahren und Vorrichtung zur Abschätzung der Abnutzung eines nicht-flüchtigen Informationsspeichers
EP2698678B1 (de) Konfigurationstechnik für ein Steuergerät mit miteinander kommunizierenden Anwendungen
EP2363809B1 (de) Verfahren zur Optimierung eines Steuerprogramms für Aktuatoren
DE112018002316T5 (de) Codeabdeckungsverfolgung für ein mikrocontroller-programm
EP2869145B1 (de) Verfahren zur Beeinflussung eines Steuerprogramms eines Steuergerätes
DE102017215556A1 (de) Verfahren zum programmieren von elektronischen fahrzeug-steuermodulen
DE19963832A1 (de) Programmprofilierung
DE102019218853A1 (de) Verfahren zum Transformieren eines ersten Quellcodes in einen zweiten Quellcode
WO2004100090A1 (de) Speicherverwaltung bei einem tragbaren datenträger
DE102018104752A1 (de) Verfahren zum Ausführen und Übersetzen eines Computerprogrammes in einem Rechnerverbund, insbesondere zum Steuern eines Mikroskops
DE102009009172B4 (de) Abbildung von Adressen eines Programmcodes und von Adressen von Daten in einem Speicher
DE102015201868A1 (de) Optimierte Speicherung einer Umfeldkarte im Speicher eines Fahrzeugs
EP2137622B1 (de) Verfahren und datenverarbeitungssystem zur rechnergestützten performanzanalyse eines datenverarbeitungssystems
DE102008044808B4 (de) Verfahren zur Generierung von Programmcode in einem Betriebssystemspeicher und einem Applikationsspeicher eines Datenträgers
DE102021205958A1 (de) Computerimplementiertes Verfahren zum Erstellen eines Linker-Codes für einen Erstellungsprozess eines ausführbaren Codes für eine Recheneinheit aus einem Quellcode
EP0568717A1 (de) Computerprogrammgesteuertes Verfahren (Tracing) zur schrittweisen Protokollierung der Ausführung eines Zielprogrammes bezüglich der Aufrufe des Zielprogrammes durch andere Programme
DE102018122920A1 (de) Verfahren zur Installation eines Programms auf einem eingebetteten System, ein eingebettetes System für ein derartiges Verfahren sowie ein Verfahren zur Erstellung einer Zusatzinformation
DE102022202335A1 (de) Computerimplementiertes verfahren zur speicheroptimierung eines partitionierten systems

Legal Events

Date Code Title Description
R163 Identified publications notified