F28026程序跑飞,知道的朋友帮个忙啊(问题已经解决,楼下给出了方法,关心的来看下)

2019-03-26 16:45发布

定义了一个函数fun,和一个中断服务函数isr,都在内存中跑。fun里面定义一些局部变量,并且这个函数只有isr会调用。现在发现如果这个函数比较大(其实也不是很大,就几十行)情况下,程序就会跑飞。如果把局部变量定义为静态变量就没有问题。各位大虾碰到过这种问题吗?郁闷了好几天了,帮帮忙吧!!! [ 本帖最后由 w00d 于 2012-3-6 13:50 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
dontium
1楼-- · 2019-03-26 22:13
< 你这个问题,TI已经不把它作为DSP了,属于c2000的问题



程序跑飞,请仔细研究一下CMD文件吧,
鸵鸟蝈蝈
2楼-- · 2019-03-26 23:32
< 有可能是堆栈溢出了
hlx3012
3楼-- · 2019-03-27 05:05

在堆栈中写入恒定值,比如0xfefe。然后看看堆栈是否有被全部修改,是否溢出。

 

最好能够确认程序跑飞的那个点。仔细分析。

 

听说最新的TI仿真器有trace功能,可以追溯最后运行的程序段,可惜好贵啊.....

鸵鸟蝈蝈
4楼-- · 2019-03-27 08:15
 精彩回答 2  元偷偷看……
w00d
5楼-- · 2019-03-27 10:27
 精彩回答 2  元偷偷看……
w00d
6楼-- · 2019-03-27 14:46
今天我发现是没有在ADCINTFLGCLR中进行清中断,但是我确实在服务函数中最后部分有清中断程序,具体为:
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,又可以进入中断了,但是程序跑了一会儿又不进中断了。
郁闷啊,也不知道是怎么回事。。。

一周热门 更多>