常常触摸单片机的朋友,必定遇到过单片机程序跑飞的问题。因为程序较为杂乱,所以一旦呈现跑飞的现象就比较难以查找过错呈现的当地,网络上对过错的解说和解决方法也比较形形色色,并不便利查找。小编特意帮我们整理了关于单片机程序跑飞死机的原因,我们快来看看能不能在其中找到自己想要答案吧。
单片机程序死机,跑飞了能够从以下几个方面查找原因:
1. 意外中止。
是否翻开了某个中止,可是没有响应和铲除中端标志,导致程序一向进入中止,形成死机假象。
2. 中止变量处理不当。
若界说某些会在中止中修正的大局变量,这时要注意两个问题:首要为了避免编译器优化中止变量,要在这些变量界说时前加volatile,其次在主循环中读取中止变量前应该首要封闭大局中止,避免读到一半被中止给修正了,读完之后再翻开大局中止;不然呈现形成数据凌乱。
3. 地址溢出,常见过错为指针操作过错。
我要侧重说的是数组下标运用循环函数中循环变量,假如循环变量没操控好则会呈现数组下标越界,意外修正体系的寄存器形成死机,这种情况下假如死机阐明命运好,不然后边不知道产生什么头疼的事。
4. 无条件的死循环。
比方运用while(x);等候电平改变,正常情况下x都会变成0,就怕如果,因而最好加上时刻约束。
5. 看门狗没有封闭。
有的单片机即便没运用看门狗开机时也有或许意外主动敞开了最小周期的看门狗,导致软件不断复位,形成死机,这个要看芯片手册,最好在程序复位后首要应该显式铲除看门狗再封闭看门狗。
6. 仓库溢出。
最难查找的问题,关于容量小的单片机,尽量削减函数调用层级,削减局部变量,然后削减压栈的时分所需的空间。当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的当地而且把占用RAM大的局部变量改成大局变量,试一试说不定就能够了。
经过本篇文章,我们是否找到了自己想要的问题解决方法了呢?就算没有找到,本篇文章也能协助我们在必定程度上防备跑飞现象的产生。