DE102009000874A1 - Verfahren zur Verbesserung der Analysierbarkeit von Softwarefehlern in einem Mikrocontroller - Google Patents

Verfahren zur Verbesserung der Analysierbarkeit von Softwarefehlern in einem Mikrocontroller Download PDF

Info

Publication number
DE102009000874A1
DE102009000874A1 DE200910000874 DE102009000874A DE102009000874A1 DE 102009000874 A1 DE102009000874 A1 DE 102009000874A1 DE 200910000874 DE200910000874 DE 200910000874 DE 102009000874 A DE102009000874 A DE 102009000874A DE 102009000874 A1 DE102009000874 A1 DE 102009000874A1
Authority
DE
Germany
Prior art keywords
microcontroller
state information
interrupt
stored
software
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.)
Ceased
Application number
DE200910000874
Other languages
English (en)
Inventor
Dirk Herrmann
Frank Boehland
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 DE200910000874 priority Critical patent/DE102009000874A1/de
Publication of DE102009000874A1 publication Critical patent/DE102009000874A1/de
Ceased legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Um eine Verbesserung der Analysierbarkeit von Softwarefehlern in einem Mikrocontroller (2) zur erreichen, wobei ein dem Mikrocomputer zugeordnetes Überwachungsmodul (3) mindestens eine Funktion des Mikrocontrollers (2) überprüft und ein Signal erzeugt, falls eine Fehlfunktion des Mikrocontrollers (2) erkannt wird, das Signal zumindest mittelbar einen Neustart des Mikrocontrollers (2) bewirkt und bei dem Neustart mindestens ein während des Betriebs des Mikrocontrollers (2) ablaufendes Softwareelement neu gestartet wird, wird vorgeschlagen, dass während des fehlerfreien Betriebs des Mikrocontrollers (2) mindestens eine Zustandsinformation in einem Speicher (7) abgespeichert wird, wobei die Zustandsinformation mindestens den Stand eines Befehlszählers (5) umfasst und wobei der Speicher (7) bei einem Neustart nicht sofort überschrieben oder gelöscht wird. Während des Neustarts oder nach erfolgtem Neustart erfolgt ein Zugriff auf die in dem Speicher (7) abgelegten Zustandsinformationen und die Zustandsinformation für eine Analyse eines Softwarefehlers zur Verfügung gestellt wird.

