arm-gdb backtrace funktioniert nicht vom hard fault handler

Gast #2532010
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
#2532050
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren