单片机时序紊乱?
我用的飞思卡尔Kl26单片机,开了定时器中断,外部中断,DMA中断,并设置好了优先级,每进一次定时器中断就对一个数进行自加,当该数加到5时就对它清零,可我发现,这个数前十...
我用的飞思卡尔Kl26单片机,开了定时器中断,外部中断,DMA中断,并设置好了优先级,每进一次定时器中断就对一个数进行自加,当该数加到5时就对它清零,可我发现,这个数前十几次自加还正常,到后面会突然变成100多,不知道是什么情况,而我用Jtag调试,对程序设置断点一步一步执行的时候,程序运行是正常的,请问要怎么解决?
展开
展开全部
我没遇到过这情况,但我尽管说说我的看法:因为你的定时中断,外部中断和DMA中断都处于不同的优先级,这势必会出现中断嵌套的现象(所谓中断嵌套就是一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源)。
而因为单片机堆栈的深度是有限的,当你的中断嵌套得比较多,而中断里又有调用别的函数,函数里又有函数,这样层层嵌套,就会把很多东西压到堆栈里面,当堆栈满载后就会溢出,堆栈溢出的结果就是程序跑飞。
所以解决办法就是:把定时中断,外部中断和DMA中断都设为同一优先级别,这样就不存在中断嵌套了,堆栈就不会溢出。
这是我的个人看法,说错了请原谅。
而因为单片机堆栈的深度是有限的,当你的中断嵌套得比较多,而中断里又有调用别的函数,函数里又有函数,这样层层嵌套,就会把很多东西压到堆栈里面,当堆栈满载后就会溢出,堆栈溢出的结果就是程序跑飞。
所以解决办法就是:把定时中断,外部中断和DMA中断都设为同一优先级别,这样就不存在中断嵌套了,堆栈就不会溢出。
这是我的个人看法,说错了请原谅。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询