www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 Exception


Autor: Arne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

ich grübele gerade über folgendem Problem:
Mein C-Code rennt auf einmal in den Handler für HardFaultException. Das 
HFSR bei $E000ED2C steht auf $40000000. Somit ist das FORCED-Bit 
gesetzt. Dieses sagt aus, dass (lt. "The definitive guide to the ARM 
Cortex-M3") die Handler für MemoryManagementFault, UsageFault oder 
BusFault nicht aufgerufen werden konnten. Allerdings habe ich alle 
Handler definiert und genauso wie den HardFault-Handler in der 
Vektortabelle eingetragen.
Und im UFSR bei $E000ED2A steht $0002 drin: "attempts to switch to an 
invalid state". Da ich aber keinen ASM-Code geschrieben habe, der hier 
ausgeführt werden könnte bei dem in einer Adresse das LSB nicht gesetzt 
ist, frage ich mich, was da schief gelaufen ist. Dann müsste ja der 
C-Compiler (IAR V5.50) falschen Code erzeugt haben. Irgendwer eine Idee?

Autor: MeinGastName (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe hier eine kleine Makro-Funktion mit der man in einer Listste 
merken kann in welcher Funktion der gerade rein springt.

Beitrag "Re: Cortex-M3 Programm-Counter auslesen?"

Dann weist du wenigstens aus welcher Funktion das kommt.
SAVE_U32(<Zahl>);
Kannst du noch zwischendurch Merker in diese Liste aufnehmen.

Kompiler ist nie schuld, denn das ist Software.

Autor: MeinGastName (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: evt. etwas umschreiben, falls IAR eine andere Syntax erwartet und im 
anderen Thread posten.

Autor: Andreas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arne schrieb:
> Da ich aber keinen ASM-Code geschrieben habe, der hier
> ausgeführt werden könnte bei dem in einer Adresse das LSB nicht gesetzt
> ist, frage ich mich, was da schief gelaufen ist. Dann müsste ja der
> C-Compiler (IAR V5.50) falschen Code erzeugt haben. Irgendwer eine Idee?

Der "falsche Code" kommt dann wohl nicht aus dem Compiler. Soll heißen, 
der Prozessor ist bei der Ausführung irgendwo gelandet wo er nicht 
sollte und das wiederum heißt meistens, dass der Stack irgendwo kaputt 
geschrieben wurde.

Also würde ich mal auf einen Array-Überlauf tippen. Einfach mal alle 
Funktionen mit lokalen Arrays noch mal genau anschauen.

Autor: Arne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Leute. Vergesst alles, was ich geschrieben habe. Das Problem saß 
70cm vorm Monitor.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.