2019-03-26 16:45发布
在堆栈中写入恒定值,比如0xfefe。然后看看堆栈是否有被全部修改,是否溢出。
最好能够确认程序跑飞的那个点。仔细分析。
听说最新的TI仿真器有trace功能,可以追溯最后运行的程序段,可惜好贵啊.....
最多设置5个标签!
程序跑飞,请仔细研究一下CMD文件吧,
在堆栈中写入恒定值,比如0xfefe。然后看看堆栈是否有被全部修改,是否溢出。
最好能够确认程序跑飞的那个点。仔细分析。
听说最新的TI仿真器有trace功能,可以追溯最后运行的程序段,可惜好贵啊.....
void fun(int a,int b)
{
.....
}
interrupt void isr(void)
{
.......
fun(a,b);
........
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
}
然后我使用全局变量做了一个标志
Uint16 flag;
interrupt void isr(void)
{
flag=0;
.......
fun(a,b);
........
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
flag=1;
}
这样就可以看看每次进入中断后有没有清中断。实验发现,即使不进入中断了flag也是1,也就是说确实是清了中断的,我再在CCS里面把ADCINTFLGCLR赋1,又可以进入中断了,但是程序跑了一会儿又不进中断了。
郁闷啊,也不知道是怎么回事。。。
一周热门 更多>