DE10234971A1 - Erzeugen und Korrigieren von Programmcode - Google Patents

Erzeugen und Korrigieren von Programmcode Download PDF

Info

Publication number
DE10234971A1
DE10234971A1 DE2002134971 DE10234971A DE10234971A1 DE 10234971 A1 DE10234971 A1 DE 10234971A1 DE 2002134971 DE2002134971 DE 2002134971 DE 10234971 A DE10234971 A DE 10234971A DE 10234971 A1 DE10234971 A1 DE 10234971A1
Authority
DE
Germany
Prior art keywords
program code
program
compiler
command
memory field
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.)
Granted
Application number
DE2002134971
Other languages
English (en)
Other versions
DE10234971B4 (de
Inventor
Michael Baldischweiler
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.)
Giesecke and Devrient GmbH
Original Assignee
Giesecke and Devrient 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 Giesecke and Devrient GmbH filed Critical Giesecke and Devrient GmbH
Priority to DE2002134971 priority Critical patent/DE10234971B4/de
Publication of DE10234971A1 publication Critical patent/DE10234971A1/de
Application granted granted Critical
Publication of DE10234971B4 publication Critical patent/DE10234971B4/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

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

Bei einem Verfahren zum Erzeugen von Programmcode (26) aus einem Quelltext (38) erzeugt ein Compiler aus Konstrukten des Quelltextes (38) entsprechende Programmbefehle (52x) des Programmcodes (26). Zusätzlich zu den für die Ausführung eines Konstrukts benötigten Programmbefehlen (52x) fügt der Compiler ferner einen Aussprungbefehl (56) in den Programmcode (26) ein, durch den sich später eine Patchroutine an den Programmcode (26) anbinden läßt. Ein Computerprogrammprodukt weist entsprechende Merkmale auf, und ein tragbarer Datenträger enthält Programmcode (26), der durch ein derartiges Verfahren erzeugt worden ist. Die Erfindung schafft eine Möglichkeit zum Anbinden von Patchroutinen an Programmcode (26), die die Programmierarbeit erleichtert und dadurch zu besseren Ergebnissen führt und/oder geringeren Aufwand erfordert.

