关于大鑫浪
行业资讯
单片机程序总跑飞?
为大家讲解一下为何单片机程序总跑飞,翊杰小编为大家整理了单片机跑飞的原因,以下几种情况:
(1)意外中断,是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象。
(2)中断变量处理不断,若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile;其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断,否则出现造成数据乱套。
(3)地址溢出,常见错误为指针操作错误,着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。
(4)无条件的死循环,比如使用while(x),等待电平变化,正常情况下x都会变成0,怕万一,因此加上时间限制。
(5)看门狗没有关闭,有的单片机即使没使用看门狗开机时也有可能意外自动开启了小周期的看门狗,导致软件不断复位,造成死机。这个要看芯片手册,在程序复位后首先应该显式清除看门狗再关闭看门狗。
(6)堆栈溢出,很难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定可以了。
通过翊杰小编为大家整理的这些问题,是否找出了问题的所在呢?如果没有,没关系,如果没有找到,本篇文章也能帮助大家在一定程度上预防跑飞现象的发生。还有其他单片机文章分享《什么才是单片机?单片机又在哪里运用?》《新推新唐NuMaker-NUC980-IIoT开发平台》