历史上的今天
返回首页

历史上的今天

今天是:2026年02月02日(星期一)

正在发生

2023年02月02日 | 单片机程序又跑飞?! 三种跑飞现象分析

2023-02-02 来源:zhihu

在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象、原因及解决方法。


1 数组越界/溢出

现象:

单片机程序在函数中运行时,总是在运行到函数末尾,要跳出函数时,程序跑飞。

原因:

数组越界(数组溢出),函数中定义的数组元素的个数小于程序中实际使用的数组元素的个数,例如在函数中定义了一个数组ucDataBuff[10],这个数组只有10个元素,但是在函数中却有这样的语句ucDataBuff[10]=0x1a,这个语句是给数组的第11个元素赋值,:由于定义的数组只有10个元素,从而导致赋值语句中不知道把0x1a放到什么地方,从而导致程序跑飞。

解决方法:

如果在调试程序时,发现程序总是在函数执行完毕时跑飞,多数情况是发生了数组越界(数组溢出)的错误,仔细检查函数中调用的数组是否存在越界(溢出)的情况。


2 中断服务程序缺失

现象:

程序运行过程中总是跑飞。

原因:

程序中打开了某个中断,但是却没有相应的中断服务程序,从而导致在中断发生后,找不到中断服务程序入口,从而导致程序跑飞。

解决方法:

检查程序中是否存在打开了某个中断,但是没有相对应的中断服务程序。


3 看门狗复位

现象:

在执行一段较为耗费时间的程序时,程序跑飞,并且总是跳到复位位置处。

原因:

程序中使用了看门狗,但是没有及时“喂狗”,从而导致看门狗复位,使程序直接跳到复位位置。

解决方法:

根据程序运行时间,尤其是一定要计算清楚最耗时的那段程序的运行时间,然后准确设置看门狗的复位时长,定时“喂狗”,尤其是如果有死循环的情况,一定要在死循环中记得“喂狗”。


推荐阅读

史海拾趣

Dae Ryung Electronic Co Ltd公司的发展小趣事

随着技术实力的增强,Dae Ryung Electronic Co Ltd公司开始积极拓展市场。公司制定了国际化战略,逐步进入国际市场。通过参加国际展会、与海外企业建立合作关系等方式,公司成功打开了海外市场的大门。同时,公司还针对不同地区的市场需求,推出定制化的产品和服务,进一步提升了市场竞争力。

Elcos AG公司的发展小趣事

随着公司规模的扩大和业务的增长,Elcos AG面临着供应链管理的挑战。为了降低成本、提高效率和保证产品质量,公司决定对供应链进行优化。通过引入先进的供应链管理软件、加强与供应商的合作和建立严格的质量控制体系等措施,Elcos AG成功实现了供应链的优化和升级。这不仅提高了公司的运营效率和市场竞争力,还为客户提供了更加稳定可靠的产品和服务。

FCT electronic公司的发展小趣事

FCT electronic公司始终坚持以客户需求为导向的服务理念。为了更好地满足客户的需求,公司不断推出新的服务模式和解决方案。例如,公司推出了定制化服务,根据客户的具体需求提供个性化的电路板解决方案;同时,FCT electronic公司还加强了售后服务体系建设,确保客户在使用过程中能够得到及时、专业的技术支持和服务。这些创新的服务模式使FCT electronic公司在客户中赢得了良好的口碑和信任。

Boundary Devices公司的发展小趣事

为了进一步扩大市场份额,Boundary Devices积极实施国际化战略。公司通过与全球各地的合作伙伴建立合作关系,将产品推向国际市场。同时,公司还积极参加国际电子展会和技术交流活动,与全球同行进行深入的交流与合作,不断提升公司的国际影响力。

上海如韵(CONSONANCE)公司的发展小趣事

随着市场需求的不断变化,如韵意识到技术创新是企业持续发展的关键。因此,公司投入大量资源进行产品研发和技术升级。其中,一次重要的技术突破让如韵在行业内声名鹊起。