Description

  • Die Erfindung betrifft die Programmierung von Mikrocontrollern und die Fehlerkorrektur von Programmcode für Mikrocontroller. Insbesondere ist die Erfindung für Mikrocontroller von tragbaren Datenträgern, wie beispielsweise Chipkarten (smart cards) in unterschiedlichen Bauformen oder Chipmodulen, vorgesehen.
  • Tragbare Datenträger, wie sie gegenwärtig üblich sind, weisen einen Mikrocontroller mit einem Prozessorkern und mehreren unterschiedlichen Speicherfeldern auf. In einer typischen Konfiguration sind als Speicherfelder beispielsweise ein maskenprogrammiertes ROM, ein elektrisch lösch- und programmierbares EEPROM und ein beschreibbares RAM vorgesehen. Das vom Prozessorkern auszuführende Programm wird in der Regel im ROM abgelegt, weil dieser Speicher das beste Verhältnis zwischen bereitgestelltem Speicherplatz und benötigter Chipfläche aufweist. Allerdings muß der Inhalt des ROM schon bei der Herstellung des Mikrocontrollers festgelegt werden. Wird nachträglich ein Fehler in dem im ROM enthaltenen Programm entdeckt, so entsteht hoher Schaden, weil neue Masken und neue Mikrocontroller gefertigt werden müssen.
  • Abschnitt 5.4 des Buches "Handbuch der Chipkarten" von W. Rankl und W. Effing, Hanser Verlag, 3. Auflage 1999, Seiten 216 – 217, erläutert eine Technik, um Korrekturmöglichkeiten für Programmierfehler zu schaffen. Es werden dazu in dem im ROM enthaltenen Programmcode Aussprungbefehle zu einer im EEPROM gespeicherten Verknüpfungstabelle vorgesehen. Die Verknüpfungstabelle wird beim Komplettieren des Datentäger-Betriebssystems in das EEPROM geladen. Weist der Programmcode im ROM keine Fehler auf, so enthält die Verknüpfungstabelle lediglich Rücksprungbefehle an die dem jeweiligen Aussprungbefehl unmittelbar folgende ROM-Adresse.
  • Ist dagegen ein Programmabschnitt fehlerhaft, so wird dieser im EEPROM durch entsprechend korrigierten Programmcode – eine sogenannte Patchroutine – ersetzt.
  • Aus der gerade genannten Beschreibung des Buches "Handbuch der Chipkarten" ergibt sich jedoch kein Hinweis darauf, wie die benötigte Aufteilung des Programmcodes bestimmt wird und wie die Verknüpfungstabelle erzeugt wird. Auch besteht das generelle Problem, daß einerseits genügend, aber andererseits nicht unnötig viele Aussprungpunkte vorgesehen sein sollen. Ferner ist es wünschenswert, die Aussprungpunkte an für das Anbinden von Patchroutinen möglichst gut geeigneten Stellen einzufügen.
  • Aus den US-Patenten 4,905,200, 5,357,627 und 5,454,100 sind Mikroprozessoren mit hardwarebasierten Patchmechanismen bekannt. Mikroprozessoren mit derartigen Patchmechanismen, die überdies die zum Einsatz bei tragbaren Datenträgern erforderlichen Eigenschaften aufweisen, sind jedoch gegenwärtig nicht kommerziell verfügbar.
  • Die Erfindung hat die Aufgabe, die Probleme des Standes der Technik zumindest zum Teil zu vermeiden und eine Möglichkeit zum Anbinden von Patchroutinen an Programmcode für einen Mikrocontroller zu schaffen, die die Programmierarbeit erleichtert und dadurch zu besseren Ergebnissen führt und/oder geringeren Aufwand erfordert. Aufgabe einer bevorzugten Ausführungsform der Erfindung ist es überdies, eine Möglichkeit zum Anbinden von Patchroutinen an besonders günstige Stellen des Programmcodes zu schaffen.
  • Erfindungsgemäß wird diese Aufgabe ganz oder zum Teil gelöst durch Verfahren mit den Merkmalen des Anspruchs 1 bzw. des Anspruchs 9, ein Computerprogrammprodukt gemäß Anspruch 10 und einen tragbaren Datenträger gemäß Anspruch 11. Die abhängigen Ansprüche definieren bevorzugte Ausgestaltungen der Erfindung.
  • Die Aufzählungsreihenfolge der Schritte in den Verfahrensansprüchen soll nicht als Einschränkung des Schutzbereichs verstanden werden. Es sind vielmehr Ausgestaltungen der Erfindung vorgesehen, in denen diese Schritte in anderer Reihenfolge oder ganz oder teilweise parallel oder ganz oder teilweise ineinander verzahnt (interleaved) ausgeführt werden. In der hier verwendeten Wortwahl soll der Begriff "Programmcode" sowohl ausführbaren Maschinencode vor oder nach dem Binden als auch den entsprechenden Assembler-Quellcode bezeichnen.
  • Die Erfindung geht von der Grundidee aus, einen geeignet modifizierten Compiler einzusetzen, der in den erzeugten Programmcode – zusätzlich zu den für die Ausführung der Konstrukte des Quelltexts erforderlichen Programmbefehlen – mindestens einen Aussprungbefehl einfügt. Durch den Aussprungbefehl läßt sich später, falls erforderlich, eine Patchroutine an den Programmcode anbinden. Die erfindungsgemäße Technik entlastet somit den Programmentwickler, weil er oder sie nicht mehr manuell Anbindestellen für mögliche Patchroutinen einprogrammieren muß. In Versuchen hat sich gezeigt, daß diese Vereinfachung zu einer erheblich höheren Qualität des fertigen Programmcodes führt. Insbesondere wird die Wahrscheinlichkeit, daß eine später erforderliche Anbindestelle vergessen oder aufgrund des Arbeitsaufwands weggelassen wird, erheblich verringert.
  • Die Erfindung ist vorzugsweise für die Compilierung von Quelltext höherer Programmiersprachen, wie z.B. der Sprache C, vorgesehen. In diesem Zusammenhang ist die erfindungsgemäße Technik besonders überraschend, weil in höheren Programmiersprachen normalerweise keine Rücksicht auf das später möglicherweise erforderliche Einbinden von Patchroutinen genommen wird. Die Konstrukte, bei deren Übersetzung zusätzliche Aussprungbefehle eingefügt werden, können beispielsweise Anweisungen und/oder Funktionsdeklarationen sein.
  • In einer besonders bevorzugten Ausgestaltung der Erfindung wird bei der Übersetzung zumindest mancher Konstrukte der zusätzliche Aussprungbefehl in der Ausführungsreihenfolge zwischen diejenigen Programmbefehle eingefügt, die für die eigentliche Ausführung des Konstrukts benötigt werden. Wenn beispielsweise das zu übersetzende Konstrukt ein Funktionsaufruf ist, kann vorzugsweise der Aussprungbefehl in der Ausführungsreihenfolge nach den zur Parameterübergabe dienenden Programmbefehlen, aber vor den eigentlichen Sprungbefehl zur aufgerufenen Funktion eingefügt werden. Wenn in diesem Zusammenhang von "vor" und "nach" die Rede ist, so ist darunter in manchen Ausgestaltungen "unmittelbar vor" bzw. "unmittelbar nach" zu verstehen. Allgemein können aber zwischen den genannten Befehlen weitere Befehle vorhanden sein, insbesondere ein Identifikationsbefehl zur Kennzeichnung des jeweiligen Aussprungpunktes.
  • Die im vorhergehenden Absatz beschriebene Ausgestaltung ist besonders vorteilhaft, weil sie Programmstrukturen ermöglicht, die durch eine Programmierung auf der Ebene des Quelltexts nicht erzielbar wären. So ist die gerade beispielhaft genannte Anbindestelle nach der Parameterübergabe, aber vor dem Sprungbefehl zu einer aufgerufenen Funktion besonders gut geeignet, um eine fehlerhafte Parameterversorgung (falsche oder unvollständige Parameter der aufgerufenen Funktion) durch eine geeignete Patchroutine zu korrigieren.
  • Vorzugsweise wird das Einfügen der Aussprungbefehle durch entsprechende Compiler-Direktiven (pragmas) im Quelltext gesteuert oder zumindest beeinflußt. Derartige Compiler-Direktiven werden in der Wortwahl des vorliegenden Dokuments nicht als Konstrukte der Programmiersprache des Quelltexts angesehen. Beispielsweise kann vorgesehen sein, daß für jeden eingefügten Aussprungbefehl eine eigene Compiler-Direktive angegeben werden muß, oder es kann eine einzige Compiler-Direktive – z.B. in Zusammenhang mit einer Funktionsdeklaration – bestimmen, daß in jeden Aufruf dieser Funktion ein Aussprungpunkt eingefügt wird. In weiteren Ausgestaltungen fügt der Compiler selbsttätig – unter Verwendung vorgegebener Heuristiken – Aussprungpunkte in den erzeugten Programmcode ein.
  • Bevorzugt ist vorgesehen, den erzeugten Programmcode in ein erstes Speicherfeld des Mikrocontrollers einzuprogrammieren, wobei das erste Speicherfeld z.B. maskenprogrammierbar sein kann. Ein zweites Speicherfeld, das z.B. elektrisch programmierbar sein kann, dient vorzugsweise zur Aufnahme der erforderlichen Patchroutinen. Ferner kann in dem zweiten Speicherfeld ein Verteiler vorgesehen sein, der die Einbindung der einzelnen Patchroutinen in der Programmablauf übernimmt.
  • In einer bevorzugten Ausgestaltung ist der Verteiler als Verknüpfungstabelle mit einer Mehrzahl von Steueranweisungen ausgestaltet. Vorzugsweise gibt jede Steueranweisung an, ob für den entsprechenden Aussprungpunkt eine Patchroutine vorhanden ist. Beispielsweise können die Steueranweisungen als Sprungbefehle ausgestaltet sein, die eine im Programmfluß unmittelbar oder mit Abstand folgende Adresse im ersten Speicherfeld – beziehungsweise, wenn eine Patchroutine vorgesehen ist, die Startadresse dieser Patchroutine – als Sprungziel aufweisen.
  • In weiteren Ausgestaltungen ist der Verteiler als Patchauswahlroutine ausgestaltet, zu der die Aussprungbefehle verzweigen. Die Patchauswahlroutine führt ihrerseits entweder eine entsprechende Patchroutine aus oder setzt, wenn keine Patchroutine vorhanden ist, die Programmausführung gemäß dem ursprünglich vorgesehenen Ablauf fort. Die einzelnen Patchroutinen können in die Patchauswahlroutine integriert sein oder vor letzterer angesprungen werden. In unterschiedlichen Ausgestaltungen enthält die Patchauswahlroutine Informationen – z.B. Indexnummern oder Identifikatoren – über die vorhandenen Patchroutinen. Die Patchauswahlroutine kann auch im ersten Speicherbereich enthalten sein und auf derartige Informationen, die im zweiten Speicherbereich vorliegen, zugreifen.
  • Das erfindungsgemäß vorgesehene Computerprogrammprodukt kann beispielsweise ein magnetischer oder optischer Datenträger oder ein elektrisches oder optisches Signal sein. Das Computerprogrammprodukt enthält Programmcode, der die erfindungsgemäßen Schritte ausführt. Vorzugsweise enthält das Computerprogrammprodukt ferner einen Compiler und/oder einen Assembler und/oder ein Bindeprogramm und/oder ein Ladeprogramm.
  • Das erfindungsgemäße Computerprogrammprodukt und der erfindungsgemäße tragbare Datenträger sind bevorzugt mit Merkmalen weitergebildet, die den oben beschriebenen und/oder in den Verfahrensansprüchen genannten Merkmalen entsprechen. Vorzugsweise enthält der Datenträger mindestens eine Patchroutine und mindestens eine Steueranweisung, die für die Anbindung der Patchroutine an den Programmcode sorgt.
  • Weitere Merkmale, Aufgaben und Vorteile der Erfindung gehen aus der folgenden Beschreibung eines Ausführungsbeispiels und mehrerer Ausfüh rungsalternativen hervor. Es wird auf die Zeichnungen verwiesen, in denen zeigen:
  • 1 eine schematische Darstellung eines tragbaren Datenträgers sowie unterschiedlicher Dateien beim Compilierungs- und Ladevorgang in einem Ausführungsbeispiel der Erfindung,
  • 2 eine beispielhafte Darstellung von Teilen eines Quelltexts, eines Programmcodes und eines Verteilers in dem Ausführungsbeispiel von 1, und
  • 3 eine Darstellung wie in 2 in einer Ausführungsalternative.
  • Die Erfindung wird bei der Programmierung eines tragbaren Datenträgers 10 eingesetzt, der im hier beschriebenen Ausführungsbeispiel als Chipkarte oder Chipmodul ausgestaltet ist. In an sich bekannter Weise enthält der Datenträger 10 einen Mikrocontroller 12, der auf einem einzigen Halbleiterchip einen Prozessorkern 14, drei Speicherfelder 16, 18, 20 und eine Schnittstelle 22 zur kontaktlosen oder kontaktgebundenen Kommunikation aufweist. Die genannten Komponenten sind über einen Bus 24 miteinander verbunden. Im vorliegenden Ausführungsbeispiel ist das erste Speicherfeld 16 als maskenprogrammierter Festwertspeicher (ROM) ausgestaltet, das zweite Speicherfeld 18 als elektrisch löschbarer und beschreibbarer Festwertspeicher (EEPROM) und das dritte Speicherfeld 20 als flüchtiger Schreib-/Lesespeicher (RAM). In Ausführungsalternativen können die drei Speicherfelder 16, 18, 20 in anderen Technologien ausgestaltet sein.
  • Das erste Speicherfeld 16 enthält Programmcode 26 für ein Betriebssystem sowie für ein oder mehrere Applikationsprogramme des Datenträgers 10. Bei der Herstellung des Mikrocontrollers 12 wird eine dem Programmcode 26 entsprechende Maske verwendet, um den Programmcode 26 unveränderlich in Schaltungsstrukturen des ersten Speicherfeldes 16 einzubringen (in 1 durch den gestrichelten Pfeil 30 angedeutet). Um Fehler im Programmcode 26 korrigieren und/oder neue Funktionalitäten in den Programmcode 26 einbinden zu können, verzweigt die Programmausführung an bestimmten Stellen des Programmcodes 26 zu einem Verteiler 28, der hier als Verknüpfungstabelle ausgestaltet ist und der sich im zweiten Speicherfeld 18 befindet. Der Verteiler 28 und, falls erforderlich, eine oder mehrere Patchroutinen 32, werden im Zuge der Komplettierung des Betriebssystems oder im Zuge der Initialisierung des Datenträgers 10 in das zweite Speicherfeld 18 eingeschrieben (in 1 durch den Pfeil 34 angedeutet). Das dritte Speicherfeld 20 dient als Arbeitsspeicher während der Programmausführung.
  • Ein Compiler 36 dient bei der Entwicklung des Datenträgers 10 zum Erzeugen des Programmcodes 26 aus einem Quelltext 38; dieser Erzeugungsvorgang ist durch den dicken Pfeil 40 angedeutet. Ferner generiert der Compiler 36 den ursprünglichen Verteiler 28, der noch keine Patcheinträge aufweist (dicker Pfeil 42). Der Compiler 36 des vorliegenden Ausführungsbeispiels basiert wesentlich auf einem an sich bekannten Compiler, der jedoch gemäß der Erfindung modifiziert wurde.
  • Der ausführbare Programmcode 26 liegt im ersten Speicherfeld 16 in Form von maschinensprachlichen Binärwörtern vor; in 2 ist der Programmcode 26 dagegen in Form von Assemblerbefehlen gezeigt. Die Schritte des Assemblierens und/oder Bindens des Programmcodes 26 können in unterschiedlichen Ausführungsvarianten entweder durch den Compiler 36 oder durch andere, in den Figuren nicht dargestellte Werkzeuge vorgenommen werden. Im vorliegenden Ausführungsbeispiel beruht der Programmcode 26 auf dem 8051-Befehlssatz, während in Ausführungsalternativen andere Befehlssätze, jeweils entsprechend dem Prozessorkern 14, vorgesehen sind.
  • Der Quelltext 38 ist in einer höheren, weitgehend hardwareunabhängigen Programmiersprache verfaßt, nämlich im vorliegenden Ausführungsbeispiel in der Programmiersprache C. In anderen Ausgestaltungen können andere Programmiersprachen für den Quelltext 38 vorgesehen sein. Ferner kann der Quelltext 38 auch einzelne maschinennahe Abschnitte in Assemblersprache enthalten. Der Quelltext 38 weist eine Vielzahl von Konstrukten der höheren Programmiersprache auf. In 2 sind davon beispielhaft Funktionsdeklarationen 44A, 44B, Variablendeklarationen 46A, 46B, Funktionsrücksprünge 48A, 48B und Anweisungen (statements) 50A50D gezeigt. Insbesondere im Hinblick auf die Anweisungen 50A50D ermöglicht die verwendete Programmiersprache eine große Vielfalt; so sind beispielsweise die Anweisungen 50A50C als Zuweisungen (assignments) und die Anweisung 50D als Funktionsaufruf ausgestaltet.
  • Der Compiler 36 übersetzt jedes genannte Konstrukt des Quelltexts 38 in einen entsprechenden Abschnitt des Programmcodes 26, wobei jeder solche Abschnitt keinen, einen oder mehrere Programmbefehle 52A52H aufweisen kann. Die Beziehung der Quelltext-Konstrukte zu den Abschnitten des Programmcodes 26 ist in 2 durch gestrichelte horizontale Linien dargestellt. Beispielsweise wurde für die Anweisung 50A ein Programmbefehl 52A erzeugt, und für die Anweisung 50B wurden zwei Programmbefehle 52B, 52C erzeugt. In der in 2 gezeigten Assemblerdarstellung des Programmcodes 26 sind ferner Marken (labels) 54A54C enthalten. Weitere Elemente der Assemblerdarstellung des Programmcodes 26, wie z.B. Deklarationen für symbolische Adressen und für Konstanten, sind in 2 der Übersichtlichkeit halber nicht gezeigt.
  • Die erfindungsgemäße Funktion des Compilers 36 zeigt sich bei der Übersetzung der als Funktionsaufruf ausgestalteten Anweisung 50D in die drei Programmbefehle 52F52H und einen zusätzlichen Aussprungbefehl 56. Um den Funktionsaufruf auszuführen, wären nur die drei Programmbefehle 52F52H erforderlich. Die beiden erstgenannten Programmbefehle 52F, 52G dienen zur Parameterübergabe, die im vorliegenden Ausführungsbeispiel über die Register R0, R1,... des Mikrocontrollers 12 erfolgt; in Ausführungsalternativen werden die zu übergebenden Parameter in einen Stapelspeicher des Mikrocontrollers 12 geschrieben. Der dritte Programmbefehl 52H stellt den eigentlichen Funktionsaufruf dar, nämlich den Sprung zur Marke 54A als Einsprungstelle der Funktion "swap".
  • Zwischen die Programmbefehle 52F, 52G einerseits und 52H andererseits hat der Compiler 36 beim Übersetzungsvorgang 40 den Aussprungbefehl 56 als zusätzlichen Programmbefehl eingefügt. Der Aussprungbefehl 56 verzweigt im vorliegenden Ausführungsbeispiel unmittelbar zu einer Steueranweisung 58 in dem als Verknüpfungstabelle ausgebildeten Verteiler 28. In dem in
  • 2 dargestellten Beispiel ist die Steueranweisung 58 ein Sprungbefehl, der auf die dem Aussprungbefehl 56 unmittelbar folgende Adresse (Marke 54C) verweist. In der Reihenfolge der Programmausführung werden also die Programmbefehle 52F, 52G, dann der Aussprungbefehl 56, dann die Steueranweisung 58 und dann die Programmbefehle 52H, 52A, 52B,... abgearbeitet.
  • In einer optimierten Ausgestaltung des Einfügens eines Aussprungbefehls 56 in einen Funktionsaufruf wird der Sprungbefehl 52H unmittelbar als Steueranweisung 58 verwendet. Durch diese Maßnahme werden Speicherplatz und Rechenzeit eingespart. Die zur Ausführung der Anweisung 50D erforderlichen Programmbefehle 52F, 52G, 52H sind dann teils im Programmcode 26 und teils – in Form des Programmbefehls 52H als Steueranweisung 58 – im Verteiler 28 enthalten.
  • Das in 2 gezeigte Beispiel stellt die Situation während der Entwicklung des Programmcodes 26 dar, bei der noch kein Programmfehler bekannt ist und demzufolge keine Patchroutinen 32 eingebunden werden müssen. Wenn sich zu einem späteren Zeitpunkt herausstellt, daß die bereits hergestellten Mikrocontroller 12 fehlerhaften Programmcode 26 im ersten Speicherfeld 16 aufweisen, so wird zur Korrektur jedes entdeckten Fehlers je eine geeignete Patchroutine 32 erstellt. Im Verteiler 28 wird für jeden Fehler diejenige Steueranweisung 58, die im Programmablauf möglichst kurz vor der Fehlerstelle in Reaktion auf den entsprechenden Aussprungbefehl 56 angesprochen wird, durch einen Sprung zu der entsprechenden Patchroutine 32 ersetzt.
  • Der geänderte Verteiler 28 und alle Patchroutinen 32 werden beim Komplettieren oder Initialisieren des Datenträgers 10 in das zweite Speicherfeld 18 geladen. Die Programmausführung erfolgt nun von den Programmbefehlen 52F, 52G zum Aussprungbefehl 56, dann zum geänderten Sprungbefehl in der Steueranweisung 58 und von dort zur Patchroutine 32. Die Patchroutine 32 führt die korrekte Funktion aus und springt dann an einen geeigneten Rücksprungpunkt im Programmcode 26.
  • Im Beispiel von 2, bei dem der Aussprungbefehl 56 vom Compiler 36 nach den Befehlen 52F, 52G zur Parameterübergabe bei einem Funktionsaufruf, aber vor den eigentlichen Sprungbefehl 52H; eingefügt wurde, eignet sich der hier beschriebene Patchmechanismus besonders gut, um fehlerhafte und unvollständige Funktionsparameter richtigzustellen. Nach der Korrektur der übergebenen Parameter durch die Patchroutine 32 kann die ur sprüngliche Funktion – hier z.B. die Funktion "swap" – mit den gewollten Parametern in den Registern R0, R1,... ausgeführt werden. Ferner ist aus dem Beispiel von 2 ersichtlich, daß der Compiler 36 den Aussprungbefehl 56 nicht an den Grenzen des Programmcode-Abschnitts, der zur Ausführung der Anweisung 50D erforderlich ist, erzeugt hat. Die hier gezeigte Anordnung hätte sich daher durch eine manuelle Programmierung eines Aussprungpunkts im Quelltext 38 nicht erzielen lassen.
  • Um das Einfügen des Aussprungbefehls 56 durch den Compiler 36 zu steuern, ist im vorliegenden Ausführungsbeispiel eine Compiler-Direktive (pragma) 60 vorgesehen. Diese Compiler-Direktive 60 ist im Quelltext 38 unmittelbar vor der Deklaration 44A der Funktion "swap" angeordnet. Im vorliegenden Ausführungsbeispiel hat dies die Wirkung, daß der Compiler 36 in jeden Aufruf der Funktion "swap" je einen Aussprungbefehl 56 einfügt. Auf diese Weise kann der Programmierer mit einer einzigen Compiler-Direktive 60 die Einfügung einer Vielzahl von Aussprungpunkten veranlassen. Dies verringert das Risiko, daß ein später wünschenswerter Aussprungpunkt vergessen wird, erheblich.
  • Da jeder Aussprungpunkt Rechenzeit und Speicherplatz kostet, ist in Ausführungsalternativen vorgesehen, daß in Reaktion auf eine Compiler-Direktive 60 nur je ein einziger Aussprungbefehl 56 eingefügt wird. In diesen Ausgestaltungen ist die Compiler-Direktive 60 vorzugsweise unmittelbar vor demjenigen Konstrukt, bei dessen Übersetzung der Aussprungbefeh156 eingefügt werden soll, angeordnet. Ferner kann auch vorgesehen sein, daß der Compiler 36 an besonders günstigen Stellen automatisch Aussprungbefehle 56 in den erzeugten Programmcode 26 einfügt.
  • Bei dem Ausführungsbeispiel von 2 ist für jeden Aussprungbefehl 56 je ein eigener Eintrag in der Verknüpfungstabelle vorgesehen. Mit anderen Worten erfolgt die Identifikation des Aussprungpunktes über das Sprungziel des Aussprungbefehls 56. In der in 3 gezeigten alternativen Ausgestaltung erzeugt der Compiler 36 dagegen einen leicht veränderten Programmcode 26' sowie einen Verteiler 28', der als Patchauswahlroutine ausgestaltet ist. Die Patchauswahlroutine weist einen einzigen Einsprungpunkt (Marke "phand") für alle Aussprungbefehle (z.B. 56') des Programmcodes 26' auf. Zur Unterscheidung der einzelnen Aussprungstellen sind die Aussprungbefehle (z.B. 56') hier als Unterprogramm-Aufrufbefehle "lcall" ausgebildet. Der Rücksprung zu der dem jeweiligen Aussprungbefehl (z.B. 56') folgenden Adresse erfolgt über einen gemeinsamen Unterprogramm-Rücksprungbefehl "ret", der hier die Rolle einer Steueranweisung 58' übernimmt.
  • In der Ausgestaltung gemäß 3 hat der Compiler 36 in den Programmcode 26' unmittelbar vor den Aussprungbefehl 56' einen Identifikationsbefehl 62 eingefügt, mit dem ein Identifikator "pid" des jeweiligen Aussprungpunktes in den Akkumulator geladen wird. Mit anderen Worten dient der Identifikator "pid" als zusätzlicher Parameter für den als Patchauswahlroutine ausgestalteten Verteiler 28'. Der Identifikator "pid" kann als Konstante oder Variable ausgestaltet sein. Der Verteiler 28' vergleicht den Identifikator "pid" sukzessive mit denjenigen Identifikatorwerten, für die eine Patchroutine 32 vorliegt. Bei einer Übereinstimmung wird die jeweilige Patchroutine 32 ausgeführt. Wenn für den Identifikator "pid" keine Patchroutine 32 gefunden wurde, erfolgt der Rücksprung über den Unterprogramm-Rücksprungbefehl "ret" zum Programmcode 26'.
  • Im Ausführungsbeispiel von 3 ist der Verteiler 28' komplett im zweiten Speicherfeld 18 abgelegt. In ihn sind alle Identifikatorwerte, mit denen der Identifikator "pid" verglichen wird, sowie alle vorhandenen Patchroutinen 32 integriert. In Ausführungsalternativen sind dagegen im Verteiler 28' Sprungbefehle zu externen Patchroutinen 32 vorgesehen. In weiteren Ausführungsvarianten ist der Verteiler 28' als fixes Programm-Modul im ersten Speicherfeld 16 enthalten. Der Verteiler 28' greift dann auf entsprechende Verwaltungsdaten im zweiten Speicherfeld 18 zu. Diese Verwaltungsdaten sind z.B. die Identifikatorwerte, mit denen der Identifikator "pid" verglichen wird, und Adressen oder Indexnummern der auszuführenden Patchroutinen 32.
  • Es versteht sich, daß in weiteren Ausführungsalternativen auch der Aussprungbefehl 56 gemäß 2 als Unterprogramm-Aufrufbefehl "lcall" ausgebildet sein kann. Die entsprechende Steueranweisung 58 ist dann ein Unterprogramm-Rücksprungbefehl "ret", sofern keine Patchroutine 32 vorliegt. Ferner kann auch in der Ausgestaltung mit einer Verknüpfungstabelle gemäß 2 zusätzlich ein Identifikator "pid" verwendet werden. Es sind auch weitere Ausgestaltungen der Erfindung vorgesehen, die die einzelnen Merkmale gemäß 2 und 3 in unterschiedlichen Kombinationen aufweisen.
  • Sowohl in der Ausgestaltung von 2 als auch in der von 3 kann als Aussprungbefehl 56, 56' ein unterbrechungsauslösender Befehl verwendet werden. Es ist auch möglich, vor einem "normalen" Sprungbefehl "ljmp" als Aussprungbefehl 56, 56' zunächst die gewünschte Rücksprungadresse in einen Stapelspeicher des Mikrocontrollers 12 zu schreiben. Wenn z.B. im Stapelspeicher eine Rücksprungadresse vorliegt, kann diese – alternativ oder zusätzlich zum Identifikator "pid" – im Verteiler 28, 28' und/oder den Patchroutinen 32 ausgewertet werden. Umgekehrt kann auch auf Grundlage des Identifikators "pid" auf die passende Rücksprungadresse geschlossen werden.

Claims (12)

  1. Verfahren zum Erzeugen von Programmcode (26, 26') aus einem Quelltext (38) durch einen Compiler (36), wobei der Programmcode (26, 26') zur Ausführung durch einen Prozessorkern (14) eines Mikrocontrollers (12) vorgesehen ist und der Compiler (36) aus Konstrukten des Quelltexts (38) entsprechende Programmbefehle (52x) erzeugt, dadurch gekennzeichnet, daß der Compiler (36) beim Übersetzen mindestens eines Konstrukts des Quelltexts (38) zusätzlich zu den für die Ausführung des Konstrukts durch den Prozessorkern (14) benötigten Programmbefehlen (52x) ferner einen Aussprungbefehl (56, 56') in den Programmcode (26, 26') einfügt, durch den sich später eine Patchroutine (32) an den Programmcode (26, 26') anbinden läßt.
  2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß die in die Programmbefehle (52x) übersetzten Konstrukte des Quelltexts (38) Anweisungen (50x) und/oder Funktionsdeklarationen (44x) einer höheren Programmiersprache beinhalten.
  3. Verfahren nach Anspruch 1 oder Anspruch 2, dadurch gekennzeichnet, daß der Compiler (36) bei der Übersetzung mindestens einen Konstrukts, bei der ein Aussprungbefehl (56, 56') generiert wird, die für die Ausführung des Konstrukts durch den Prozessorkern (14) benötigten Programmbefehle (52x) in der Ausführungsreihenfolge zum Teil vor und zum Teil nach dem Aussprungbefehl (56, 56') anordnet.
  4. Verfahren nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, daß mindestens ein Konstrukt, bei dessen Übersetzung der Compiler (36) einen Aussprungbefehl (56, 56') in die erzeugten Programmbefehle (52x) einfügt, ein Funktionsaufruf (50D) ist.
  5. Verfahren nach Anspruch 4, dadurch gekennzeichnet, daß der Compiler (36) den Aussprungbefehl (56, 56') in der Ausführungsreihenfolge nach den für die Parameterübergabe an die aufgerufene Funktion erforderlichen Programmbefehlen (52F, 52G), aber vor dem zur aufgerufenen Funktion springenden Programmbefehl (52H), einfügt.
  6. Verfahren nach einem der Ansprüche 1 bis 5, dadurch gekennzeichnet, daß der Compiler (36) vor jeden Aussprungbefehl (56') mindestens einen Identifikationsbefehl (62) in den Programmcode (26') einfügt.
  7. Verfahren nach einem der Ansprüche 1 bis 6, dadurch gekennzeichnet, daß der Compiler (36) durch eine Compiler-Direktive (60) im Quelltext (38) zur Einfügung des mindestens einen Aussprungbefehls (56, 56') in den Programmcode (26, 26') veranlaßt wird.
  8. Verfahren nach einem der Ansprüche 1 bis 7, dadurch gekennzeichnet, daß der Mikrocontroller (12) ein erstes Speicherfeld (16) und ein zweites Speicherfeld (18) aufweist, wobei das erste Speicherfeld (16) zur Aufnahme des Programmcodes (26, 26') vorgesehen ist und das zweite Speicherfeld (18) zur Aufnahme gegebenenfalls erforderlicher Patchroutinen (32) vorgesehen ist.
  9. Verfahren zur Fehlerkorrektur von Programmcode, der durch ein Verfahren nach Anspruch 8 erzeugt worden ist, bei dem in das zweite Speicherfeld (18) mindestens eine Patchroutine (32) eingeschrieben wird, und bei dem während des späteren Programmablaufs ein durch jeden Aussprungbefehl (56, 56') aufgerufener Verteiler (28, 28') bewirkt, daß der Prozessorkern (14) die Patchroutine (32) ausführt, nachdem er denjenigen Aussprungbefehl (56), für den die Patchroutine (32) vorgesehen ist, ausgeführt hat.
  10. Computerprogrammprodukt mit Programminstruktionen für einen Allzweckrechner, die den Allzweckrechner dazu veranlassen, ein Verfahren nach einem der Ansprüche 1 bis 9 auszuführen.
  11. Tragbarer Datenträger (10) mit einem Prozessorkern (14), einem ersten Speicherfeld (16) und einem zweiten Speicherfeld (18), wobei in dem ersten Speicherfeld (16) Programmcode (26, 26') enthalten ist, der durch ein Verfahren nach Anspruch 8 erzeugt wurde.
  12. Tragbarer Datenträger (10) nach Anspruch 11, dadurch gekennzeichnet, daß in dem zweiten Speicherfeld (18) mindestens eine Patchroutine (32) enthalten ist, und bei dem während des Programmablaufs ein durch jeden Aussprungbefehl (56, 56') aufgerufener Verteiler (28, 28') bewirkt, daß der Prozessorkern (14) die Patchroutine (32) ausführt, nachdem er denjenigen Aussprungbefehl (56, 56'), für den die Patchroutine (32) vorgesehen ist, ausgeführt hat.
DE2002134971 2002-07-31 2002-07-31 Verfahren und Datenträger zum Erzeugen und Korrigieren von Programmcode Expired - Fee Related DE10234971B4 (de)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE2002134971 DE10234971B4 (de) 2002-07-31 2002-07-31 Verfahren und Datenträger zum Erzeugen und Korrigieren von Programmcode

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE2002134971 DE10234971B4 (de) 2002-07-31 2002-07-31 Verfahren und Datenträger zum Erzeugen und Korrigieren von Programmcode

Publications (2)

Publication Number Publication Date
DE10234971A1 true DE10234971A1 (de) 2004-02-19
DE10234971B4 DE10234971B4 (de) 2006-08-10

Family

ID=30469277

Family Applications (1)

Application Number Title Priority Date Filing Date
DE2002134971 Expired - Fee Related DE10234971B4 (de) 2002-07-31 2002-07-31 Verfahren und Datenträger zum Erzeugen und Korrigieren von Programmcode

Country Status (1)

Country Link
DE (1) DE10234971B4 (de)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7669003B2 (en) 2005-08-03 2010-02-23 Sandisk Corporation Reprogrammable non-volatile memory systems with indexing of directly stored data files
US7747837B2 (en) 2005-12-21 2010-06-29 Sandisk Corporation Method and system for accessing non-volatile storage devices
US7769978B2 (en) 2005-12-21 2010-08-03 Sandisk Corporation Method and system for accessing non-volatile storage devices
US7793068B2 (en) 2005-12-21 2010-09-07 Sandisk Corporation Dual mode access for non-volatile storage devices
US7814262B2 (en) 2005-10-13 2010-10-12 Sandisk Corporation Memory system storing transformed units of data in fixed sized storage blocks
US7877539B2 (en) 2005-02-16 2011-01-25 Sandisk Corporation Direct data file storage in flash memories
US7877540B2 (en) 2005-12-13 2011-01-25 Sandisk Corporation Logically-addressed file storage methods
US7949845B2 (en) 2005-08-03 2011-05-24 Sandisk Corporation Indexing of file data in reprogrammable non-volatile memories that directly store data files
US7984233B2 (en) 2005-02-16 2011-07-19 Sandisk Corporation Direct data file storage implementation techniques in flash memories
US8055832B2 (en) 2005-08-03 2011-11-08 SanDisk Technologies, Inc. Management of memory blocks that directly store data files
US8214583B2 (en) 2005-02-16 2012-07-03 Sandisk Technologies Inc. Direct file data programming and deletion in flash memories
DE102005053847B4 (de) * 2005-04-29 2013-11-14 Mediatek Inc. Speicheranordnungsverfahren und System
US9104315B2 (en) 2005-02-04 2015-08-11 Sandisk Technologies Inc. Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3217280A1 (de) 2016-03-08 2017-09-13 Giesecke+Devrient Mobile Security GmbH Patch verfahren, insbesondere bei methoden-aufruf

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
BARR, M.: Architecting Embedded Systems for Add- on Software, Embedded Systems Programming, Sept. 1999, S. 1-9 (http://www.netrino.com/Article s/AddOnSoftware/)
BARR, M.: Architecting Embedded Systems for Add- on Software, Embedded Systems Programming, Sept. 1999, S. 1-9 (http://www.netrino.com/Articles/AddOnSoftware/) *

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9104315B2 (en) 2005-02-04 2015-08-11 Sandisk Technologies Inc. Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage
US8214583B2 (en) 2005-02-16 2012-07-03 Sandisk Technologies Inc. Direct file data programming and deletion in flash memories
US7877539B2 (en) 2005-02-16 2011-01-25 Sandisk Corporation Direct data file storage in flash memories
US7984233B2 (en) 2005-02-16 2011-07-19 Sandisk Corporation Direct data file storage implementation techniques in flash memories
DE102005053847B4 (de) * 2005-04-29 2013-11-14 Mediatek Inc. Speicheranordnungsverfahren und System
US8291151B2 (en) 2005-08-03 2012-10-16 Sandisk Technologies Inc. Enhanced host interface
US7669003B2 (en) 2005-08-03 2010-02-23 Sandisk Corporation Reprogrammable non-volatile memory systems with indexing of directly stored data files
US7949845B2 (en) 2005-08-03 2011-05-24 Sandisk Corporation Indexing of file data in reprogrammable non-volatile memories that directly store data files
US8055832B2 (en) 2005-08-03 2011-11-08 SanDisk Technologies, Inc. Management of memory blocks that directly store data files
US7814262B2 (en) 2005-10-13 2010-10-12 Sandisk Corporation Memory system storing transformed units of data in fixed sized storage blocks
US7877540B2 (en) 2005-12-13 2011-01-25 Sandisk Corporation Logically-addressed file storage methods
US8209516B2 (en) 2005-12-21 2012-06-26 Sandisk Technologies Inc. Method and system for dual mode access for storage devices
US7793068B2 (en) 2005-12-21 2010-09-07 Sandisk Corporation Dual mode access for non-volatile storage devices
US7769978B2 (en) 2005-12-21 2010-08-03 Sandisk Corporation Method and system for accessing non-volatile storage devices
US7747837B2 (en) 2005-12-21 2010-06-29 Sandisk Corporation Method and system for accessing non-volatile storage devices

Also Published As

Publication number Publication date
DE10234971B4 (de) 2006-08-10

Similar Documents

Publication Publication Date Title
DE10234971B4 (de) Verfahren und Datenträger zum Erzeugen und Korrigieren von Programmcode
DE102009024605B4 (de) Vorrichtung und Verfahren zum Umgehen eines ersten Programmcodeabschnitts mit einem Ersatzprogrammcodeabschnitt
EP1738257B1 (de) Verfahren zum vermeiden von dateninkonsistenz zwischen zugriffen verschiedener funktionen einer anwendung auf eine globale variable in einer datenverarbeitungsanlage
EP1497722B1 (de) Optimierung von compilergeneriertem programmcode
DE60224937T2 (de) Verfahren und anordnung zum verknüpfen von verwandelten appletdateien
EP1609061A2 (de) Verfahren und anordnung zur veränderung von software oder quellcode
DE10320062A1 (de) Speicherverwaltung bei einem tragbaren Datenträger
WO2005069136A1 (de) Ausführung eines programms durch eine virtuelle maschine
DE102004006308B4 (de) Verfahren zum Verändern von Programmcode eines tragbaren Datenträgers mittels Patchdaten
EP1600855B1 (de) Erzeugen und Verwenden von Speicherbelegungsinformationen bei einem tragbaren Datenträger
DE102008044808B4 (de) Verfahren zur Generierung von Programmcode in einem Betriebssystemspeicher und einem Applikationsspeicher eines Datenträgers
EP1516245B1 (de) Vorrichtung und verfahren zum verarbeiten einer sequenz von sprungbefehlen
DE19637883B4 (de) Datenverarbeitungsanlage zur Ausführung großer Programmsysteme
EP1920328B1 (de) Operationscode-umschaltung
DE2854976B2 (de) Verfahren zum korrigierbaren Speichern von Programmen in einem Festspeicher
DE10152458A1 (de) Programmausführung bei einer Chipkarte
DE102022003789A1 (de) Verfahren zum Ändern des Speicherinhalts eines Hauptspeichers eines Mikrocontrollers ohne separate Speicherverwaltungseinheit, Anwendung dessen, Mikrocontroller und Fahrzeug
EP3132346A1 (de) Verfahren zum ausführen einer codefolge auf einem sicherheitsmodul
EP3217280A1 (de) Patch verfahren, insbesondere bei methoden-aufruf
DE102019216743A1 (de) Nichtblockierende Speicherzugriffe für einen Distributed Ledger
DE102008057682A1 (de) Verfahren zum Optimieren von Programmcode für einen tragbaren Datenträger
DE10141799A1 (de) Verfahren zum Betrieb eines Rechnersystems
DE10319299A1 (de) Optimierung und Ausführung eines Programms
WO1999046726A2 (de) Datenträger
DE10314834A1 (de) Verfahren Anordnung zur Modifikation von Quellcode unter Einbeziehung zusätzlicher Informationen

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8364 No opposition during term of opposition
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee