www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CortexM3 Hardfault Handler


Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht 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:
    /* Set privileged mode */
    __set_PSP((uint32_t)&_pspstack_end);
    __set_CONTROL(0x0);
    SCB->SHCSR |= (SCB_SHCSR_MEMFAULTENA|SCB_SHCSR_BUSFAULTENA|SCB_SHCSR_USGFAULTENA);
    /* Set back Thread mode */
    __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

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?
     __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

Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht 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

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.