Ответ: Способы отследить переполнение стека Применительно к IAR:
1) резервировать стек по максимуму
2) во встроенном отладчике IAR есть контроль переполнения стека. Debug\View\Stack - покажет красивую картинку использования стека
3) программные трюки: на языке С
// Вызвать эту функцию один раз в начале main() void sys_check_stack_init(void) { #pragma segment="CSTACK" unsigned short * p = (unsigned short *)__segment_begin("CSTACK"); *p++ = 0xDEAD; *p = 0xDEAD; } // Проверка на переполнение стека. Вызывать периодически. // Если два слова в конце стека затерлись, то шабаш - ребут, можно // ругнуться system_panic void sys_check_stack_(void) { #pragma segment="CSTACK" unsigned short * p = (unsigned short *)__segment_begin("CSTACK"); if( (p[0] != 0xDEAD) || (p[1] != 0xDEAD) ) exit(0); }4) проверять глубину стека и фиксировать PC при котором он максимален (в отладочных целях). Пишется на асме, типа того:
; unsigned int sys_check_stack( void ); sys_check_stack mov.w #SFE(CSTACK), r12 sub.w sp, r12 cmp.w r12, stack_depth_ jc ?sys_check_stack_exit mov r12, stack_depth_ mov @sp, stack_pc_ ?sys_check_stack_exit: ret ; unsigned short sys_stack_info( unsigned short *address ); sys_stack_info tst.w r12 jeq ?sys_stack_info_p1 mov.w stack_pc_, 0(r12) ?sys_stack_info_p1: mov.w stack_depth_, r12 ret