call-stack unwinding in ARM-cortex-m3

Ich würde gern ein debugging-tool, das mir helfen wird, mich besser Debuggen meiner Anwendung.
Ich arbeite bare-bones - (ohne Betriebssystem). mit Hilfe der IAR embedded workbench für Atmel SAM3.

Habe ich ein Watchdog-timer, die fordert, einen bestimmten IRQ im Falle einer Zeitüberschreitung (Dieser wird ersetzt durch einen software-reset on release).
In der IRQ-handler, die ich ausdrucken möchten (UART) der stack-trace, wo genau sich der Watchdog-timeout ist aufgetreten.

Sah ich im web, und ich fand keine Umsetzung dieser Funktionalität.

Jemand eine Idee, wie man zu nähern, diese Art der Sache ?

EDIT: OK, ich habe es geschafft, greifen die return-Adresse vom stack, so dass ich genau weiß, wo die WDT timeout aufgetreten ist.
Abwickeln des gesamten Stapels ist nicht einfach, wie es zunächst erscheint, denn jede Funktion schiebt die unterschiedliche Menge der lokalen Variablen in den stack.

Den code, den ich am Ende dieses (für andere, die finden es vielleicht nützlich)

void WDT_IrqHandler( void )
{
    uint32_t * WDT_Address;
    Wdt *pWdt = WDT ;
    volatile uint32_t dummy ;
    WDT_Address = (uint32_t *) __get_MSP() + 16 ;
    LogFatal ("Watchdog Timer timeout,The Return Address is %#X", *WDT_Address);
    /* Clear status bit to acknowledge interrupt */
    dummy = pWdt->WDT_SR ;

}
InformationsquelleAutor stdcall | 2012-07-04
Schreibe einen Kommentar