打印
[技术相关]

单片机程序跑飞的现象、原因以及解决方法

[复制链接]
971|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
robertesth|  楼主 | 2023-8-30 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机程序跑飞的三种现象、原因及解决方法。
一、数组越界(数组溢出)
现象:单片机程序在函数中运行时,总是在运行到函数末尾,要跳出函数时,程序跑飞。
原因:数组越界(数组溢出),函数中定义的数组元素的个数小于程序中实际使用的数组元素的个数,例如在函数中定义了一个数组ucDataBuff[10],这个数组只有10个元素,但是在函数中却有这样的语句ucDataBuff[10]=0x1a,这个语句是给数组的第11个元素赋值,:由于定义的数组只有10个元素,从而导致赋值语句中不知道把0x1a放到什么地方,从而导致程序跑飞。
解决方法:如果在调试程序时,发现程序总是在函数执行完毕时跑飞,多数情况是发生了数组越界(数组溢出)的错误,仔细检查函数中调用的数组是否存在越界(溢出)的情况。
二、中断服务程序缺失
现象:程序运行过程中总是跑飞。
原因:程序中打开了某个中断,但是却没有相应的中断服务程序,从而导致在中断发生后,找不到中断服务程序入口,从而导致程序跑飞。
解决方法:检查程序中是否存在打开了某个中断,但是没有相对应的中断服务程序。
三:看门狗复位
现象:在执行一段较为好费时间的程序时,程序跑飞,并且总是跳到复位位置处。
原因:程序中使用了看门狗,但是没有及时“喂狗”,从而导致看门狗复位,使程序直接跳到复位位置。
解决方法:根据程序运行时间,尤其是一定要计算清楚最耗时的那段程序的运行时间,然后准确设置看门狗的复位时长,定时“喂狗”,尤其是如果有死循环的情况,一定要在死循环中记得“喂狗”。


使用特权

评论回复

相关帖子

沙发
华芯微特FAE| | 2023-9-11 11:44 | 只看该作者
目前好多MCU型号有ISP(BOOT功能),在调试验证产品时,有时遇到程序跑飞不工作的情况时,可以使用把ISP引脚接到高电平,然后使用华芯微特的上位机,接好对应的预置串口,把程序擦除掉,再重新烧录正确的软件。或用Hardfault分析工具定位分析。

使用特权

评论回复
板凳
tpgf| | 2023-10-7 14:34 | 只看该作者
看门狗使用不好的话 确实是反而容易使程序跑飞

使用特权

评论回复
地板
nawu| | 2023-10-7 15:54 | 只看该作者
中断服务程序缺少会不会报错呢

使用特权

评论回复
5
aoyi| | 2023-10-7 16:56 | 只看该作者
数组越界的话可以提前进行判定吗?

使用特权

评论回复
6
zljiu| | 2023-10-7 17:27 | 只看该作者
如何提前预防中断服务程序缺失呢

使用特权

评论回复
7
1564564| | 2023-10-8 16:26 | 只看该作者
我现在的是偶尔会出现一次中断没用的情况,重新上电就好了

使用特权

评论回复
8
gwsan| | 2023-10-9 14:43 | 只看该作者
如果是干扰导致单片机跑飞的话 如何避免呢

使用特权

评论回复
9
tfqi| | 2023-10-9 15:15 | 只看该作者
gwsan 发表于 2023-10-9 14:43
如果是干扰导致单片机跑飞的话 如何避免呢

感觉这种情况通过单纯的编程已经无法避免了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

1147

帖子

0

粉丝