单片机程序死机跑飞原因分析
- 格式:pdf
- 大小:133.42 KB
- 文档页数:2
单片机常见故障及处理单片机是一种重要的电子元件,广泛应用于各种电子设备中。
然而,由于各种原因,单片机常常会出现故障。
本文将介绍单片机常见的故障及处理方法,以帮助读者更好地理解和解决单片机故障。
一、单片机无法正常启动当单片机无法正常启动时,首先需要检查供电电源是否正常工作。
可以通过使用示波器测量电源电压波形,或者使用数字万用表测量电压值。
如果供电电源正常,那么可能是由于单片机本身的问题导致无法启动。
这时,可以尝试重烧单片机程序,或者更换单片机芯片。
二、单片机工作异常单片机在工作过程中,有时会出现异常现象,如程序死机、卡顿、无法执行某些功能等。
这些问题通常是由于程序错误导致的。
处理方法可以分为软件和硬件两个方面。
在软件方面,可以通过调试程序代码、优化算法、增加错误处理机制等方法解决问题。
在硬件方面,可以检查电路连接是否良好,频率和波特率设置是否正确,外围器件是否与单片机正常通信等。
三、单片机无法正常通信单片机在与其他外设或传感器进行通信时,有时会出现通信失败的情况。
这可能是由于通信电路故障、通信协议设置错误、外设供电不足等原因引起的。
处理方法可以分为硬件和软件两个方面。
在硬件方面,需要检查通信电路连接是否正确、电源是否稳定、通信电缆是否损坏等。
在软件方面,需要检查通信协议设置是否正确、通信代码是否优化等。
四、单片机芯片损坏单片机芯片损坏是一种常见的故障。
这可能是由于静电击穿、电压过高、温度过高等原因引起的。
一旦单片机芯片损坏,一般无法修复,只能更换芯片。
为了避免单片机芯片损坏,应当采取防静电措施,避免过高的电压和温度对芯片造成损害。
五、单片机输入输出引脚不正常单片机的输入输出引脚在使用过程中,有时会出现信号异常、引脚失效等问题。
这可能是由于引脚连接不良、外部电路问题、程序配置错误等原因引起的。
处理方法可以通过检查引脚连接、检测外部电路、重新配置程序等解决。
六、单片机存储器故障单片机的存储器包括闪存、EEPROM等,用于存储程序和数据。
单片机上电复位一、单片机的基本概念单片机(Microcontroller Unit,MCU)是一种集成了微处理器、存储器、输入输出接口和定时计数器等功能模块于一体的微型计算机系统。
它具有体积小、功耗低、可编程性强等特点,广泛应用于工业控制、家电控制、汽车电子等领域。
二、单片机上电复位的概念单片机在上电或者复位时,会执行一些初始化操作,例如清除寄存器内容、设置时钟源等。
这个过程就叫做上电复位。
三、单片机上电复位的原因1. 程序出错:当程序出现异常情况时,可能会导致程序死循环或者跑飞等问题。
此时需要通过上电复位来重新启动程序。
2. 芯片损坏:当芯片内部出现故障或者损坏时,可能会导致芯片无法正常工作。
此时需要通过上电复位来重新初始化芯片。
3. 供电波动:当供电波动或者短暂断电时,可能会导致芯片内部状态不稳定。
此时需要通过上电复位来恢复芯片状态。
四、单片机上电复位的流程1. 上电复位信号:当单片机上电时,会产生一个上电复位信号。
这个信号会使得芯片内部的复位电路被触发,从而启动上电复位流程。
2. 清除寄存器内容:在上电复位过程中,单片机会将所有寄存器的内容清零。
这个过程可以保证芯片内部状态的正确性。
3. 设置时钟源:在上电复位过程中,单片机需要设置时钟源。
一般来说,时钟源有内部RC振荡器、外部晶体振荡器等多种选择。
4. 初始化外设模块:在上电复位过程中,单片机需要初始化外设模块。
例如UART、SPI、I2C等通信接口,ADC、DAC等模拟输入输出接口等。
五、如何避免不必要的上电复位1. 程序设计:在程序设计中应该尽可能地避免死循环、跑飞等异常情况的出现。
同时,在程序中应该加入异常处理机制,以便及时发现和处理异常情况。
2. 供电稳定性:为了避免供电波动或者短暂断电对芯片造成影响,应该采用稳定可靠的供电方案。
例如使用稳压芯片或者UPS等设备。
3. 芯片选择:在选择单片机时,应该考虑芯片的稳定性、可靠性等因素。
单片机C语言编程的常见问题分析单片机C语言编程是嵌入式系统中常用的一种程序编写方法,但在实际的编程过程中,也会存在一些常见问题。
下面我们针对这些问题做一些分析。
1. 程序卡死当程序在执行过程中卡死不动时,通常是由于程序陷入死循环或死锁。
死循环是指程序进入一个无限循环的状态,而死锁则是指多个任务或线程因为相互等待对方完成某个操作而无法向前推进。
在编写程序时,要避免这些问题的出现,一方面要对可能出现死循环的代码进行充分的测试,另一方面在使用多线程时要特别注意线程间的相互等待关系。
2. 程序不稳定或出错在实际的嵌入式系统中,由于硬件资源和环境条件的限制,程序可能会出现不稳定的现象,甚至出现运行时错误。
这种情况通常是由于程序在访问硬件资源或执行某些操作时没有正确处理异常情况所致。
在编写程序时,要充分考虑各种异常情况,并及时处理异常。
3. 硬件驱动的问题在嵌入式系统中,由于硬件资源的限制,驱动程序的编写可能会非常复杂。
如果驱动程序存在问题,可能会导致程序无法正确访问硬件资源,或访问的结果与预期不符。
在编写驱动程序时,要特别注意硬件资源的分配和使用,保证程序可以正确访问硬件资源。
4. 编译器的问题编译器是编写单片机程序的必备工具,不同的编译器可能会有不同的代码生成方式和优化策略,也可能存在一些编译器自身的BUG。
为了避免编译器问题导致的程序错误,可以采用多种编译器进行测试,或者使用经过广泛验证的编译器。
5. 调试问题在程序调试过程中,可能会出现一些问题,例如无法正常连接硬件设备,无法正确读取或写入程序,动态调试时程序出现崩溃等。
这种问题通常是由于硬件连接或调试工具设置问题所致。
在调试时,要充分了解硬件设备的特性和调试工具的使用方法,及时调整设置并进行测试,以确定问题的根源。
总之,对单片机C语言编程常见问题的分析可以帮助程序员更好地了解单片机编程的基本原则和技巧,避免程序错误和调试问题的出现,从而提高单片机程序的可靠性和稳定性。
教你如何找到导致程序跑飞的指令本节PDF文档请在下载调试嵌入式程序时,你是否遇到过程序跑飞最终导致硬件异常中断的问题?遇到这种问题是否感觉比较难定位?不知道问题出在哪里,没有办法跟踪?尤其是当别人的程序踩了自己的内存,那就只能哭了:(今天在论坛上看有同学求助这种问题,正好我还算有一点办法,就和大家分享一下。
解决办法非常非常简单,本文将以Aduc7026(ARM7内核)和LM3S8962(cortex内核,STM32也是cortex内核,同理)为例,讲讲解如何定位此种问题。
先说ARM7内核,cortex内核稍微有一点复杂,后面再说。
ARM7内核有多种工作模式,每种模式下有R0~R15以及CPSR 共17个寄存器可以使用,有关这些寄存器的细节我就不详细介绍了,详细的介绍请参考“底层工作者手册之嵌入式操作系统内核”中的2.2~2.3节,这里只介绍与本文相关的寄存器。
其中R14又叫做LR寄存器,它被用来保存函数、中断调用时的返回地址,看到了吧,它保存了“返回地址”!这不就是我们需要的么?就这么简单,发生异常中断时,LR寄存器中保存的地址附近就会有导致异常的指令。
接下来我们再先了解一下相关的知识,然后再通过一个例子构造一个指令异常,然后再反推找到产生异常的这条指令,做一个实例演练!当程序跑飞时,绝大部分情况都会触发硬件异常中断,硬件异常中断的中断服务函数在中断向量表中有定义,我们来看看ARM7的中断向量表,在keil开发环境里(以下例子是在keil环境下介绍的),这个文件一般叫startup.s,如下:Vectors: LDR PC, Reset_AddrLDR PC, Undef_AddrLDR PC, SWI_AddrLDR PC, PAbt_AddrLDR PC, DAbt_AddrNOPLDR PC, IRQ_AddrLDR PC, FIQ_AddrReset_Addr: .word Reset_HandlerUndef_Addr: .word ADI_UNDEF_Interrupt_SetupSWI_Addr: .word ADI_SWI_Interrupt_SetupPAbt_Addr: .word ADI_PABORT_Interrupt_SetupDAbt_Addr: .word ADI_DABORT_Interrupt_SetupIRQ_Addr: .word ADI_IRQ_Interrupt_SetupFIQ_Addr: .word ADI_FIQ_Interrupt_SetupARM7的中断向量表比较简单,只有7种中断,它把所有正常的中断都放到了SWI、IRQ和FIQ中了,那么本文所介绍的异常情况将会触发Undef、PAbt或者DAbt异常中断,至于是哪种就需要看具体的原因了。
单片机死机原因本文由rg_linux贡献什么情况会使单片机死机这是一个很好的探讨话题。
我觉得大概有几种情况。
一振荡器停止振荡又可以分为电源电压不稳,或者强干扰引起的振荡器停振。
二PC指针跑飞电源电压不稳或强干扰引起PC跑飞,如果看门狗不好,也会引起死机。
三设计上对长引出线的IO没有保护,静电打在IO口上引起单片机死锁,破坏了硬件逻辑功能,导致死机。
四.复位收到干扰,引起反复复位,在反复复位当中有可能会导致死机。
综上所述:设计电路时,应该注意:1.电源稳定2.IO保护3.振荡器PCB布线要注意4.复位电路设计和PCB布线5.电源,信号线干扰路径的保护,加滤波TVS等6.高速信号输出远离信号输入端,如SPI总线,I2C总线布线要远离ADC,复位,时钟等布线处,以及其他模拟前端。
一家之言,欢迎纠正电源电压的地不稳定造成电源电压瞬间负电压导致单片机故障程序不发运行我的理解:1、“跑飞”是因为程序隐患或外部干扰引起的误动作,致使PC被写入“出界”数据,跑到了RAM区,或者跑到了FLASH的空白区。
如果PC指向了RAM区,哪情况就不好说了!因为程序译码器可能得到任意译码结果。
如果PC指向了FLASH空白区,则可以事先将所有FLASH空白区填入某个你想要的数据,迫使程序译码器在这里翻译出你想要的指令,从而进行相应的处理。
在IARWorkbench中好象有在空白区填充数据的设置。
2、“死机”是指PC进入了“死循环”,或者是MCLK等于近似为零的值。
此时,要想救活MCU,非外狗不可。
*程序运行过程中,如果MCU电源出现问题(电源供电问题,或其它外部电路引起的电源扰动),比较容易出现“跑飞”现象程序跑飞应该是PC出错;软件和硬件都可能出这样的问题.死机应该是CPU根本没有运行,多是硬件方面的问题造成的,比如POR复位不成功,430比较容易出现掉电不完全后重新上电.有了看门狗就不会死机死机是指CPU的程序指针进入一个死循环,无法执行正常的程序流程。
单片机程序跑飞的三种现象、原因及解决方法今天在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象、原因及解决方法。
一、数组越界(数组溢出)现象:单片机程序在函数中运行时,总是在运行到函数末尾,要跳出函数时,程序跑飞。
原因:数组越界(数组溢出),函数中定义的数组元素的个数小于程序中实际使用的数组元素的个数,例如在函数中定义了一个数组ucDataBuff[10],这个数组只有10个元素,但是在函数中却有这样的语句ucDataBuff[10]=0x1a,这个语句是给数组的第11个元素赋值,:由于定义的数组只有10个元素,从而导致赋值语句中不知道把0x1a放到什么地方,从而导致程序跑飞。
解决方法:如果在调试程序时,发现程序总是在函数执行完毕时跑飞,多数情况是发生了数组越界(数组溢出)的错误,仔细检查函数中调用的数组是否存在越界(溢出)的情况。
二、中断服务程序缺失现象:程序运行过程中总是跑飞。
原因:程序中打开了某个中断,但是却没有相应的中断服务程序,从而导致在中断发生后,找不到中断服务程序入口,从而导致程序跑飞。
解决方法:检查程序中是否存在打开了某个中断,但是没有相对应的中断服务程序。
三:看门狗复位现象:在执行一段较为好费时间的程序时,程序跑飞,并且总是跳到复位位置处。
原因:程序中使用了看门狗,但是没有及时“喂狗”,从而导致看门狗复位,使程序直接跳到复位位置。
解决方法:根据程序运行时间,尤其是一定要计算清楚最耗时的那段程序的运行时间,然后准确设置看门狗的复位时长,定时“喂狗”,尤其是如果有死循环的情况,一定要在死循环中记得“喂狗”。
单片机技术常见问题及解决方法解析随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。
然而,由于单片机技术的复杂性和特殊性,常常会遇到一些问题。
本文将针对单片机技术常见问题进行解析,并提供解决方法。
一、程序无法正常运行当程序无法正常运行时,首先需要检查是否存在以下问题:1. 电源问题:检查电源供应是否稳定,电压是否符合要求。
如果电源电压不稳定,可以使用稳压电源或添加电容来解决。
2. 电路连接问题:检查电路连接是否正确,是否存在虚焊、短路等问题。
可以使用万用表进行测量,找出问题所在。
3. 编程问题:检查程序是否存在错误,是否与硬件连接匹配。
可以使用调试工具进行单步调试,逐行检查程序执行情况。
如果以上问题都没有解决程序无法正常运行的情况,可能是单片机本身存在问题,可以尝试更换单片机或者联系供应商进行维修。
二、IO口无法正常工作IO口无法正常工作是单片机技术中常见的问题之一。
解决方法如下:1. IO口配置错误:检查IO口的配置是否正确,包括引脚选择、工作模式、上下拉电阻等。
可以参考单片机的手册或者开发板的原理图来确认配置是否正确。
2. 外设连接问题:检查外设是否正确连接到IO口,是否存在连接错误或者虚焊现象。
可以使用示波器或者逻辑分析仪来检查信号的波形和电平。
3. 中断配置错误:如果使用了中断功能,需要检查中断的配置是否正确。
包括中断源的选择、中断优先级的设置等。
如果以上问题都没有解决IO口无法正常工作的情况,可能是单片机本身存在问题,可以尝试更换单片机或者联系供应商进行维修。
三、程序卡死或死循环程序卡死或死循环是单片机技术中常见的问题之一。
解决方法如下:1. 死循环问题:检查程序中是否存在死循环的情况,即某个循环条件无法满足导致程序一直停留在该循环中。
可以通过添加调试信息或者使用调试工具来定位问题所在。
2. 中断问题:如果使用了中断功能,需要检查中断服务程序是否正确编写,是否存在死循环的情况。
可以通过添加调试信息或者使用调试工具来定位问题所在。
单片机程序跑飞的原因
1. 电源干扰这可是个大麻烦啊!就好比你正好好走路呢,突然有人猛地撞了你一下,能不摔跟头嘛!比如说,旁边有个大电器启动或关闭,产生的电流波动就可能让单片机程序跑飞啦!
2. 外部电磁干扰也很要命啊!这就像你在安静做事的时候,旁边总有各种嘈杂的声音干扰你,能不分心嘛!像在有强磁场的环境下,单片机就可能受到影响而程序跑飞呀!
3. 硬件故障那可真是让人头疼!这不就像车子突然抛锚了一样嘛!比如晶振出问题了,单片机的节奏就乱了,程序不跑飞才怪呢!
4. 程序中的错误简直就是定时炸弹啊!你想想,你盖房子根基没打牢,那房子能稳嘛!如果程序中有逻辑错误或者死循环,那单片机肯定受不了就跑飞啦!
5. 堆栈溢出也是个大问题呀!就好像你的背包塞得太满要撑破了一样!当堆栈空间不够用了,程序可不就容易出问题跑飞咯!
6. 中断处理不当就如同一场混乱的交响乐!各种声音乱成一团!比如说中断没有及时清除,和其他程序冲突了,单片机就晕了,程序跑飞喽!
7. 温度过高或过低也不行啊!人在极端温度下还不舒服呢,单片机也一样啊!温度异常会影响它的性能,导致程序跑飞呀!
8. 时钟信号不稳定就像是心跳不规律一样危险!一旦时钟信号有问题,单片机就像没了主心骨,程序能不跑飞嘛!
9. 静电干扰也是个可恶的家伙!这就像有小虫子在你身边捣乱一样烦人!静电可能会让单片机程序突然就跑飞啦!
10. 硬件设计不合理那可就是先天不足啊!好比造房子结构有问题,能安全嘛!如果硬件设计有缺陷,单片机程序跑飞的几率就大大增加啦!
我觉得啊,这些原因都得好好注意,不然单片机程序跑飞了可就麻烦大啦!。
单片机程序死机,跑飞了可以从以下几个方面查找原因:
1.意外中断。
是否打开了某个中断,但是没有响应和**中端标志,导致程序一直进入中断,造成死机假象。
2.中断变量处理不妥。
若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。
3.地址溢出,常见错误为指针操作错误。
我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。
4.无条件的死循环。
比如使用while(x;等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制;
5.看门狗没有关闭。
有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机,这个要看芯片手册,最好在程序复位后首先应该显式**看门狗再关闭看门狗;
6.堆栈溢出。
最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。
当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。
7.大牛们补充下...。
51系列单片机程序跑飞问题探讨X孙频东(南京师范大学电气与电子工程学院,南京,210042)[摘要] 程序跑飞是由于外部干扰或内部程序编制错误引起的一种单片机运行故障.文章探讨外部干扰引起的51系列单片机程序跑飞问题的产生,程序跑飞的防犯措施及发生程序跑飞后的几种恢复正常运行的方法.[关键词] M CS 51;程序跑飞;抗干扰[中图分类号]T P 368.1; [文献标识码]B; [文章编号]1008-1925(2001)04-0031-03M CS 51系列单片机作为8位工业用控制机的代表机型,其应用领域十分广阔,工作环境的变化也十分复杂.许多51系列单片机系统工作在有较强电磁干扰或恶劣的环境下,虽然在设计时可能针对特定环境采取了一些保护措施,诸如外壳屏蔽、电磁隔离等方法,但还是较难彻底解决程序运行中可能产生的跑飞现象.因此,探讨如何防止程序运行的跑飞,以及如何使程序跑飞对整个控制系统产生的负影响达到最小是一个很有意义的工作.图1 变电所一次主接线图1 程序运行跑飞现象程序运行的跑飞现象指的是,单片机中的程序计数器(PC)的值发生了意外的变化,使其脱离了预定的程序执行位置,进入了原定程序以外的区域,如进入了程序的空白区、程序存储器以外的空间或进入了某种死循环中.程序跑飞,虽然不是一种硬件故障,但它将引起死机,使控制系统无法正常工作,其后果是十分严重的.例如,我们在研制变电所自动装置时曾遇到此类问题.变电所的一次接线图如图1所示,接通自动装置电源时装置工作正常,当改变供电方式时,即外部的低压侧由原来的1#变压器供电改为2#变压器供电,开关K 3断开,K 4闭合时,接在低压母线出线侧的自动装置中的单片机出现死机,使整个装置无法正常工作,但经复位后装置恢复正常工作.类似的问题在工业控制现场时有发生,以下从控制器设计的角度,即从软、硬件的角度,分别探讨解决程序跑飞问题的方法.2 用硬件使跑飞程序回归由于51系列单片机自身不带定时监视,即通常所说的Watchdog 功能,因此在实际使用第1卷第4期南京师大学报(工程技术版)Vol.1No.42001年JOURNAL OF NANJING NORM AL UNIVERSITY(ENGINEERING AND T ECHNOLOGY)2001X 收稿日期:2001-06-12 作者简介:孙频东,1957-,硕士,南京师范大学电气与电子工程学院副教授,主要从事应用电子方面的教学与研究.时,需外扩具有Watchdog功能的芯片.如8XC51FX可编程计数器阵列等使其具备定时监视功能,当程序运行出现跑飞时,用它来产生内部复位使程序从头开始执行,使单片机从故障状态恢复正常运行.以下介绍一种我们使用的由普通定时器构成的Watchdo g电路,如图2所图2 外置复位电路示.因为使用的是外部的振荡器、计数器、单脉冲电路,所以即使单片机内部由于某种原因出现计数混乱或由于程序跑飞引起的运行中断,都不影响对其的定时监视作用.电路的工作过程如下:从振荡器中产生的计数脉冲的频率和计数器的位数相结合,使产生的计数溢出时间正好为定时监视器的监视时间,当运行程序发生跑飞时,因计数器得不到定时的清除信号使计数器163产生进位,进位信号经123单稳电路后,转变成负脉冲使单片机复位,程序从头开始执行.3 用软件使跑飞程序回归从软件的角度使跑飞程序回归的常用办法是设置软件陷阱,受到干扰后的CPU,因其程序计数器(PC)的值被随机改变,有可能将操作数当成指令码来执行,也可能将程序存储器空余单元中的随机数当指令来执行.如果这个误码CPU不认识,程序运行将出现中断,引起死机.假如能在程序存储器中的非程序区消除误码,添入某些能使程序返回起始执行点的机器码,就能使跑飞程序回归.因此,可在程序的空白区添入LJMP#0000H,这样的指令其代码为020*********…,当PC值误入此区域时,就不会因有误码而产生程序执行中断现象,同时还能使程序返回起始地址执行.另外,在程序的各个模块之间(即RET指令之后到下一个子程序开始之前的空间)、在未用的中断向量地址处、在数据表格之后,都应该设置软件陷阱.当程序误入陷阱时能够得到合理的处理.软件陷阱处可用如下形式的指令:NOPLJMP ERROR4 冷、热启动的应用在51系列单片机上加Watchdog定时器后,如果发生程序跑飞现象,一般都能从程序存储器的0000H处重新开始程序的执行,但这不一定是最好的执行位置,有时希望能回到主循环中,跳过初始化部分或人机对话部分.因此,有必要将复位启动分成热启动和冷启动两种类型.所谓热启动就是使复位过程避开初始化过程,避开初始化过程中参数的输入及设定过程,而直接跳到程序的主循环中.热启动过程认为,初始化数据在跑飞时并未被破坏.如何判断初始化数据是否被破坏,一般可采用标识数的方法,在每个初始化数之间放入一个标识数,例如设置数55H作为标识数.复位时,检查标识数是否改变,如果未发生变化,则认为初始化数据—32—南京师大学报(工程技术版) 第1卷第4期(2001年)孙频东:51系列单片机程序跑飞问题探讨可用,程序进入热启动.热启动可以使程序跑飞现象给系统带来的影响减到最小.假如初始化数据被破坏,则系统就需要进行冷启动.冷启动时,对有些系统要解决人机对话问题,可用这样的办法来解决:在初次启动时将人机对话数据保存在内存的几个不同的区域,例如作三个备份,在程序跑飞时用表决法来决出正确的结果.当表决不出正确结果时,应转到程序出错处理,并进行声光报警,停机等待人工处理.5 程序跑飞现象的防止程序跑飞是一种控制器故障.当单片机用于信号检测、数据记录、报警等一般性场合下,不至于产生严重后果.当单片机用于控制器时,程序跑飞可能产生严重后果.因此,尽量避免单片机运行时产生程序跑飞应引起设计者的注意.主要可以从以下几个方面进行防范:(1)防止干扰从电源进入,采用高稳定性的稳压电源即可解决问题.(2)防止干扰从信号端口进入,解决方法主要有光电隔离、对模拟量施加滤波、限幅等措施.(3)防止电磁干扰,一般应从屏蔽、隔离的角度来考虑.6 结论在工业生产的现场存在着各种强弱不同的电磁、电源、信号干扰,这些都是产生程序跑飞的外在因素.如何从单片机设计的角度,来防止由于这些干扰的进入而产生的程序跑飞现象,以及在跑飞发生后如何使跑飞程序回归、回归后使其产生的影响减到最小,是一个值得探讨的问题.程序跑飞直接影响用单片机作为控制器的机电产品的性能、可靠性及安全运行.因此它也是一个必须解决的问题.在这一问题上我们作了一些初步的研究,并将其应用到了变电所监控装置中,取得了成功.[参考文献][1]骆德汉.单片机测控系统的抗干扰技术[J].电气自动化,1996,(4)[2]方大寿.8098单片机应用中的抗干扰和光电隔离[J].电气自动化,1996,(4)Study On Program Running Out of Track in MCS51SystemSu n Pin dong(College of Electrical&Electronic En gineering,Nanjing Normal University,Nanjing,210042,PRC) Abstract:Pr og r am running out o f tr uck is a serious fault,w hich is usually caused by outside disturbance o r pro gr am err or.In this paper the cause of pro gr am running out o f tr uck is discussed,t he pro blem solving methods,the schemes of avo iding fr o m pr og ra m running o ut o f tr uck and m ethods r esum e the out tr uck pro gr am ar e sug-g est ed.Key words:M CS51,pro gr am r unning out o f truck,A ntidistur bance[责任编辑:严海琳]——33。
单片机程序死机跑飞原因分析
单片机程序死机,跑飞了可以从以下几个方面查找原因:
1. 意外中断。
是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象
2. 中断变量处理不妥。
若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。
3. 地址溢出,常见错误为指针操作错误。
我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什幺头疼的事。
4. 无条件的死循环;比如使用while(x);等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制;。