堆栈监视 MSP430F449片内集成2K的RAM、60K的FLASH,对于一般的运用60K的FLASH已经足够,但2K的RAM显然很紧张,因此留给程序堆栈用的RAM就很小,堆栈一旦溢出程序将出现不可预测的错误,一般编译器是无法检测出堆栈的空间是否够用,而专门用于检测堆栈的软件价格非常昂贵,以下是笔者写的一段小汇编程序可以在函数中调用以随时监视程序的堆栈是否溢出。 // int WatchStack(void); RSEG UDATA0 RSEG IDATA0 RSEG CODE WatchStack: MOV SP,R12; SUB #(sizeof UDATA0+sizeof IDATA0+200H),R12; RET; 一旦 int WatchStack(void )函数的返回值为负数,则堆栈溢出 .
程序计数器 IAR公司的调试软件不提供程序的运行周期监视,我们在调试的过程中往往要知道程序的执行时间。我们可以利用定时器作为周期的监视器。如以下的一段小程序 unsigned long Cycle; #define CYCLES (Cycle<<16) + TBR TBCTL = TBSSEL1 + TBCLR + TBIE; TBCTL |= MC1; interrupt [TIMERB1_VECTOR] void GoCycle (void) { TBCTL &= ~TBIFG; Cycle++; } 这样通过监视“CYCLES”的值便知道程序的执行周期。
|