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

2019-03-26 16:45发布

定义了一个函数fun,和一个中断服务函数isr,都在内存中跑。fun里面定义一些局部变量,并且这个函数只有isr会调用。现在发现如果这个函数比较大(其实也不是很大,就几十行)情况下,程序就会跑飞。如果把局部变量定义为静态变量就没有问题。各位大虾碰到过这种问题吗?郁闷了好几天了,帮帮忙吧!!! [ 本帖最后由 w00d 于 2012-3-6 13:50 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
w00d
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,又可以进入中断了,但是程序跑了一会儿又不进中断了。
郁闷啊,也不知道是怎么回事。。。

一周热门 更多>