Description

  • Stand der Technik
  • Die Erfindung betrifft ein Verfahren zur Verbesserung der Analysierbarkeit von Softwarefehlern in einem Mikrocontroller, bei dem ein dem Mikrocontroller zugeordnetes Überwachungsmodul mindestens eine Funktion des Mikrocontrollers überprüft und ein Signal erzeugt, falls eine Fehlfunktion des Mikrocontrollers erkannt wird, wobei das Signal zumindest mittelbar einen Neustart des Mikrocontrollers bewirkt und wobei bei dem Neustart mindestens ein während des Betriebs des Mikrocontrollers ablaufendes Softwareelement neu gestartet wird.
  • Die Erfindung betrifft ferner ein System zur Verbesserung der Analysierbarkeit von Softwarefehlern in einem Überwachungsmodul, wobei dem Mikrocontroller ein Überwachungsmodul zur Überprüfung mindestens einer Funktion des Mikrocontrollers zugeordnet ist. Falls eine Fehlfunktion des Mikrocontrollers erkannt wird, ist mittels des Überwachungsmoduls ein Signal erzeugbar, wobei das Signal zumindest mittelbar einen Neustart des Mikrocontrollers bewirkt und wobei bei dem Neustart mindestens ein während des Betriebs des Mikrocontrollers ablaufendes Softwareelement neu gestartet wird.
  • Mikrocontroller umfassen neben dem auch als CPU bezeichneten Prozessor häufig Peripheriefunktionen, die auf einem einzelnen Chip zusammen angeordnet sind. Mikrocontroller werden beispielsweise in so genannten eingebetteten Systemen eingesetzt. Ein eingebettetes System bezeichnet einen elektronischen Rechner, der in einem technischen Kontext eingebunden ist. Eingebettete Systeme werden beispielsweise eingesetzt, um ein technisches System zu steuern, zu regeln und/oder zu überwachen.
  • Ein auch als Reset bezeichneter Neustart eines eingebetteten Systems und insbesondere eines Mikrocontrollers kann häufig sowohl durch Hardware als auch durch Software veranlasst werden. Ein durch Hardware veranlasster Neustart erfolgt regelmäßig bei Einschalten der Stromversorgung (power-up-reset). Weitere Hardware-Neustarts können in Abhängigkeit von einem aktuellen Einsatz des eingebetteten Systems beziehungsweise Mikrocontrollers vorgesehen sein.
  • Um eine Fehlfunktion eines Mikrocontrollers erkennen und möglichst zuverlässig einen definierten Zustand wieder herstellen zu können, ist es insbesondere bei sicherheitskritischen Anwendungen bekannt, ein Überwachungsmodul vorzusehen. Das Überwachungsmodul wird beispielsweise als Watchdog bezeichnet und ermöglicht eine Kommunikation mit dem Mikrocontroller. Entspricht die Kommunikation nicht einem erwarteten Verhalten, so wird von einer Fehlfunktion des Mikrocontrollers ausgegangen. Das Überwachungsmodul kann in solchen Fällen beispielsweise einen Hardware-Neustart des Mikrocontrollers veranlassen.
  • Bei einem Hardware-Neustart wird der Mikrocontroller in einen definierten Anfangszustand versetzt. Dabei werden Speicherbereiche des Mikrocontrollers, insbesondere Registerinhalte, überschrieben. Hierbei werden insbesondere der so genannte Befehlszähler (program counter), die Adresse des so genannten Programmstacks oder kurz Stacks und eine möglicherweise in einem Register abgelegte Rücksprungadresse neu initialisiert beziehungsweise gelöscht. Üblicherweise bleibt bei einem während des Betriebs initiierten Neustart der Inhalt eines dem Mikrocontroller zugeordneten Arbeitsspeichers, der häufig als RAM bezeichnet wird, erhalten.
  • Infolge eines eingeleiteten Hardware-Neustarts beginnt der Mikrocontroller mit der Ausführung einer so genannten Boot-Sequenz. Hierbei wird ein Softwareelement ausgeführt, das den Mikrocontroller in einen definierten, beispielsweise den für das eingebettete System vorgesehenen Ausgangszustand versetzt. Hierzu kann der Arbeitsspeicher in geeigneter Weise mit definierten Werten initialisiert werden und es kann möglicherweise weitere Software in den Arbeitsspeicher geladen werden.
  • Moderne Mikrocontroller bieten die Möglichkeit zu unterscheiden, ob ein Hardware-Neustart durch das Einschalten der Stromversorgung oder durch ein anders Ereignis veranlasst worden ist. Beispielsweise kann ein Mikrocontroller so feststellen, ob ein Neustart durch das Überwachungsmodul veranlasst worden ist.
  • Bei einem Neustart, der durch eine Software ausgelöst wird, wird während des Betriebs des Mikrocontrollers in die Boot-Sequenz gesprungen, so dass diese ausgeführt wird. Hierbei wird der Mikrocontroller folglich nicht hardwareseitig in den Ausgangszustand versetzt, sondern es werden lediglich die Initialisierungen vorgenommen, die in der Boot-Sequenz durch Programmierung vorgesehen sind. Allerdings kann auch durch eine Software ein Hardware-Neustart veranlasst werden. Dies kann dadurch geschehen, dass der Mikrocontroller den Sprung auf die Adresse der Boot-Sequenz erkennt und automatisch hardwareseitige Initialisierungen vornimmt. Außerdem kann eine Software den Mikrocontroller zur Ausführung eines Hardware-Neustarts auffordern. Hierzu kann beispielsweise ein Signal auf einen hierfür vorgesehenen Eingang des Mikrocontrollers gelegt werden.
  • Vom Markt her sind Mikrocontroller mit internem Überwachungsmodul bekannt, die es ermöglichen, im Falle einer durch das Überwachungsmodul erkannten Fehlfunktion des Mikrocontrollers statt eines Hardware-Neustarts eine als Interrupt bezeichnete Unterbrechung bei dem Mikrocontroller auszulösen. Ein Interrupt ermöglicht es, ein aktuell ablaufendes Programm zu unterbrechen, um eine andere, meist kurze aber zeitkritische Verarbeitung durchzuführen. Ist das Überwachungsmodul außerhalb des Mikrocontrollers angeordnet, so kann vorgesehen sein, dass das Überwachungsmodul im Falle des Erkennens einer Fehlfunktion ein Signal auf eine so genannte Interrupt-Leitung des Mikrocontrollers legt und dadurch den Interrupt auslöst. Im Unterschied zu einem Hardware-Neustart führt ein durch das Überwachungsmodul ausgelöster Interrupt nicht dazu, dass der Mikrocontroller in den Ausgangszustand versetzt wird und insbesondere der aktuelle Prozessorzustand bei der Abarbeitung eines Interrupts nicht verloren geht. Dadurch ist es möglich, das unterbrochene Programm nach Durchführung des Interrupts wieder fortzusetzen.
  • Grundsätzlich sind eine Vielzahl von Interrupts durch Software abschaltbar, wodurch diese von dem Mikrocontroller nicht beachtet werden. Abschaltbare Interrupts werden als maskierbare Interrupts bezeichnet. Arbeitet ein Überwachungsmodul nun derart, dass es bei Erkennen einer Fehlfunktion des Mikrocontrollers einen Interrupt auslöst, kann es geschehen, dass das System sich aktuell in einem Zustand befindet, in dem durch das Überwachungsmodul ausgelöste Ereignisse nicht verarbeitet werden können. Dies ist beispielsweise dann der Fall, wenn eine auf dem Mikrocontroller ablaufende Software eine Abschaltung des Interrupts vornimmt und den Interrupt fehlerhafterweise nicht wieder freigibt. Um ein derartiges Fehlerszenario auszuschließen, löst bei eingebetteten Systemen, die in sicherheitskritischen Bereichen angewendet werden, ein Überwachungsmodul-Ereignis stets einen Hardware-Neustart – zumindest mittelbar – aus.
  • Fehlfunktionen eines Mikrocontrollers treten häufig durch eine fehlerhafte Software auf, die aktuell auf dem Mikrocontroller ausgeführt wird. Beispielsweise kann sich eine aktuell ausgeführte Software in einer so genannten Endlosschleife befinden. Dies führt dazu, dass der Teil der Software, der sonst das Überwachungsmodul bedient, nicht mehr ausgeführt werden kann. Eine weitere Fehlfunktion kann sich ergeben, wenn die Abarbeitung eines Teils der Software längere Zeit in Anspruch nimmt als dies zulässig ist. Dies kann dazu führen, dass eine Bedienung des Überwachungsmoduls nicht mehr rechtzeitig erfolgt. Ein nochmals weiteres Beispiel für eine fehlerhafte Software ist die bereits beschriebene Sperrung von Interrupts, die fehlerhafterweise nicht wieder freigegeben wird, so dass eine Bearbeitung des auslösenden Ereignisses eines Überwachungsmoduls nicht mehr durchgeführt werden kann, wenn dies durch einen Interrupt veranlasst werden soll.
  • Grundsätzlich werden Überwachungsmodule zur Kompensation von Softwarefehlern eingesetzt, die beim Betrieb des Mikrocontrollers oder des eingebetteten Systems in dem tatsächlichen Anwendungsumfeld, also im so genannten Feld, auftreten können. Während der Entwicklung eines Systems hingegen steht das Aufspüren und das anschließende Beseitigen von Softwarefehlern im Vordergrund. Zwar gibt es eine Reihe von Methoden und Werkzeugen, die das Aufspüren von Softwarefehlern unterstützen, jedoch ist es unmöglich, mittels eines allgemeinen Verfahrens vorab sämtliche mögliche Softwarefehler zu entdecken. Folglich muss damit gerechnet werden, dass stets Fehler in der Software auftreten können.
  • Viele Softwarefehler führen – zumindest während der Systementwicklung – zu Fehlfunktionen, die von dem Überwachungsmodul erkannt werden und das Überwachungsmodul zur Auslösung eines Hardware-Neustarts veranlassen. Allerdings sind durch den Hardware-Neustart die Informationen über den Systemzustand zum Zeitpunkt des Auftretens des Hardware-Neustarts verloren gegangen, da die Registerinhalte gelöscht werden und weitere Speicher neu initialisiert werden. Damit ist es meist nicht möglich, die Ursache des Problems einzugrenzen. Häufig ist es ferner schwierig, ein aufgetretenes Problem zu reproduzieren. Somit erweisen sich in der Praxis gerade solche Fehler, die Ereignisse des Überwachungsmoduls auslösen, als besonders schwer aufspürbar. Der Nutzen, der durch den Einsatz eines Überwachungsmoduls während des eigentlichen Betriebs des Mikrocontrollers dadurch erreicht wird, dass das Gesamtsystem in einem definierten Ausgangszustand durch den Hardware-Neustart gesetzt werden kann, erweist sich also während der Fehleranalyse als nachteilig.
  • Aufgabe der Erfindung ist es, eine Möglichkeit vorzuschlagen, die einerseits das Herbeiführen eines definierten Ausgangszustands ermöglicht, falls während des Betriebs des Mikrocontrollers eine Fehlfunktion durch das Überwachungsmodul erkannt wird, und andererseits die Fehleranalyse auch im Falle von Hardware-Neustarts erleichtert.
  • Offenbarung der Erfindung
  • Die Aufgabe wird durch ein Verfahren der eingangs genannten Art dadurch gelöst, dass während des fehlerfreien Betriebs des Mikrocontrollers in dem Mikrocontroller das Abspeichern mindestens einer Zustandsinformation in einem Speicher veranlasst wird, wobei die Zustandsinformation mindestens den Stand eines Befehlszählers umfasst und wobei der Speicher bei einem Neustart nicht sofort überschrieben oder gelöscht wird. Während des Neustarts oder nach erfolgtem Neustart erfolgt dann ein Zugriff auf die in dem Speicher abgelegte Zustandsinformation, die dann für eine Analyse eines Softwarefehlers zur Verfügung gestellt wird.
  • Erfindungsgemäß wird folglich während einer fehlerfreien Ausführung des Softwareelements oder mit Erkennen einer Fehlfunktion eine Zustandsinformation oder mehrere Zustandsinformationen in einem Speicherbereich abgespeichert, wobei der Speicherbereich so gestaltet ist, dass er bei einem Neustart nicht sofort überschrieben oder gelöscht wird. Beispielsweise ist der Speicherbereich nicht als ein eingangs beschriebenes Register in dem Mikrocontroller ausgebildet, falls diese bei einem Hardware-Neustart initialisiert werden würden. Damit ist sichergestellt, dass bei erfolgtem Neustart des Mikrocontrollers beziehungsweise des eingebetteten Systems eine oder mehrere Zustandsinformationen verfügbar sind, die dann eine Analyse der Software ermöglichen, um den Fehler zu identifizieren.
  • Vorzugsweise werden zu mehreren Zeitpunkten mindestens einen Befehlszähler umfassende Zustandsinformationen abgespeichert. Bei der Analyse des Softwarefehlers stehen folglich eine Mehrzahl von Zustandsinformationen zur Verfügung und es wird jeweils der Befehlszähler ermittelt, bei dessen Abspeichern der Stack die geringste Verschachtelungstiefe aufwies. Damit ist es möglich mit höherer Genauigkeit die fehlerhafte Software zu identifizieren.
  • Ein Abspeichern der Zustandsinformation kann gemäß einer vorteilhaften Ausführungsform durch eine Hardwareschaltung veranlasst werden. Beispielsweise kann vorgesehen sein, dass der Befehlszähler und möglicherweise weitere Zustandsinformationen kontinuierlich in einem speziellen Register gespeichert bzw. gespiegelt wird. Dieses Register kann dann während des Neustarts ausgelesen und die Inhalte weiterverarbeitet werden. Ergänzend oder alternativ hierzu kann vorgesehen sein, dass bei dem Auftreten eines Resets eine Zustandsinformation abgespeichert wird.
  • Gemäß einer anderen vorteilhaften Ausführungsform wird ein Abspeichern der Zustandsinformation durch ein Softwareelement veranlasst. Hierzu wird vorteilhafterweise ein Interrupt in dem Mikrocontroller ausgelöst zu dessen Behandlung eine so genannte Interrupt-Service-Routine (ISR) ausgeführt wird. Die ISR veranlasst in dem Mikrocontroller nun das Abspeichern der mindestens einen Zustandsinformation, wobei die Zustandsinformation mindestens den Stand eines Befehlszählers vor dem Aufruf der ISR umfasst. Es wird folglich während des fehlerfreien Betriebs des Mikrocontrollers oder spätestens mit Erkennen einer Fehlfunktion ein Interrupt ausgelöst. Bei der Behandlung des Interrupts ist die ISR derart programmiert, dass eine Zustandsinformation oder mehrere Zustandsinformationen in dem Speicherbereich abgespeichert werden, wobei der Speicherbereich wie bereits dargestellt so gestaltet ist, dass er bei einem Neustart nicht sofort überschrieben oder gelöscht wird.
  • Besondere Vorteile können sich ergeben bei einer Ausführungsform, bei der ein Abspeichern von Zustandsinformation sowohl durch eine Hardwareschaltung als auch durch eine Interrupt-Service-Routine veranlasst werden kann. Damit wird eine nochmals verbesserte Fehleranalyse ermöglicht.
  • Die Aufgabe wird ferner durch ein System zur Verbesserung der Analysierbarkeit der eingangs genannten Art dadurch gelöst, dass das System zur Durchführung des erfindungsgemäßen Verfahrens hergerichtet ist.
  • Weitere Merkmale der Erfindung sind in den abhängigen Unteransprüchen genannt.
  • Erfindungsgemäß wird in dem Mikrocontroller mindestens eine ausgewählte Zustandsinformation vor oder bei Eintritt eines bestimmten Ereignisses gesichert, so dass diese Zustandsinformation bei beziehungsweise nach einem Neustart noch zur Verfügung steht.
  • Gemäß einer ersten Ausführungsform werden die Zustandsinformationen automatisch in einem Hardware-Register abgespeichert. Beispielsweise kann vorgesehen sein, dass während des fehlerfreien Betriebs des Mikrocontrollers stets der aktuelle Stand des Befehlszählers in dem Hardware-Register abgespeichert wird. Dieser steht dann während eines Neustarts oder nach einem Neustart für eine Analyse zur Verfügung.
  • Gemäß einer anderen Ausführungsform werden die Zustandsinformationen durch den Mikrocontroller beim Auftreten eines oder mehrerer Ereignisse veranlasst. Ein derartiges Ereignis ist beispielsweise ein Hardware-Reset. Dies bedeutet, dass vor dem tatsächlichen Rücksetzen des Mikrocontrollers zunächst eine Abspeicherung der Zustandsinformationen durch eine auf dem Mikrocontroller realisierte Schaltung durchgeführt wird. Eine Abspeicherung der Zustandsinformationen kann auch dann veranlasst werden, wenn ein Sprung in der aktuell ausgeführten Software auf eine Adresse erfolgt, die der Boot-Sequenz zugeordnet ist. Es wird hier folglich vor Ausführung der Boot-Sequenz zunächst die Abspeicherung der Zustandsinformationen veranlasst. Ist in dem Mikrocontroller ein Watchdog ausgebildet, so kann ein Watchdog-Ereignis ebenfalls die Abspeicherung der Zustandsinformationen veranlassen. Ferner kann eine Eingangsleitung des Mikrocontrollers speziell dafür vorgesehen sein, ein Signal zu empfangen, das eine Abspeicherung der Zustandsinformationen bewirkt. Es ist ferner vorstellbar, einen Mikrocontroller um einen zusätzlichen Eingang zu erweitern, auf dem von außerhalb die Abspeicherung der Zustandsinformationen angefordert werden kann. Gemäß einer anderen vorteilhaften Ausführungsform wird auf der dedizierten Eingangsleitung ein Watchdog-Ereignis eines externen Watchdogs angelegt, das dann ein Abspeichern der Zustandsinformationen in dem Mikrocontroller bewirkt, sobald das Watchdog-Ereignis ausgelöst wird und das entsprechende Signal auf der dedizierten Eingangsleitung anliegt.
  • Wird das Abspeichern der Zustandsinformationen durch die oben beschriebenen hardwareseitigen Mittel realisiert, so ist es besonders vorteilhaft, wenn die Zustandsinformationen den aktuellen Wert des auch als Befehlszähler bezeichneten Programmzählers, eine Rücksprungadresse, eine Interrupt-Maske, eine Adresse des Stacks, aktuelle Interrupt-Flags und/oder sonstige Registerinhalte umfassen.
  • Die Sicherung der Zustandsinformationen innerhalb des Mikrocontrollers erfolgt an Stellen, die zur Einleitung der Boot-Sequenz nicht notwendigerweise mit anderen Werten belegt werden. Bei einem Hardware-Reset müssen beispielsweise Programmzähler und Interrupt-Maske zwingend neu initialisiert werden. Diese können deshalb für die Sicherung der Zustandsinformationen nicht genutzt werden. Vorzugsweise erfolgt die Sicherung der Zustandsinformationen:
    • – In dedizierten Registern, die nur für diesen Zweck vorgesehen sind,
    • – in ohnehin vorhandenen Adress- bzw. Datenregistern des Prozessor-Rechenkerns, deren vorherige Inhalte hierdurch allerdings überschrieben werden,
    • – in einem dedizierten RAM-Bereich.
  • Ein Abspeichern der Zustandsinformationen ist auch dann möglich, wenn keine der oben genannten zusätzlichen Hardwaremaßnahmen durchgeführt werden sollen. Bei diesen Ausführungsformen wird durch eine Softwaremaßnahme das Abspeichern der Zustandsinformationen veranlasst. Bei den hier vorgeschlagenen Softwaremaßnahmen wird die Verwendung bzw. Verwendbarkeit von Interrupts vorausgesetzt. Die Zustandsinformationen werden hierbei innerhalb einer Interrupt-Routine (ISR) erfasst. Die erfassten Zustandsinformationen können entweder bereits in der Interrupt-Routine verarbeitet werden oder später nach Auftreten eines Hardware-Resets in der Boot-Sequenz. Die Auswahl der zu speichernden Informationen über den Systemzustand kann flexibel zum Zeitpunkt der Erstellung der Softwaremaßnahme oder bei entsprechender Softwaregestaltung sogar während des Betriebs des Systems gewählt werden. Wird die Zustandsinformation innerhalb der ISR erfasst, so muss berücksichtigt werden, dass nicht die Zustandsinformation, also beispielsweise der Programmzähler, relevant ist, der aktuell innerhalb der ISR vorliegt, sondern es sind die Zustandsinformationen, die zum Zeitpunkt der Interrupt-Auslösung vorliegen. Eine Möglichkeit für die Ermittlung der tatsächlich relevanten Zustandsinformationen auch innerhalb einer Interrupt-Routine besteht darin, den sogenannten Stack auszuwählen, auf dem sich beispielsweise der Programmzähler zum Zeitpunkt der Interrupt-Auslösung befindet. Grundsätzlich gilt bei den vorgeschlagenen Softwaremaßnahmen, dass zusätzlich zu den oben genannten Zustandsinformationen auch der Inhalt der Stacks bzw. Auszüge davon, Inhalte von Variablen und/oder Werte von Prozessoreingangssignalen abgespeichert werden können.
  • Als Zustandsinformationen wird vorzugsweise der Wert des Befehlszählers bzw. Programmzählers, eine Rücksprungadresse, eine Interrupt-Maske, eine Adresse des Stacks und/oder eines oder mehrere Interrupt-Flags ausgewählt.
  • Der Befehlszähler zeigt an, welche Instruktion von dem Mikrocontroller als nächstes abzuarbeiten gewesen wäre und ermöglicht damit Rückschlüsse, welche Instruktion aktuell abgearbeitet wird.
  • Wird das Abspeichern der Zustandsinformationen durch einen Interrupt veranlasst beziehungsweise durch die ISR, die zur Behandlung des Interrupts ausgeführt wird, ermöglicht die Angabe der Rücksprungadresse festzustellen, in welchem Programmteil die Abarbeitung durch den Mikrocontroller infolge des aufgetretenen Interrupts unterbrochen worden ist, da die Rücksprungadresse angibt, an welcher Stelle die Abarbeitung des Programms fortgesetzt werden soll, nachdem die Behandlung des Interrupts beendet ist. Erfindungsgemäß kann diese Rücksprungadresse nun abgespeichert werden, so dass diese Information auch nach Beenden der Interrupt-Behandlung und insbesondere auch während beziehungsweise nach einem Neustart noch zur Verfügung steht.
  • Die Interrupt-Maske ist ein Register, das eine aktuelle Prioritätsebene des Prozessors und damit die Priorität des laufenden Programms in Bezug auf die Behandlung von Programmunterbrechungen anzeigt. Unterbrechungsanforderungen können ein laufendes Programm nur dann unterbrechen, wenn eine der aktuellen Unterbrechung zugeordnete Priorität eine höhere Priorität hat als die Ebene, in der der Prozessor aktuell arbeitet. Interrupts mit einer geringeren Priorität können folglich nicht abgearbeitet werden.
  • Der Stack ist ein Bereich im Arbeitsspeicher, in dem lokale Variablen abgelegt werden. Die Stack-Adresse ermöglicht damit unter Umständen einen Zugriff auf lokale Variablen.
  • Interrupt-Flags zeigen an, welche Interrupts aktuell behandelt werden sollen beziehungsweise welche so genannten Interrupt-Requests aktuell vorliegen.
  • Vorteilhafterweise werden weitere Registerinhalte abgespeichert, so dass möglichst genau nachvollzogen werden kann, wie der Zustand des Systems bei Abspeicherung der Zustandsinformationen war.
  • Erfindungsgemäß erfolgt die Sicherung der Zustandsinformationen innerhalb des Mikrocontrollers in Speicherbereichen, die bei der Einleitung der Boot-Sequenz nicht mit anderen Werten belegt und damit überschrieben werden. Bei einem Hardware-Neustart werden beispielsweise der Befehlszähler und die Interruptmaske zwingend überschrieben. Sollen diese während des Neustarts aber zur Auswertung vorliegen, müssen diese Werte vorher abgespeichert werden. Dies wird im Falle einer softwarebasierten Realisierung des erfindungsgemäßen Verfahrens durch die ISR, die den ausgelösten Interrupt behandelt, veranlasst.
  • Vorzugsweise erfolgt eine Sicherung der Zustandsinformationen in dedizierten Registern, die für das Abspeichern der Zustandsinformationen reserviert sind. Dies gewährleistet, dass die Zustandsinformationen stets verfügbar sind und nicht überschrieben werden können, verhindert jedoch, dass diese Register für den allgemeinen Betrieb zur Verfügung stehen. Um stets alle Register zur Verfügung zu haben, kann deshalb vorgesehen sein, in dem Prozessor vorhandene Adress- beziehungsweise Datenregister für die Sicherung der Zustandsinformationen zu verwenden. Hierbei werden jedoch die vorherigen Inhalte in diesen Registern überschrieben. Besonders vorteilhaft ist es auch, die Zustandsinformationen in einem dedizierten RAM-Bereich abzuspeichern.
  • Vorzugsweise erfolgt in der Boot-Sequenz, die dem Hardware-Neustart folgt, eine Analyse des Grundes für den Neustart sowie eine Analyse beziehungsweise Weiterverarbeitung der gespeicherten Zustandsinformationen. Es kann dann vorgesehen sein, die Zustandsinformationen persistent zu speichern, zum Beispiel in einem hierfür vorgesehenen Bereich eines EEPROM, oder die Zustandsinformationen auf eine hierfür vorgesehene Protokollleitung des Mikrocontrollers auszugeben. Ferner kann vorgesehen sein, die in der Interrupt-Routine erfassten Zustandsinformationen bereits teilweise oder vollständig innerhalb der Interrupt-Routine selbst zu verarbeiten.
  • Gemäß einer Ausführungsform wird die zu speichernde Zustandsinformation flexibel zum Zeitpunkt der Erstellung der Software oder bei entsprechender Softwaregestaltung während des Betriebs des Systems gewählt. Für die Analyse des Softwarefehlers sind jedoch nicht die Informationen des Zustandes des Mikrocontrollers während der Ausführung der Interrupt-Service-Routine relevant, sondern es sind die Informationen des Zustandes zum Zeitpunkt der Interruptauslösung. Diese Information kann während der Ausführung des ISR ermittelt werden. Beispielsweise befindet sich der Stand des Befehlszählers zum Zeitpunkt der Interruptauslösung bei vielen Prozessoren als Returnadresse auf dem Stack oder in einem dem System bekannten Register. Die Analyse des Softwarefehlers wird ferner erleichtert, wenn der Inhalt beziehungsweise Auszüge des Stacks, Inhalte von Variablen und/oder Werte von Eingangssignalen zu dem Prozessor beziehungsweise Mikrocontroller, die Interruptmaske, eine Adresse eines Stacks, mindestens ein in einem Stack abgespeicherter Wert, der Inhalt mindestens einer Variablen, der Wert mindestens eines Interruptflags, der Inhalt mindestens eines weiteren Registers, eine Unwinding-Information und/oder der Wert mindestens eines Eingangssignals des Mikrocontrollers abgespeichert werden.
  • Grundsätzlich ist es vorstellbar, dass der Interrupt durch das Überwachungsmodul ausgelöst wird und dann durch die ISR die Speicherung der Zustandsinformationen veranlasst wird. Dies hat jedoch den Nachteil, dass im Falle fehlerhaft abgeschalteter Interrupts das Überwachungsmodul unwirksam werden würde. In besonders sicherheitskritischen Anwendungen wird deshalb von dem Überwachungsmodul die Auslösung eines Hardware-Neustarts veranlasst.
  • In einer anderen Ausführungsform erfolgt die Auslösung des Interrupts durch einen hierfür vorgesehenen, programmierbaren Timer, wobei ein Ablaufen des Timers den Interrupt auslöst. Der Timer kann hierbei so programmiert werden, dass er möglichst kurz vor dem Überwachungsmodul-Ereignis abläuft. Im Fall des Auftretens des durch den Timer ausgelösten Interrupts wird dann durch die ISR der Systemzustand zumindest temporär gesichert. Folgt danach ein Ereignis, das einen Hardware-Neustart auslöst, so können die gesicherten Zustandsinformationen in der Boot-Sequenz verwendet und dort endgültig und dauerhaft gesichert werden. Die Bedienung des Überwachungsmoduls, das Rücksetzen des Timers und das Löschen beziehungsweise Wiederzurverfügungstellen temporärer Daten erfolgt dann innerhalb desselben Softwareelements.
  • Der Ablauf des Timers kann sich jedoch auch an anderen Systemereignissen orientieren. Beispielsweise wird der Timer so programmiert, dass er periodisch abläuft und hierbei jedes Mal den Systemzustand speichert. Erfolgt dann ein Hardware-Neustart, steht in der Boot-Sequenz jeweils die Zustandsinformation zum Zeitpunkt des letzen Timer-Interrupts zur Verfügung.
  • Vorteilhafterweise wird die Ablaufdauer des Timers dynamisch variiert. Beispielsweise ist das Überwachungsmodul derart ausgestaltet, dass dieses nach einer vorgegebenen Zeitspanne, zum Beispiel 500 ms, einen Hardware-Neustart auslöst, falls das Überwachungsmodul nicht innerhalb dieser Zeitspanne ein Signal von dem Mikrocontroller erhält. Hierbei kann vorgesehen sein, dass das Signal beispielsweise alle 200 ms erwartet wird. In diesem Beispiel könnte der Timer derart eingestellt sein, dass er alle 400 ms einen Interrupt auslöst, wobei der Timer immer dann rückgesetzt wird, wenn von dem Mikrocontroller das Bedienungssignal (in einem Abstand von jeweils 200 ms) an das Überwachungsmodul übermittelt wird. Löst der Timer nun tatsächlich einen Interrupt aus (nach 400 ms), so erfolgt dies, weil der Timer nicht zu den Zeitpunkten 200 ms und 400 ms rückgesetzt worden ist. Zu dem Zeitpunkt 400 ms ist folglich bereits bekannt, dass ein Fehler im Zeitablauf vorliegt. Bei dieser vorteilhaften Ausführungsform könnte deshalb vorgesehen sein, dass der Interrupt eine Umprogrammierung des Timers derart veranlasst, dass dieser nun beispielsweise in 10 ms Abständen einen Interrupt auslöst, so dass in Zeitabständen von 10 ms die Zustandsinformationen gespeichert werden. Wird nun beispielsweise nach 500 ms tatsächlich ein Hardware-Neustart durchgeführt, so stehen Zustandsinformationen zur Verfügung, die maximal 10 ms vor der Auslösung des Hardware-Neustarts abgespeichert worden sind. Selbstverständlich sind die oben genannten Zeitangaben lediglich beispielhaft zu verstehen.
  • Die Verwendung eines dynamisch programmierbaren Timers hat damit den Vorteil, dass der Timer so eingestellt werden kann, dass möglichst unmittelbar vor Ausführung eines Hardware-Neustarts die Zustandsinformationen abgespeichert werden und somit für die Auswertung des Softwarefehlers möglichst aktuelle Informationen zur Verfügung stehen. Besonders vorteilhaft ist es, wenn für die Analyse der Softwarefehler nicht nur die aktuellsten Zustandsinformationen, sondern auch Zustandsinformationen, die zu früheren Zeitpunkten abgespeichert worden sind, zur Verfügung stehen. Beispielsweise kann vorgesehen sein, dass jeweils die drei aktuellsten Zustandsinformationen temporär abgespeichert bleiben, so dass diese nach beziehungsweise während der Durchführung des Hardware-Neustarts für eine Analyse des Softwarefehlers zur Verfügung stehen.
  • Gemäß einer weiteren bevorzugten Ausführungsform kann anstelle oder in Ergänzung zu dem Timer-Interrupt ein bereits vorhandener Interrupt verwendet werden, der durch ein Systemereignis ausgelöst wird. Bei diesem Interrupt wird dann die ISR dahingehend verändert, dass diese ein Abspeichern der Zustandsinformationen veranlasst. Dies hat die Vorteile, dass – sofern kein Timer-Interrupt verwendet wird – kein spezieller Timer vorgesehen werden muss und dieser auch nicht programmiert werden muss. Es kann folglich mit nur geringem Aufwand auch in bestehenden Systemen eine Speicherung der Zustandsinformationen dadurch erreicht werden, dass eine oder mehrere Interrupt-Service-Routinen durch geeignete Programmierung zur Abspeicherung der Zustandsinformationen befähigt werden. Vorzugsweise werden hierzu möglichst hochfrequent aufgerufene Interrupts verwendet, um im Falle eines Hardware-Neustarts möglichst aktuelle Zustandsinformationen vorhalten zu können.
  • Um eine persistente Speicherung der Zustandsinformationen zu erreichen, können unterschiedliche Speicherbereiche vorgesehen werden, die jeweils einer Ereignisquelle oder mehreren Ereignisquellen zugeordnet sind. In einem System, in dem verschiedene Interrupts beziehungsweise verschiedene ISRs eine Zustandssicherung vornehmen, kann vorgesehen sein, dass jede verwendete ISR die von dieser abgespeicherten Zustandsinformationen in einem dieser ISR zugeordneten Speicherbereich ablegt. Damit kann besonders einfach bei der Analyse des Softwarefehlers festgestellt werden, durch welche ISR die jeweilig Zustandsinformation abgespeichert worden ist. Es kann jedoch auch vorgesehen sein, dass mehrere ISRs die Zustandsinformationen in einem gemeinsamen Speicherbereich abspeichern. Hierbei kann dann sehr einfach die aktuellste Zustandsinformation bei der Analyse des Softwarefehlers festgestellt werden, da dies beispielsweise auch die zuletzt abgespeicherte Zustandsinformation ist, unabhängig davon, von welcher ISR die Abspeicherung dieser Zustandsinformation veranlasst worden ist.
  • Ferner kann vorgesehen sein, für eine bestimmte Ereignisquelle, also beispielsweise für durch das Überwachungsmodul ausgelöste Ereignisse, die Zustandsinformationen von nur einem einzigen Ereignis abzuspeichern. Dies könnte das jeweils erste Ereignis oder aber auch das jeweils letzte Ereignis sein. Besonders bevorzugt ist es hierbei, Zustandsinformationen zu jeweils mehreren Ereignissen abzuspeichern. Beispielsweise kann vorgesehen sein, die ersten fünf Zustandsinformationen abzuspeichern. Ebenso kann vorgesehen sein, jeweils die letzten drei Zustandsinformationen abzuspeichern. Eine Auswahl der Anzahl der Ereignisse kann insbesondere auch von der durchzuführenden Analyse beziehungsweise der zu analysierenden Software abhängig sein.
  • Ein typischer Softwarefehler liegt beispielsweise dann vor, wenn die Software unbeabsichtigt in eine Endlosschleife läuft. Dies führt in vielen Fällen dazu, dass der Teil der Software, der das Überwachungsmodul bedient, indem es Signale an das Überwachungsmodul übersendet, nicht mehr ausgeführt werden kann. Ist das Überwachungsmodul ein so genanntes Timeout-Überwachungsmodul, so löst das Überwachungsmodul nach Ablauf einer vorgegebenen Zeit, innerhalb der kein Signal von dem Mikrocontroller an das Überwachungsmodul übermittelt wird, ein Überwachungsmodul-Ereignis aus, das einen Hardware-Neustart oder die Auslösung eines Interrupt bei dem Mikrocontroller veranlasst.
  • Mittels des erfindungsgemäßen Verfahrens beziehungsweise des erfindungsgemäßen Systems ist die Speicherung des Befehlszählers entweder zum Zeitpunkt des Überwachungsmodul-Ereignisses beziehungsweise des Hardware-Neustarts oder zumindest in zeitlicher Nähe zu diesem möglich. Meist wird dann der abgespeicherte Befehlszähler auf eine Stelle innerhalb des Programmcodes zeigen, die sich innerhalb der Endlosschleife befindet oder der gespeicherte Befehlszähler verweist auf eine Stelle innerhalb einer Unterroutine, die aus der Endlosschleife heraus aufgerufen wird. Es ist jedoch vorstellbar, dass in dem Moment, da der Hardware-Neustart ausgelöst wird, das Überwachungsmodul-Ereignis auftritt oder der Ausführung der ISR gerade eine andere Interrupt-Routine die Endlosschleife unterbrochen hat und deshalb diese andere Interrupt-Routine ausgeführt wird. Um auch in diesen Fällen eine Analyse des Software-Fehlers zu ermöglichen, wird vorzugsweise für jeden möglichen Interrupt von der zugehörigen ISR eine Rücksprungadresse abgespeichert, die dann bei einem darauf folgenden Hardware-Neustart zumindest während der Durchführung der Boot-Sequenz einen Zugriff auf diese abgespeicherte Rücksprungadresse ermöglicht. Die Rücksprungadresse würde dann auf den Programmcode innerhalb der Endlosschleife verweisen. Zusätzlich könnten Teile des Stacks abgespeichert werden, so dass nochmals eine verbesserte Analyse des Softwarefehlers ermöglicht wird. Sind in dem Stack so genannte Unwinding-Informationen vorhanden, so werden diese Unwinding-Informationen ebenfalls durch die ISR abgespeichert. Unwinding-Informationen ermöglichen das Erkennen einer Aufrufhierarchie, also welche Routinen von welchen anderen Routinen aufgerufen worden sind. Bereits durch die ISR kann dadurch zwischen Daten einerseits und Rücksprungadressen andererseits auf dem Stack unterschieden werden und es kann vorgesehen sein, dass lediglich die Unwinding-Informationen, nicht jedoch andere Daten für eine spätere Analyse des Software-Fehlers abgespeichert werden. Dadurch kann der für das Abspeichern der Informationen benötigte Speicherplatz möglichst gering gehalten werden.
  • Im Falle mehrerer Hardware-Neustarts beziehungsweise bei einer dynamisch programmierbaren Ablaufdauer eines Timers, der zu einem Interrupt führt, ist es vorteilhaft, bei der Analyse des Softwarefehlers jeweils den Befehlszähler zu ermitteln, bei dessen Abspeichern der Stack die geringste Verschachtelungstiefe aufwies. Damit ist es verbessert möglich, den Befehlszähler innerhalb der eigentlichen Endlosschleife zu ermitteln und nicht innerhalb einer Funktion oder Routine, die von der Endlosschleife aus aufgerufen worden ist. Zumindest wird dadurch erreicht, dass durch den Befehlszähler die Stelle ermittelt werden kann, die innerhalb einer Funktion ist, die – ausgehend von der Endlosschleife – eine möglichst geringe Aufruftiefe aufweist. Ist beispielsweise das Überwachungsmodul so ausgestaltet, dass es nach 500 ms ein Überwachungsmodul-Ereignis auslöst, falls es innerhalb dieser Zeit kein Signal von dem Mikrocontroller empfangen hat, so könnte – wie oben bereits beschrieben – ein Timer derart programmiert sein, dass er nach 400 ms einen Interrupt auslöst. Es sei ferner angenommen, dass das Überwachungsmodul im fehlerfreien Zustand von dem Mikrocontroller bereits jeweils nach 200 ms ein Signal erhält, dann ist bei einem Ablauf des Timers (nach 400 ms) das Problem beziehungsweise der Softwarefehler bereits vorher (200 ms) aufgetreten. Im Falle einer Endlosschleife befindet sich die Software zu dem Zeitpunkt, in dem der Timer abläuft, folglich bereits innerhalb der Endlosschleife. Würde nun der Timer nach dem ersten Ablauf auf ein kleineres Intervall, beispielsweise 10 ms, programmiert werden, dann würden vor dem Überwachungsmodul-Ereignis circa 10 Interrupts aufgerufen werden. Wird bei jedem Aufruf des Interrupts durch die ISR eine entsprechende Information zumindest bis zu der Durchführung einer Boot-Sequenz in einem darauffolgenden Hardware-Neustart abgespeichert, so können diese Zustandsinformationen dazu genutzt werden, den Programmzähler innerhalb der Endlosschleife mit der geringsten Aufruftiefe zu ermitteln und damit den tatsächlich aufgetretenen Softwarefehler möglichst genau zu identifizieren.
  • Das erfindungsgemäße Verfahren und das erfindungsgemäße System haben damit den Vorteil, dass auch nach dem Auftreten eines unerwarteten Neustarts, beispielsweise infolge eines Überwachungsmodul-Ereignisses, Einstiegspunkte für eine Analyse des Softwarefehlers vorliegen, so dass eine Analyse des Softwarefehlers beziehungsweise eine Analyse der Ursachen des Fehlers, insbesondere eine Identifizierung des fehlerhaften Programmcodes, möglich ist.
  • Ferner wird erreicht, dass im Falle eines durch ein Überwachungsmodul ausgelösten Ereignisses stets die Durchführung eines Hardware-Neustarts möglich ist und dennoch eine Analyse des Softwarefehlers vorteilhaft durchgeführt werden kann, da die abgespeicherten Zustandsinformationen für die Analyse während beziehungsweise nach dem Hardware-Neustart zur Verfügung stehen. Dadurch, dass das Abspeichern der Zustandsinformation durch die ISRs veranlasst wird, kann dies bei nahezu allen bestehenden Systemen nachträglich implementiert werden. Insbesondere können die hierzu verwendeten Parameter, also beispielsweise die Auswahl der abzuspeichernden Zustandsinformationen sowie die Zeitpunkte beziehungsweise Abstände des Abspeicherns und den oder die jeweiligen Interrupts, die ein Abspeichern veranlassen sollen, sehr spezifisch an das zugrunde liegende System beziehungsweise an die auszuführenden Software angepasst werden.
  • Weitere Merkmale und Vorteile der Erfindung sind in den Zeichnungen dargestellt. Es zeigen:
  • 1 eine schematische Darstellung eines eingebetteten Systems, das zur Durchführung des erfindungsgemäßen Verfahrens hergerichtet ist; und
  • 2 ein schematisiertes Ablaufdiagramm einer möglichen Ausführungsform des erfindungsgemäßen Verfahrens.
  • In 1 ist ein eingebettetes System 1 dargestellt, das beispielsweise in einem Steuergerät in einem Kraftfahrzeug eingesetzt ist. Das eingebettete System umfasst einen Mikrocontroller 2 und ein Überwachungsmodul 3, das mit dem Mikrocontroller 2 über eine oder mehrere Datenleitungen 15, die beispielsweise auch als ein Bussystem ausgebildet sein können, verbunden ist. Das Überwachungsmodul 3 kann beispielsweise auch innerhalb des Mikrocontrollers ausgebildet sein, wobei eine Kommunikation mit dem Überwachungsmodul 3 über ein internes Bussystem ermöglicht werden könnte.
  • In dem Mikrocontroller 2 sind Register 4 ausgebildet, die einen Befehlszähler 5 umfassen. Der Mikrocontroller 2 umfasst ferner ein RAM (Random Access Memory) 6. In dem RAM 6 sind als Speicher 7 und als Stack 8 bezeichnete Speicherbereiche ausgebildet.
  • Der Mikrocontroller 2 umfasst ferner eine Schaltungslogik 9, mittels der ein Abspeichern von Zustandsinformationen veranlasst werden kann. Des weiteren sind in dem Mikrocontroller 2 eine in 1 nicht dargestellte Funktionseinheit zur Initiierung eines Hardware-Neustarts und ein so genannter Interrupt-Handler 10, der in Abhängigkeit von einer vorliegenden Interrupt-Anfrage eine Interrupt-Service-Routine 11 auswählt, ausgebildet. Liegt ein einen Interrupt auslösendes Ereignis vor, so wird dies an den Interrupt-Handler 10 übermittelt. Der Interrupt-Handler 10 entscheidet, ob die auch als Unterbrechungsanforderung bezeichnete Interrupt-Anfrage aktuell bearbeitet werden soll oder nicht. Hierzu wird beispielsweise geprüft, ob die aktuell angefragte Unterbrechung maskiert ist. Ist dies nicht der Fall, so wird eine Interrupt-Service-Routine (ISR) 11 aus einer Mehrzahl von ISRs 11 ausgewählt. Die Interrupt-Service-Routine 11 umfasst hierbei Instruktionen, die zur Behandlung des Interrupts ausgeführt werden.
  • In dem Mikrocontroller 2 sind ferner ein erster Timer 12 und ein zweiter Timer 13 ausgebildet. In dem Überwachungsmodul 3 ist ein Timer 14 ausgebildet.
  • Bei einer möglichen Ausführungsform des in 1 dargestellten Systems 1 veranlasst der Timer 12, dass in regelmäßigen Abständen ein Signal über die Datenleitung 15 von dem Mikrocontroller 2 an das Überwachungsmodul 3 übermittelt wird. Das in dem Überwachungsmodul 3 angekommene Signal bewirkt dann ein Rücksetzen des Timers 14. Wird der Timer 14 nicht rückgesetzt, so löst dieser ein Überwachungsmodul-Ereignis aus und es wird ein Signal von dem Überwachungsmodul 3 über die Datenleitung 15 an den Mikrocontroller 2 übermittelt. Dieses Signal kann dann einen Hardware-Neustart des Mikrocontrollers 2 durch Aktivierung der Funktionseinheit zur Initiierung des Hardware-Neustarts oder die Auslösung eines Interrupts bewirken. Der Timer 14 ist hierbei derart programmiert, dass dieser bei einem fehlerfreien Betrieb des Mikrocontrollers 2 stets rechtzeitig rückgesetzt wird, so dass kein Überwachungsmodul-Ereignis auftritt. Beispielsweise veranlasst der Timer 12, dass nach jeweils 200 ms ein Rücksetz-Signal an das Überwachungsmodul 3 und dort an den Timer 14 übermittelt wird. Der Timer 14 ist in diesem Beispiel so programmiert, dass dieser beispielsweise 500 ms nach einem Rücksetzen ein Überwachungsmodul-Ereignis auslöst, wenn der Timer 14 nicht vorher erneut rückgesetzt worden ist.
  • Das in 1 dargestellte Ausführungsbeispiel des erfindungsgemäßen Systems 1 ermöglicht sowohl eine softwarebasierte Realisierung als auch eine hardwarebasierte Realisierung des erfindungsgemäßen Verfahrens, da ein Abspeichern sowohl durch einen Interrupt als auch durch die Schaltungslogik 9 veranlasst werden kann.
  • Eine mögliche Ausführungsform des erfindungsgemäßen Verfahrens, das beispielsweise auf dem System 1 abläuft, ist in 2 stark schematisiert dargestellt. Hierbei ist der Betrieb des Mikrocontrollers 2 in zwei Betriebsmodi unterteilt. In einem ersten Betriebsmodus 100 wird ein Neustart des Mikroprozessors und dort insbesondere eine Boot-Sequenz durchgeführt. In einem zweiten Betriebsmodus 200 ist der Mikrocontroller initialisiert und arbeitet bestimmungsgemäß. Beispielsweise wird in dem Betriebsmodus 200 eine Anwendungssoftware ausgeführt.
  • Zunächst wird in einem Schritt 101 beispielsweise durch Aktivieren der Funktionseinheit zur Initiierung des Hardware-Neustarts der Neustart des Mikrocontrollers 2 eingeleitet. In einem Schritt 102 wird geprüft, wodurch der aktuelle Neustart veranlasst worden ist. Ergibt die Prüfung, dass der aktuelle Neustart durch das Überwachungsmodul 3 veranlasst worden ist, so wird in einem Schritt 103 die mittels des erfindungsgemäßen Verfahrens abgespeicherte Zustandsinformation beispielsweise aus dem Speicher 7 ausgelesen und für eine dauerhafte Speicherung in einem nicht dargestellten EEPROM, der dem Mikrocontroller 2 zugeordnet ist, abgespeichert und/oder es wird diese Zustandsinformation auf einer in 1 ebenfalls nicht dargestellten Protokollleitung zur Verfügung gestellt, so dass diese von außerhalb zur Analyse eines möglicherweise aufgetretenen Softwarefehlers herangezogen werden kann.
  • Wurde der Neustart nicht durch das Überwachungsmodul 3 veranlasst, so erfolgt – möglicherweise nach Abarbeitung einer Vielzahl von weiteren Instruktionen und Initialisierungsschritten, die Teil der Boot-Sequenz sind oder sich an diese anschließen – ein Übergang in den zweiten Betriebsmodus 200, in dem der Mikrocontroller bestimmungsgemäß betrieben wird. In dem zweiten Betriebsmodus 200 wird nun eine Software auf dem Mikrocontroller ausgeführt, die zu Fehlern führen kann. Während der Ausführung der Software wird – getriggert durch eine Vielzahl möglicher Ereignisse, beispielsweise durch einen Timerinterrupt – in einem Schritt 201 geprüft, ob ein vorgebbares Ereignis eingetreten ist. Das vorgebbare Ereignis kann beispielsweise der Ablauf eines Timers sein, der das einen ein durch das Überwachungsmodul und insbesondere ein durch den Timer 13 veranlasster Interrupt sein. Das Ereignis kann ferner der Aufruf eines weiteren, bereits in dem System vorhandenen Interrupts sein, bei dem die zugeordnete ISR erfindungsgemäß programmiert ist. Die in dem Schritt 201 durchgeführte Prüfung kann beispielsweise derart ausgebildet sein, dass durch den Interrupt-Handler 10 geprüft wird, ob aktuell eine Unterbrechungsanforderung durch den Timer 13 vorliegt.
  • Wird in dem Schritt 201 erkannt, dass das vorgebbare Ereignis aufgetreten ist, so wird in einem Schritt 202 eine Speicherung der Zustandsinformationen veranlasst, so dass diese Zustandsinformation bei einem Hardware-Neustart aus dem Speicher 7 ablesbar ist. Als abzuspeichernde Zustandsinformation wird beispielsweise der Befehlszähler 5 aus einem der Register 4 in einen Speicherbereich des Speichers 7 übertragen. Ferner kann vorgesehen sein, eine oder mehrere Informationen des Stacks 8 in den Speicher 7 zu schreiben. Die Informationen des Stacks 8 beinhalten beispielsweise eine Rücksprungadresse und Unwinding-Informationen.
  • Es wird dann die bestimmungsgemäße Ausführung der auf dem Mikrocontroller 2 ablaufenden Software fortgesetzt und es wird wieder die Prüfung in dem Schritt 201 durchgeführt.
  • Selbstverständlich sind eine Vielzahl weiterer Ausführungsformen vorstellbar. Insbesondere können die vorstehend beschriebenen Merkmale beliebig kombiniert werden.
  • Beispielsweise ist es vorstellbar, dass der Speicher 7 nicht in dem RAM 6, sondern ebenfalls als eines der Register 4 ausgebildet ist. Ferner ist es vorstellbar, dass ergänzend und/oder anstelle des Timers 13 die Auslösung eines in dem Mikrocontroller 2 bereits vorhandenen Interrupts ein Abspeichern von Zustandsinformationen während des Betriebs des Mikrocontrollers bewirkt. Insbesondere ist es vorstellbar, dass der Timer 13 als programmierbarer Timer ausgebildet ist und dass dieser derart verändert wird, dass zunächst in größeren Zeitabständen ein Abspeichern der Zustandsinformation erfolgt und nach einem bestimmten Intervall ein Abspeichern in verkürzten Zeitabständen möglich ist. Ist das Überwachungsmodul 3 wie in 1 beispielhaft beschrieben ausgebildet, so kann vorgesehen sein, dass der Timer 13 in Zeitabständen von 200 ms ein Abspeichern der Zustandsinformationen veranlasst. Nach 400 ms wird der Timer 13 derart umprogrammiert, dass dieser in Abständen von 10 ms ein Abspeichern der Zustandsinformationen bewirkt. Dies bedeutet, dass bei dem Eintritt eines Überwachungsmodul-Ereignisses, das beispielsweise nach weiteren 100 ms durch den Timer 14 ausgelöst werden würde, über 10 Systemzustandsinformationen abgespeichert sein können, falls die Anzahl der zu jedem Zeitpunkt maximal vorzuhaltenden Zustandsinformationen nicht niedriger gewählt ist. In Abhängigkeit davon, welcher Art die zu analysierenden Softwarefehler sind und in Abhängigkeit von dem in dem eingebetteten System 1 vorhandenen Ressourcen kann vorgesehen sein, jeweils nur die aktuellste Zustandsinformation abzuspeichern oder es kann vorgesehen sein, mehrere Zustandsinformationen abzuspeichern und beispielsweise vorzusehen, dass zu keinem Zeitpunkt mehr als eine vorgebbare Anzahl, beispielsweise 5 Zustandsinformationen, in dem Speicher 7 vorgehalten werden. Für die Speicherung jeder weiteren erfassten und abzuspeichernden Zustandsinformation wird dann eine bereits abgespeicherte Zustandsinformation überschrieben wird.
  • Liegen für die Softwareanalyse zu mehreren Zeitpunkten abgespeicherte Zustandsinformationen vor, so kann jeweils der Befehlszähler ermittelt werden, bei dessen Abspeichern der Stack innerhalb einer vermuteten Endlosschleife die geringste Verschachtelungstiefe aufwies. Damit kann erreicht werden, dass stets eine Funktion ermittelbar ist, die ausgehend von dem fehlerhaften Softwareelement eine möglichst geringe Aufruftiefe aufweist, so dass eine verbesserte Eingrenzung des Fehlers ermöglicht wird.
  • Ferner kann das System derart ausgebildet sein, dass ein Signal von dem Überwachungsmodul 3 nur in bestimmten Zeitfenstern übermittelt werden kann, so dass auch das Überwachungsmodul-Ereignis nur innerhalb dieser Zeitfenster ausgelöste werden kann. Wird der Interrupt nun durch den Timer 13 ausgelöst, so ist der Timer vorteilhafterweise derart programmiert ist, dass der Interrupt zumindest so kurz vor dem Zeitfenster ausgelöst wird, dass das Abspeichern der Zustandsinformation in dem Speicher 7 durch die Interrupt-Service-Routine 11 vor einem durch das Signal ausgelösten Hardware-Neustart gewährleistet ist.

