Forum: Mikrocontroller und Digitale Elektronik arm-gdb backtrace funktioniert nicht vom hard fault handler


von ARM Asm Anfänger (Gast)


Lesenswert?

Hi,

wenn man mal wieder schrott in den Cortex-M3 programmiert hat ladet man 
ja meist im hard fault interrupt handler.

Da steht nur der Befehl bkpt.

Also etwa so:

(gdb) load
(gdb) monitor reset init
(gdb) continue

Program received signal SIGTRAP, Trace/breakpoint trap.
hard_fault_handler () at so_ein_schrott_code.c:100
100 bkpt

(gdb) backtrace
#0  hard_fault_handler () at so_ein_schrott_code.c:100
#1  0xfffffff8 in ?? ()
#2  0xfffffff8 in ?? ()


Wer kennt einen "schönen" hard_fault_handler mit dem ein backtrace mich 
bis zu main zurück führt (wenn mein code nicht zu schlimm gewütet hat)?


Danke,
Lars

von Roland H. (batchman)


Lesenswert?

ARM Asm Anfänger schrieb im Beitrag #2532010:
> Da steht nur der Befehl bkpt.

Kannst Du ja ändern: Ausgabe der Register via UART, LEDs blinken, ...

ARM Asm Anfänger schrieb im Beitrag #2532010:
> Wer kennt einen "schönen" hard_fault_handler mit dem ein backtrace mich
> bis zu main zurück führt

Wozu zurück, was willst Du dort :-) ?

Im "Hard fault handler" kannst Du die Adresse auslesen, wo es geknallt 
hat. Reicht das nicht aus?

In Analogie zu einem "try ... catch finally" benötigt man ja eher die 
"catch/finally"-Adresse für einen Rücksprung an eine definierte Stelle.

Im ARM CM3 tech ref manual steht beschrieben, wie der Stack aussieht. 
Sicherlich kann man den irgendwie umbiegen, so dass man zurückspringen 
kann.

von Jim M. (turboj)


Lesenswert?

ARMv7-M Exceptions kann AFAIK nur der gepatchte GDB von CodeSourcery - 
der z.B. bei G++ lite dabei ist - wenn man ihm dies in einer target.xml 
Datei mitteilt.
1
 (gdb) set tdesc filename Path\gdbtarget.xml

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.