① stc单片机容易跑飞
stc芯片本身不稳定,抗干扰能力极差!stc单片机不能用于工控。跑飞原因有几个
1 看看有没有堆栈溢出
2程序储存段有没有越界。
3电源电压不稳,加大电源滤波电容加一个5伏稳压二极管
4io口是否受到外界干扰最好加光耦隔离
5如果自动复位,复位引脚不用时接上拉电阻到5伏,同时引脚加个对地电容
6板子地线要接地
② 单片机程序老是跑飞怎么回事
最常见的是堆栈溢出,
你用操作系统没?
你操作堆栈没?
你用了汇编没?
你的函数/中断 调用进入死循环没?
你的提问 跑飞并没有明确说明现象。所以一般人很难回答
③ 什么叫单片机的程序“跑飞”
程序本来是按设定运行的,如你编的程序在存储器中的地址是0-1000,由于某种原因
(干
扰或程序漏洞),程序运行在了1000之后的区域,就
是程序“跑飞”
这里面可不是你要的代码,根你设定的运行过程毫无关系,也许只有运行完了(程序计数器加到
最大值后自动清0),才能回到程序的开头,也许死在某个地方,永远回不来了
这时如果有看门狗,就可以复位或回到你程序设定的某个地方
④ 单片机程序跑飞怎么去查找原因呢
对于简单的错误,如果能初步猜测到执行哪个函数后跑飞的,那就可以直接单步调试,看看什么原因,不外乎指针非法操作,数组越界之类的。
还有一种笨方法,注释函数,如果注释函数后bug不再现,那么就可以按照刚刚说的单步进去这个函数,看看有什么问题。
更有效的但是也对水平要求更高的方法可以看一下别人的方法。
下面是几个链接,可以看看,学习一下。
记一次STM32中HardFault问题的调试解决
如何找到导致程序出现HardFault
STM32硬件错误HardFault_Handler的处理方
定位产生HARD FAULT之前的代码
⑤ 单片机跑飞了,怎么解决
设计一个“看门狗”,或者设计一些能够让程序在出错时回归正常的错误应急机制——“软件陷阱”,这些都是要依你自己的程序的功能而设计,所以还是自己多想多试试的好,一来可以积累经验,二来可以提高自己编程的能力,三来可以提高自己分析和解决问题的能力。何乐而不为呢!?
⑥ 51单片机程序跑飞什么意思怎么解决
程序跑飞就是程序执行错误,程序不知道运行到哪里,这就需要设定标志位,寻找跑飞的地方,再改
⑦ 单片机跑飞的原因有哪些硬件的、软件的、以及怎样防止这种事情的发生
单片机跑飞的原因很多,硬件的软件的都有:
1、硬件原因:电源不稳,纹波很大,浪涌很多都可能造成;电磁干扰过强也很容易造成;强弱电线缆混杂在一起很容易造成等待。
2、软件原因:压栈和出栈不等造成;主程序没有循环等待。
⑧ 单片机程序跑飞了,大家有什么好办法没
单片机使用隔离电源供电,继电器控制端使用光耦隔离,光耦的电源也要使用隔离电源供电。 就用当前的电源,,可以在光耦的电源上串入22uH的电感,单片机VCC与GND之间接入尽可能大的电容,同时增加0.01-0.1uF的涤纶电容,单片机电源和地也串入棒感。单片机控制继电器的引脚串接22欧左右的电阻。光耦电源隔离一般用DC/DC,隔离度高,体积小,只是会增加点成本。用看门狗的话启动复位会让RAM区的数据丢失。是这样的吗。是的,除非你把数据写到单片机外的存储器中,如24C02之类的。
⑨ 单片机跑飞详解
单片机程序死机,跑飞了可以从以下几个方面查找原因:
1. 意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象。
2. 中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。
3. 地址溢出,常见错误为指针操作错误。我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。
4. 无条件的死循环;比如使用while(x);等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制。
5. 看门狗没有关闭。有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机,这个要看芯片手册,最好在程序复位后首先应该显式清除看门狗再关闭看门狗。
6. 堆栈溢出。最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。