设计与开发

单片机没反应了 单片机为什么会“死机”?看门狗来帮助你

小编 2024-10-31 设计与开发 23 0

单片机为什么会“死机”?看门狗来帮助你

我玩单片机的过程中大大小小肯定都会遇到一些问题,不遇到问题是不可能的,出现问题肯定是板子某一个部分出了问题;单片机出现死机的情况也分为很多种,电压的地不稳定、元器件干扰、短路、断路等都会导致单片机故障程序无法运行。下面几种现象都是会造成单片机出问题的故障。

1.出现“跑飞”这种情况是因为程序有一定的隐患或被外部元器件干扰造成的错误动作,导致单片机被写入“出界”数据,程序跑到了RAM区或者跑到了FLASH的空白区。如果PC指向了FLASH空白区,则可以事先将所有FLASH空白区填入某个你想要的数据,迫使程序译码器在这里翻译出你想要的指令,按照我们想要的方式去处理。如果单片机指向了RAM区,那情况就会不一样;因为程序译码器可能得到任意译码结果。

2.“死机”是指单片机进入了“死循环”,或者是MCLK等于近似为零的值。此时,要想救活MCU,就只有复位。这时我们就需要用看门狗了,看门狗的作用是:当程序在某种意外情况下,这时就没办法去”喂狗“,一旦持续某个门槛时间(比如20ms)还没有”喂狗“,那么看门狗就把单片机复位。

程序运行过程中,如果MCU电源出现问题(电源供电问题,或其它外部电路引起的电源扰动),比较容易出现“跑飞”现象。程序跑飞应该是单片机出错了;软件和硬件都可能出这样的问题。

死机一般情况下是CPU根本没有运行,很大的概率是硬件方面的问题造成的,如果复位不成功,430比较容易出现掉电不完全后重新上电。

死机我们通常是指CPU的程序指针进入一个死循环,无法按照我们编入的逻辑执行正常的程序流程。我们直接观察到的现象是:正常功能丧失,按键无反应,显示进入定格状态。单片机死机后,只有复位才能走出死循环,执行正常的程序流程。玩单片机的都知道解决死机的最有效手段是加看门狗(WatchDog)。

目前用得最广泛的看门狗实际上是一个特殊的定时器DogTimer。DogTimer按固定速率计时,计满预定时间就发出溢出脉冲使单片机复位。如果每次在DogTimer溢出前强行让DogTimer清零,就不会发出溢出脉冲。清零脉冲由CPU发出,在单片机程序中每隔一段语句放一个清DogTimer的语句--FeedDog语句,以保证程序正常运行时DogTimer不会溢出。

不是说加了看门狗,单片机就不会死机具体要看你怎么去用。实际上,看门狗有时间会完全失效。当程序进入某个死循环,而这个死循环中又包含FeedDog语句,这时DogTimer始终不会溢出,单片机始终得不到复位信号,程序也就始终跳不出这个死循环。

双时限看门狗有两个定时器;一个为短定时器,一个为长定时器。短定时器定时为T1,长定时器定时为T2,0。当程序进入某个死循环,如果这个死循环包含短定时器FeedDog语句而不包含长定时器FeedDog语句,那么长定时顺终将溢出,使单片机复位。通过编写程序安排长定时器FeedDog语句的位置,可保证出现死机的概率很低。

定时复位看门狗就是定时地让单片机强行复位。这样,即使装置死机,其最大死机时间也不会大于定时器定时时间。只要硬件没有出现问题,看门狗就可以保证单片机不会长时间死机。

希望以上的知识能够给大家提供帮助,这期我们先分享到这里,觉得有用的可以给华维点个赞关注一下!

想要一起学习单片机的朋友,评论”我要入门“,有惊喜,加入我们,就可以与导师一对一互动,快速成长

单片机程序死机,跑飞了可能是因为这几个方面的原因

1、意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象;

2、中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。

3、地址溢出,常见错误为指针操作错误。我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。

4、无条件的死循环;比如使用while(x);等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制;

5、看门狗没有关闭。有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机,这个要看芯片手册,最好在程序复位后首先应该显式清除看门狗再关闭看门狗;

6、堆栈溢出。最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。

相关问答

单片机 忽然就烧录不进去了。。。-ZOL问答

第一:检查晶振等(就是单片机本身的电路是否可靠)。第二:是否在打开STC-ISP软件...如果无论换什么串口线都电脑都没有反应的话,那可能就是系统问题了,盗版系统很...

为啥 单片机 下载程序了却不能运行啊?

单片机下载程序后不能运行的原因可能有很多种,其中可能包括程序的bug、硬件电路错误、单片机芯片选错或是单片机损坏等。此时,可以先检查程序是否有明显逻辑...

为什么自己设计不出来 单片机 程序?该怎么做?

设计编写单片机程序是一个渐进的过程不可一蹴而就,毕竟单片机程序是与硬件有密切关系的,我们一般称为单片机程序叫底层硬件驱动程序。编写程序不但要对软件要熟...

单片机 无法安装驱动程序是怎么回事-ZOL问答

与51单片机无关,这是USB-RS232线的问题,可能线有问题,所以插上没反应,单片机端加电试试。驱动问题,从驱动之家下载个软件,自动识别一下.驱动问题哦.3条回答:...

单片机 矩阵键盘最后一列没有 反应 ?

关机以后重启试试,或者没有相应的操作关机以后重启试试,或者没有相应的操作

stc-isp串口助手不 反应 ?

STC51单片机通过串口ISP方式烧录程序,用这种烧录方式,单片机必须是上电冷启动,这是STC单片机的设计使然。烧录程序时,下载软件老是显示“正在检查目标单片机...

51 单片机 为什么自己会中断?

51单片机之所以会自己中断,是因为它内部集成了中断控制器。中断是一种机制,允许外部设备或内部事件打断正常的程序执行流程,优先处理紧急或重要的任务。当外...

单片机 不响应中断的条件?

关于这个问题,单片机不响应中断的条件包括:1.中断未使能:当中断源触发中断请求时,如果该中断源的中断使能位没有被设置,则单片机不会响应该中断。2.中断...

proteus仿真晶振为啥 没反应 ?

Proteus的强项是单片机仿真,电子电路尤其是振荡电路,是弱项。PROTEUS中不光晶振电路不易起振,而且RC、LC振荡电路也不易起振。问题在Proteus不适合做振荡,干...

单片机 填空求助1.MCS-51系列单片机为()位单片机.2.8051单片...

[最佳回答]1.MCS-51系列单片机为(8)位单片机.2.8051单片机有两种复位方式,既上电复位和手动复位.复位后SP=(07H),PC=(0000H),PSW=(00H),P0=(F...

猜你喜欢