单片机时序紊乱?

我用的飞思卡尔Kl26单片机,开了定时器中断,外部中断,DMA中断,并设置好了优先级,每进一次定时器中断就对一个数进行自加,当该数加到5时就对它清零,可我发现,这个数前十... 我用的飞思卡尔Kl26单片机,开了定时器中断,外部中断,DMA中断,并设置好了优先级,每进一次定时器中断就对一个数进行自加,当该数加到5时就对它清零,可我发现,这个数前十几次自加还正常,到后面会突然变成100多,不知道是什么情况,而我用Jtag调试,对程序设置断点一步一步执行的时候,程序运行是正常的,请问要怎么解决? 展开
 我来答
甜甜圈的店铺
2014-06-30 · TA获得超过1092个赞
知道小有建树答主
回答量:231
采纳率:100%
帮助的人:238万
展开全部
我没遇到过这情况,但我尽管说说我的看法:因为你的定时中断,外部中断和DMA中断都处于不同的优先级,这势必会出现中断嵌套的现象(所谓中断嵌套就是一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源)。

而因为单片机堆栈的深度是有限的,当你的中断嵌套得比较多,而中断里又有调用别的函数,函数里又有函数,这样层层嵌套,就会把很多东西压到堆栈里面,当堆栈满载后就会溢出,堆栈溢出的结果就是程序跑飞。

所以解决办法就是:把定时中断,外部中断和DMA中断都设为同一优先级别,这样就不存在中断嵌套了,堆栈就不会溢出。

这是我的个人看法,说错了请原谅。
yylrhyyl
2014-06-30 · TA获得超过1878个赞
知道大有可为答主
回答量:2013
采纳率:80%
帮助的人:603万
展开全部
清零指令放到中断里面,然后对清零的次数进行计数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式