Claims (19)

  1. Verfahren zur Verbesserung der Analysierbarkeit von Softwarefehlern in einem Mikrocontroller (2), bei dem ein dem Mikrocontroller (2) zugeordnetes Überwachungsmodul (3) mindestens eine Funktion des Mikrocontrollers (2) überprüft und ein Signal erzeugt, falls eine Fehlfunktion des Mikrocontrollers (2) erkannt wird, wobei das Signal zumindest mittelbar einen Neustart des Mikrocontrollers (2) bewirkt und wobei bei dem Neustart mindestens ein während des Betriebs des Mikrocontrollers (2) ablaufendes Softwareelement neu gestartet wird, dadurch gekennzeichnet, dass während des Ablaufs des Softwareelements oder mit Erkennung eines Fehlerzustands mindestens eine Zustandsinformationen in einem Speicher (7) abgespeichert wird, wobei die Zustandsinformation mindestens den Stand eines Befehlszählers (5) umfasst und wobei der Speicher (7) bei einem Neustart nicht sofort überschrieben oder gelöscht wird; und während des Neustartens oder nach erfolgtem Neustart ein Zugriff auf die in dem Speicher abgelegte Zustandsinformation erfolgt und die Zustandsinformation für eine Analyse eines Softwarefehlers zur Verfügung gestellt wird.
  2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, dass die abgespeicherte Zustandsinformation mindestens eine der folgenden Größen umfasst: – ein aktueller Wert des Befehlszählers (5); – eine Rücksprungadresse; – eine Interruptmaske; – eine Adresse eines Stacks (8); – mindestens ein in einem Stack (8) abgespeicherter Wert; – der Inhalt mindestens einer Variablen; – der Wert mindestens eines Interruptflags; – der Inhalt mindestens eines weiteren Registers (4); – eine Unwinding-Information – der Wert mindestens eines Eingangssignals des Mikrocontrollers (2).
  3. Verfahren nach einem der vorangehenden Ansprüche, dadurch gekennzeichnet, dass die Abspeicherung der Zustandsinformation mindestens eine der folgenden Schritte umfasst: – Abspeicherung der Zustandsinformation in einem Adress- oder Datenregister des Prozessorkerns; – Abspeicherung der Zustandsinformation in einem dezidierten Register (4); – Abspeicherung der Zustandsinformation in einem dezidierten Bereich eines RAM (6).
  4. Verfahren nach einem der vorangehenden Ansprüche, dadurch gekennzeichnet, dass während des Neustarts mindestens eine der folgenden Maßnahmen durchgeführt wird: – eine Übertragung mindestens einer Komponente der abgespeicherten Zustandsinformation in einen nicht-flüchtigen Speicher; – eine Ausgabe mindestens einer Komponente der abgespeicherten Zustandsinformation auf eine Protokollleitung.
  5. Verfahren nach einem der vorangehenden Ansprüche, dadurch gekennzeichnet, dass eine vorgebbare Anzahl von aufeinanderfolgenden Zustandsinformationen in dem Mikrocontroller (2) abgespeichert werden.
  6. Verfahren nach einem der vorangehenden Ansprüche, dadurch gekennzeichnet, dass zu mehreren Zeitpunkten mindestens einen Befehlszähler (5) umfassende Zustandsinformationen abgespeichert werden und bei der Analyse des Softwarefehlers eine Mehrzahl von Zustandsinformationen zur Verfügung stehen, wobei bei der Analyse des Softwarefehlers jeweils der Befehlszähler (5) ermittelt wird, bei dessen Abspeichern der Stack (7) die geringste Verschachtelungstiefe innerhalb einer vermuteten Endlosschleife aufwies.
  7. Verfahren nach einem der vorangehenden Ansprüche, dadurch gekennzeichnet, dass die Zustandsinformation kontinuierlich während des Betriebs des Mikrocontrollers (2) abgespeichert wird, wobei die abgespeicherte Zustandsinformation während des fehlerfreien Betriebs der aktuellen Zustandsinformation entspricht.
  8. Verfahren nach einem der vorangehenden Ansprüche, dadurch gekennzeichnet, dass das Abspeichern der Zustandsinformation in Abhängigkeit von dem Auftreten mindestens eines der folgenden Ereignisse veranlasst wird: – ein Hardware-Reset; – ein Software-Sprung auf eine einer Bootsequenz zugeordneten Startadresse; – ein von dem Überwachungsmodul ausgelöstes Ereignis, wobei das Überwachungsmodul in dem Mikrocontroller (2) angeordnet ist; – ein auf einer dedizierten Eingangsleitung des Mikrocontrollers (2) anliegendes Signal.
  9. Verfahren nach einem der vorangehenden Ansprüche, dadurch gekennzeichnet, dass ein Interrupt in dem Mikrocontroller (2) ausgelöst wird, eine Interrupt-Service-Routine (11) zur Behandlung des Interrupts ausgeführt wird und die Interrupt-Service-Routine (11) in dem Mikrocontroller (2) das Abspeichern der mindestens einen Zustandsinformationen veranlasst, wobei die Zustandsinformation mindestens den Stand eines Befehlszählers (5) vor dem Aufruf der Interrupt-Service-Routine (11) umfasst.
  10. Verfahren nach Anspruch 9, dadurch gekennzeichnet, dass das Signal von dem Überwachungsmodul (3) nur in bestimmten Zeitfenstern übermittelbar ist und der Interrupt durch einen Timer (13) ausgelöst wird, wobei der Timer (13) derart programmiert ist, dass der Interrupt zumindest so kurz vor einem Zeitfenster ausgelöst wird, dass das Abspeichern der Zustandsinformation in dem Speicher (7) durch die Interrupt-Service-Routine (11) vor einem durch das von dem Überwachungsmodul (3) übermittelten Signal ausgelösten Neustart gewährleistet wird.
  11. Verfahren nach einem der Ansprüche 9 oder 10, dadurch gekennzeichnet, dass der Interrupt durch einen programmierbaren Timer (13) ausgelöst wird, wobei die Ablaufdauer des Timers (13) dynamisch variiert wird oder dass der Interrupt durch einen periodisch ablaufenden Timer (13) ausgelöst wird.
  12. Verfahren nach einem der Ansprüche 9 bis 11, dadurch gekennzeichnet, dass der Interrupt in dem Mikrocontroller (2) zur Behandlung eines weiteren Ereignisses vorgesehen ist und bei Eintreten dieses Ereignisses ausgelöst wird, wobei die zugehörige Interrupt-Service-Routine (11) derart erweitet wird dass eine Abspeicherung der Zustandsinformation während des Abarbeitens der Interrupt-Service-Routine (11) erfolgt.
  13. Verfahren nach einem der Ansprüche 9 bis 12, dadurch gekennzeichnet, dass das Abspeichern der Zustandsinformationen von einer Mehrzahl von Interrupts veranlassbar ist, wobei jeder zugehörigen Interrupt-Service-Routine (11) ein Speicherbereich zugeordnet ist und die Zustandsinformation von der jeweiligen Interrupt-Service-Routine (11) in dem zugeordneten Speicherbereich abgelegt wird.
  14. Verfahren nach einem der vorangehenden Ansprüche, dadurch gekennzeichnet, dass für jeden möglichen Interrupt von der zugehörigen Interrupt-Service-Routine (11) eine Rücksprungadresse abgespeichert wird und bei einem darauf folgenden Hardware-Neustart zumindest während der Durchführung einer Boot-Sequenz (100) ein Zugriff auf die abgespeicherte Rücksprungadresse erfolgt.
  15. System (1) zur Verbesserung der Analysierbarkeit von Softwarefehlern in einem Mikrocontroller (2), wobei dem Mikrocontroller (2) ein Überwachungsmodul (3) zur Überprüfung mindestens einer Funktion des Mikrocontrollers (2) zugeordnet ist und mittels des Überwachungsmoduls (3) ein Signals erzeugbar ist, falls eine Fehlfunktion des Mikrocontrollers (2) erkannt wird, wobei das Signal zumindest mittelbar einen Neustart des Mikrocontrollers (2) bewirkt und wobei bei dem Neustart mindestens ein während des Betriebs des Mikrocontrollers (2) ablaufendes Softwareelement neu gestartet wird, dadurch gekennzeichnet, dass der Mikrocontroller (2) Mittel zum Abspeichern mindestens einer Zustandsinformationen in einem dem Mikrokontroller (2) zugeordneten Speicher (7) umfasst, wobei die Zustandsinformation den Stand eines Befehlszählers (5) umfasst und wobei der Speicher (7) bei einem Neustart des Mikrocontrollers (2) zumindest solange nicht überschreibbar oder löschbar ist, dass während des Neustarts oder nach erfolgtem Neustart ein Zugriff auf die in dem Speicher (7) abgelegten Zustandsinformation für eine Analyse eines Softwarefehlers ermöglicht ist.
  16. System (1) nach Anspruch 15, dadurch gekennzeichnet, dass das System (1) zur Durchführung eines Verfahrens nach einem der Ansprüche 2 bis 14 hergerichtet ist.
  17. System (1) nach Anspruch 15 oder 16, dadurch gekennzeichnet, dass in dem Mikrocontroller (2) eine Schaltungslogik (9) zum Veranlassen eines Abspeicherns ausgebildet ist.
  18. System (1) nach Anspruch 17, dadurch gekennzeichnet, dass ein Abspeichern der Zustandsinformationen kontinuierlich während des Ablaufens des Softwareelements erfolgt
  19. System (1) nach Anspruch 17 oder 18, dadurch gekennzeichnet, dass ein Abspeichern der Zustandsinformationen mit dem Erkennen des Vorliegens einer Fehlfunktion erfolgt.
