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?
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.
PS: evt. etwas umschreiben, falls IAR eine andere Syntax erwartet und im anderen Thread posten.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.