当时,市场上的某种电子元器件存在性能不稳定的问题,给许多电子设备制造商带来了困扰。如韵的研发团队经过深入研究,成功开发出了一种新型电子元器件,不仅性能稳定可靠,而且成本更低。这一创新产品迅速占领了市场份额,成为公司的明星产品,也为如韵带来了丰厚的经济回报。

Hi-Tron Semiconductor Corp公司的发展小趣事

随着电子行业的快速发展,市场竞争日益激烈。为了应对这一挑战,如韵不断调整和优化产品线,加强与国际知名企业的合作,引进先进的技术和设备。同时,公司加大了对研发团队的投入,鼓励员工进行创新实践和技术交流。

在面对行业内的价格战和恶性竞争时,如韵始终坚持产品质量和客户满意度为首要原则。通过不断提升产品质量和服务水平,如韵赢得了客户的信任和口碑。即使在行业面临困境的时期,如韵也凭借着强大的技术实力和良好的市场口碑保持了稳健的发展态势。

问答坊 | AI 解惑

请教关于IIC接口

这两天用VHDL语言编写了一个IIC控制程序,读写EEPROM AT24C02,读写时序是满足AT24C02和IIC规范的,但是始终读不出来正确的数据,下面是我的读写时序图,希望做过的朋友指点一下! 注:只有WR=1时sda…

查看全部问答>

嵌入式Linux操作系统学习规划

最近发现了一个文章,供大家参考: 嵌入式Linux操作系统学习规划 ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2) 必须掌握一个嵌入式操作系统 (初步定为 ...…

查看全部问答>

新接触到的问题(暂时无头绪。。。)

前段时间,我用Keil编写了一个密码键盘的程序,并利用伟福仿真器将程序烧进单片机内(我自己制作的一个密码键盘的板子)。但是老师现在要我用VC6.0作一个虚拟键盘的界面,想实现的功能是:我在硬件上按下按键,虚拟键盘上相应的按键有一定的反应, ...…

查看全部问答>

请教,如何在wince环境下编译openssl?

    哪位高人,在wince环境下编译过openssl,请赐教下。…

查看全部问答>

关于小弟的毕业设计遇到了困难,急求各位高手的帮助。

本人现在设计一个基于80C51单片机的信号发生器,要求能够输出方波,正弦波及幅值可调,范围在(—10至+10)。我已经知道在单片机外接一个DA0832就可以输出波形,但如何使幅值的范围在(—10至+10)需要再外接一个DA0832,我查了相关书籍没有类似的 ...…

查看全部问答>

在windows2000下如何区分USB audio device

我的USB audio 设备在XP下可以正确地显示出USB device name ,但是在windows2000下却显示成USB Audio Device XX . 而且别的USB audio 设备在windows2000下也显示成USB audio device XX .   那请问怎么区分我的USB audio 设备呢?我用waveI ...…

查看全部问答>

AVR STUDIO模拟ATMEGA16的TWI遇到问题,求高手赐教

用ICCAVR编译后,把COF文件调入AVR STUDIO进行模拟  发现程序进行到语句:twi_wait()          {while(!(TWCR&(1<<TWINT)));}    的时候就进行不下去了, 这个语句是等 ...…

查看全部问答>

CC2530晶振不起振

我对着TI的参考设计焊接了2块CC2530.但是 32M 与32.768K的晶振都没有波形, 32.768K晶振的电平为3.3V ,32M的晶振电平为0.1V 不知道什么原因? 我查过器件的位置都没有焊错,晶振、负载电容应该也没问题。因为有一次32M的晶振出现了正确的波形 ...…

查看全部问答>

launchpad的I2C总线问题【串口通信液晶】

我想用串行通信的液晶,以前用的诺基亚5110能否改为串口通信!!!???如果不能的话,大家能不能给推荐一个比较好用的串口通信的液晶。都是因为launchpad的IO口太少的原因啊!!!!…

查看全部问答>

2812图像处理有问题,求大神解决

1:怎么将图像RGB的一个XY【i】【j】表格转换成灰度的 2:怎么将图像RGB的一个XY【i】【j】表格中的圆识别出圆心和半径来 3:一张靶子的图片,已采集了背景数据,已采集了帧数据,已通过相减得到了靶子上激光点的位置。怎么识别出靶的圆心和激光 ...…

查看全部问答>