DE200910000874 2009-02-16 2009-02-16 Verfahren zur Verbesserung der Analysierbarkeit von Softwarefehlern in einem Mikrocontroller Ceased DE102009000874A1 (de)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE200910000874 DE102009000874A1 (de) 2009-02-16 2009-02-16 Verfahren zur Verbesserung der Analysierbarkeit von Softwarefehlern in einem Mikrocontroller

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE200910000874 DE102009000874A1 (de) 2009-02-16 2009-02-16 Verfahren zur Verbesserung der Analysierbarkeit von Softwarefehlern in einem Mikrocontroller

Publications (1)

Publication Number Publication Date
DE102009000874A1 true DE102009000874A1 (de) 2010-08-19

Family

ID=42338429

Family Applications (1)

Application Number Title Priority Date Filing Date
DE200910000874 Ceased DE102009000874A1 (de) 2009-02-16 2009-02-16 Verfahren zur Verbesserung der Analysierbarkeit von Softwarefehlern in einem Mikrocontroller

Country Status (1)

Country Link
DE (1) DE102009000874A1 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103975310A (zh) * 2011-12-02 2014-08-06 高通股份有限公司 用于在复位之前保存条件以用于复位后评估的方法和设备
DE102021212994B3 (de) 2021-11-18 2023-04-20 Continental Automotive Technologies GmbH Verfahren zur Erkennung von auf eine Manipulation hindeutenden Anomalien während eines sicheren Startvorgangs einer softwaregesteuerten Vorrichtung

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103975310A (zh) * 2011-12-02 2014-08-06 高通股份有限公司 用于在复位之前保存条件以用于复位后评估的方法和设备
DE102021212994B3 (de) 2021-11-18 2023-04-20 Continental Automotive Technologies GmbH Verfahren zur Erkennung von auf eine Manipulation hindeutenden Anomalien während eines sicheren Startvorgangs einer softwaregesteuerten Vorrichtung
WO2023088523A1 (de) 2021-11-18 2023-05-25 Continental Automotive Technologies GmbH Verfahren zur erkennung von auf eine manipulation hindeutenden anomalien während eines sicheren startvorgangs einer softwaregesteuerten vorrichtung

