Forum: Mikrocontroller und Digitale Elektronik STM32 Exception


von Arne (Gast)


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?

von MeinGastName (Gast)


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.

von MeinGastName (Gast)


Lesenswert?

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

von Andreas B. (Gast)


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.

von Arne (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.