Сейчас используется вот такой код. PC там похож на правду, но как и почему это работает, я не понимаю.
Код
uint32_t amsp = __get_MSP();
uint32_t apsp = __get_PSP();
debug_hard("MSP = ");
debug_print_stack((uint32_t *)(amsp + 0x24));
debug_hard("PSP = ");
debug_print_stack((uint32_t *)(apsp + 0x24));
uint32_t apsp = __get_PSP();
debug_hard("MSP = ");
debug_print_stack((uint32_t *)(amsp + 0x24));
debug_hard("PSP = ");
debug_print_stack((uint32_t *)(apsp + 0x24));
Кроме того, хотелось бы знать, насколько реально сделать stack unwinding и наблюдать цепочку вызовов, вызвавших исключение. Ну и до кучи, нужно ли выделять стек для исключений процессора (HardFault) при условии, что там вызывается только отладочный вывод и бесконечный цикл?