1. 单片机跑飞的原因有哪些硬件的、软件的、以及怎样防止这种事情的发生
单片机跑飞的原因很多,硬件的软件的都有:
1、硬件原因:电源不稳,纹波很大,浪涌很多都可能造成;电磁干扰过强也很容易造成;强弱电线缆混杂在一起很容易造成等待。
2、软件原因:压栈和出栈不等造成;主程序没有循环等待。
2. 怎么我的单片机程序老跑飞(STC的)而且跑飞后再写也写不进去。
1、你好我想问你知道跑飞的意思吗,程序跑飞一般是指PC指针不按照你的程序思路去指向了,比如你退出中断的时候应该回到之前的那个压栈PC处却没有,这样的现象我们认为程序跑飞。
2、对于程序跑飞一般我们采用看门狗的方式来让程序复位,防止程序跑飞造成严重后果。
3、看不到现象不一定是跑飞,不过STC这类片子没有仿真器支持的吧一般,如果是AVR或者PIC或者430用仿真器看看PC就知道了。
4、可以将某个口的输出特征电平,用于检测程序是否跑飞,运行后检测该口的电平是否有差异即可。
5、程序跑飞了是可以在写入的,除非是芯片损坏了,是不是电源或者复位电平等导致芯片挂了,所以你认为是程序跑了一遍就挂掉了。
6、打好基础,搞清楚细节问题,对你很有帮助,比如看门狗如何使用等这类问题,编程谁都会的,外面一大把都是。什么高中毕业,大专生,就连现在本科生都去抢单片机的饭碗,搞不懂。
7、系统的学习,不要只看到片面的东西,学会自己的一套分析问题的方式。
8、打字很累,有时间hi我
3. 单片机程序老跑飞怎么回事
1、程序本身设计错误。
2、硬件设计问题。
3、干扰信号过大。
如读入开关量的信号,要在信号的最佳稳定期内读入数据,就要花费不少调试时间的。
4. 单片机跑飞详解
单片机程序死机,跑飞了可以从以下几个方面查找原因:
1. 意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象。
2. 中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。
3. 地址溢出,常见错误为指针操作错误。我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。
4. 无条件的死循环;比如使用while(x);等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制。
5. 看门狗没有关闭。有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机,这个要看芯片手册,最好在程序复位后首先应该显式清除看门狗再关闭看门狗。
6. 堆栈溢出。最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。
5. 单片机程序跑飞怎么去查找原因呢
对于简单的错误,如果能初步猜测到执行哪个函数后跑飞的,那就可以直接单步调试,看看什么原因,不外乎指针非法操作,数组越界之类的。
还有一种笨方法,注释函数,如果注释函数后bug不再现,那么就可以按照刚刚说的单步进去这个函数,看看有什么问题。
更有效的但是也对水平要求更高的方法可以看一下别人的方法。
下面是几个链接,可以看看,学习一下。
记一次STM32中HardFault问题的调试解决
如何找到导致程序出现HardFault
STM32硬件错误HardFault_Handler的处理方
定位产生HARD FAULT之前的代码
6. 负载中电流增大 单片机跑飞,这是什么原因
每当电机的转矩增大的时候,单片机就要跑飞,:原因是电源供电不足,你的电源是可供几安的?选 一个大功耗的电源。,不好意思,上次答案没有看清楚题目.:::都说的这么明白了,电机两端一定要并联电容,104,103都可以,我做了这么多年开发,没有发现电机两端不能并联接电容的,电机两端一定要并联电容,这是必须的,没条件可谈的.如果连电机两端并联电容都不会,你就请教电子工程 师吧。如果你明白电机,电磁干扰,跑飞正常,电机两端接个电容便可以了,电机两端一定要加一个104电容,是滤掉电磁火花产生的干扰,楼下的说不加电容,想必是水平肤浅,误人子弟而已 。另外,如果还不行,将给电机的电源与单片机的电源分开成两组,单片机的电源前面加一个稳压电路。 注意:103,104就是电容值的大小,如果不明白104,就上网查是多少。
7. 单片机程序飞掉的原因
1.外围干扰(EMI等)
2.电压波动(电源电压不稳定)
3.如果有内部看门狗,要正确设置或是不用.
4.产生中断一定要有正确的返回指令,否则程序也不知道会飞到哪里去.
5.温湿度也有可能引起这种情况.
8. Q3:单片机在断电后又及时上电,为什么程序会跑飞
你说的是类似于尖峰电压干扰,此时电压会发生变化,但又不足以让单片机复位,但会引起单片机的部分寄存器值的变化,单片机寄存器就如电脑的内存一样,其值发生变化,程序状态就会发生变化,从而引起程序跑飞。
9. 请问软件上什么因素会导致单片机跑飞忽略硬件因素。
其实 不一定是 程序 跑飞,单片机运行程序 本身 会跳来跳去的,如执行 子程序、子程序返回,
中断程序、中断返回 等等,
如果 程序 没有按照 预期的 设计思路走,因素很多,
程序编译时keil没有报错,只要语法正确就能通过,
有经验的编程人员也会碰到 想象不到的问题的,
有问题 只能 反复查看程序。
10. 标题单片机使程序跑飞或进入死循环,如何利用看门狗摆脱困境
可采用看门狗定时器。
工作原理如下:“看门狗”技术就是使用一个“看门狗”定时器来对系统时钟不断计数,监视程序的运行。当看门狗定时器启动运行后,为防止看门狗定时器的不必要溢出而引起单片机的非正常的复位,应定期地把看门狗定时器清0,以保证看门狗定时器不溢出。当由于干扰,使单片机程序“跑飞”或陷入“死循环”时,单片机也就不能正常运行程序来定时地把看门狗定时器清0,当看门狗定时器计满溢出时,将在AT89S52的RST引脚上输出一个正脉冲(宽度为98个时钟周期),使单片机复位,在系统的复位入口0000H处重新开始执行主程序,从而使程序摆脱“跑飞”或“死循环”状态,让单片机归复于正常的工作状态。