Similar Documents

Publication Publication Date Title
EP1917592B1 (de) Rechnersystems mit wenigstens zwei ausführungseinheiten und einer vergleichseinheit sowie verfahren zu dessen steuerung
DE102012109614B4 (de) Verfahren zum Wiederherstellen von Stapelüberlauf- oder Stapelunterlauffehlern in einer Softwareanwendung
EP1854007A2 (de) Verfahren, betriebssysem und rechengerät zum abarbeiten eines computerprogramms
WO2006032617A1 (de) Verfahren zur abarbeitung eines computerprogramms auf einem computersystem
EP1810139B1 (de) Verfahren, betriebssystem und rechengerät zum abarbeiten eines computerprogramms
EP1262856B1 (de) Programmgesteuerte Einheit
EP1805617A1 (de) Verfahren zur abarbeitung eines computerprogramms auf einem computersystem
EP0048991B1 (de) Verfahren und Anordnung zur Behandlung von Unterbrechungsbedingungen während des Arbeitsablaufes in Datenverarbeitungsanlagen mit Mikroprogrammsteuerung
DE102009000874A1 (de) Verfahren zur Verbesserung der Analysierbarkeit von Softwarefehlern in einem Mikrocontroller
EP1812853B1 (de) Verfahren, betriebssystem und rechengerät zum abarbeiten eines computerprogramms
EP1283471B1 (de) Programmgesteuerte Einheit
DE102005060714B4 (de) Datenverarbeitungsvorrichtung, Speicherkarte, Verfahren zum Betreiben einer Datenverarbeitungsvorrichtung und Herstellungsverfahren für eine Datenverarbeitungsvorrichtung
WO2016206847A1 (de) Verfahren und vorrichtung zum absichern einer programmzählerstruktur eines prozessorsystems und zum überwachen der behandlung einer unterbrechungsanfrage
DE102011083655A1 (de) Überwachungsvorrichtung zur Überwachung eines Betriebs einer Steuerverarbeitungsvorrichtung
EP2338111B1 (de) Verfahren und vorrichtung zum testen eines rechnerkerns in einer mindestens zwei rechnerkerne aufweisenden recheneinheit
DE102010042574B4 (de) Verfahren zum Betreiben eines Mikrocontrollers für ein Automobil und Mikrocontroller
DE102020116959A1 (de) Watchdog-schaltung, schaltung, system-auf-chip, verfahren zum betrieb einer watchdog-schaltung, verfahren zum betrieb einer schaltung und verfahren zum betrieb eines systems-auf-chip
WO2007017372A1 (de) Verfahren und vorrichtung zur steuerung eines rechnersystems mit wenigstens zwei ausführungseinheiten
DE10229817B4 (de) Verfahren und Vorrichtung zum Ablegen eines Computerprogramms in einen Programmspeicher eines Steuergeräts
DE10110050A1 (de) Verfahren zur Absicherung sicherheitskritischer Programmteile vor versehentlicher Ausführung und eine Speichereinrichtung zur Durchführung dieses Verfahrens
WO2004001586A1 (de) Vorrichtung und verfahren zum verarbeiten einer sequenz von sprungbefehlen
DE102012203531B4 (de) Verfahren und Verarbeitungseinheit zur kontinuierlichen Bereitstellung eines Präzisionssystemakts
DE102007018003A1 (de) Überwachungseinheit und Auswerteeinheit zum Überprüfen einer Fehlerfreiheit eines Systems
AT15189U1 (de) Überwachung von Stack-Variablen
DD264533A1 (de) Verfahren zum erzeugen von nichtmaskierbaren interruptsignalen fuer testaufgaben in einem mikrorechner

Legal Events

Date Code Title Description
R084 Declaration of willingness to licence

Effective date: 20130603

R012 Request for examination validly filed
R002 Refusal decision in examination/registration proceedings
R125 Request for further processing filed
R003 Refusal decision now final
R127 Request for further processing refused or deemed withdrawn