Forum: Mikrocontroller und Digitale Elektronik CortexM3 Hardfault Handler


von Ulrich P. (uprinz)


Lesenswert?

Hallo!

Ich versuche gerade einen eigenen Handler für die diversen Exceptions 
des CortexM3 zu schreiben. Es geht darum eine Art Bluescreen über die 
Serielle auszugeben, wenn eine Exception oder ein nicht definierter 
Interrupt auftritt.

Es gibt dazu ein paar Codebeispiele, die jedoch scheinbar nur dann 
funktionieren, wenn ein RTOS im Hintergrund läuft. Das ist bei mir nicht 
der Fall.

Das Problem ist, dass mein Handler funktioniert, wenn ich per 
gdb/insight verbunden bin. Lasse ich das Programm so laufen, fällt die 
CPU immer in STOP mit Hardfault statt meinen Handler aufzurufen.

Ich habe die Doku (STM32F10x PM0056.pdf) so verstanden, dass man die 
entsprechenden Register nur im Privileged Mode setzen darf. Im Exception 
Handler wird wohl auch der PSP Stack Pinter verwendet, statt dem MSP.
Also habe ich die Initialisierung so durchgeführt:
1
    /* Set privileged mode */
2
    __set_PSP((uint32_t)&_pspstack_end);
3
    __set_CONTROL(0x0);
4
    SCB->SHCSR |= (SCB_SHCSR_MEMFAULTENA|SCB_SHCSR_BUSFAULTENA|SCB_SHCSR_USGFAULTENA);
5
    /* Set back Thread mode */
6
    __set_CONTROL(0x1);
Es ist aber weiterhin so, dass im SHCSR statt der erhofften 0x00070000 
nur 0x00020000 steht.
Starte ich das ganze bei laufendem Debugger, funktioniert es prächtig.

Irgendeine Idee?

Gruß, Ulrich

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Ulrich P. schrieb:
> Im Exception Handler wird wohl auch der PSP Stack Pinter verwendet,
> statt dem MSP.

Das geht nicht. Exception Handler verwenden immer den MSP.

> Also habe ich die Initialisierung so durchgeführt:

Wo befindest Du Dich denn während der Code ausgeführt wird?
1
     __set_CONTROL(0x0);

Dieses Kommando ändert das CONTROL Register ohnehin nur, wenn Du
bereits privilegiert bist. Du kannst damit keine Privilegien erlangen.

Es ist übrigens keine gute Idee, mit dem selben Problem in
verschiedenen Threads anzukommen.

Viel Erfolg
Marcus

von Ulrich P. (uprinz)


Lesenswert?

Hi Marcus,

Im englischen Forum hatte sich nichts getan, und mir brennt es etwas...

Wenn Du mir trotzdem noch weiter hilfst, dann machen hier weiter:
http://embdev.net/topic/170640?goto=1950694#1950694

Gruß, Ulrich

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.