Я хотел бы создать инструмент отладки, который поможет мне отлаживать лучшее приложение. Я работаю голыми костями (без ОС). используя встроенный верстак IAR на SAM3 Atmel.вызов стека в ARM cortex m3
У меня есть сторожевой таймер, который вызывает определенный IRQ в случае тайм-аута (это будет заменено программным сбросом при выпуске). В обработчике IRQ я хочу распечатать (UART) трассировку стека, где точно произошло тайм-аут сторожевого таймера.
Я посмотрел в Интернете, и я не нашел реализации этой функции.
У кого-нибудь есть идея, как подойти к подобным вещам?
EDIT: Хорошо, мне удалось захватить обратный адрес из стека, поэтому я точно знаю, где произошел тайм-аут WDT. Развертывание всего стека не так просто, как только оно появляется, потому что каждая функция подталкивает в стек различное количество локальных переменных.
код я в конечном итоге это (для других, кто может найти ПОЛЕЗНЫЕ)
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 ;
}