在编写单片机程序的时候 , 由于中断服务程序写的不好 , 导致单片机程序总是跑飞 , 最后费了好长时间 , 花了很大功夫才找到问题原因 , 由此总结了单片机程序跑飞的三种现象、原因及解决方法 。
1数组越界/溢出
现象:
单片机程序在函数中运行时 , 总是在运行到函数末尾 , 要跳出函数时 , 程序跑飞 。
原因:
数组越界(数组溢出) , 函数中定义的数组元素的个数小于程序中实际使用的数组元素的个数 , 例如在函数中定义了一个数组ucDataBuff[10
, 这个数组只有10个元素 , 但是在函数中却有这样的语句ucDataBuff[10
=0x1a这个语句是给数组的第11个元素赋值 , :由于定义的数组只有10个元素 , 从而导致赋值语句中不知道把0x1a放到什么地方 , 从而导致程序跑飞 。
解决方法:
【追尾|单片机程序又跑飞? ! 三种跑飞现象分析】如果在调试程序时 , 发现程序总是在函数执行完毕时跑飞 , 多数情况是发生了数组越界(数组溢出)的错误 , 仔细检查函数中调用的数组是否存在越界(溢出)的情况 。
2中断服务程序缺失
现象:
程序运行过程中总是跑飞 。
原因:
程序中打开了某个中断 , 但是却没有相应的中断服务程序 , 从而导致在中断发生后 , 找不到中断服务程序入口 , 从而导致程序跑飞 。
解决方法:
检查程序中是否存在打开了某个中断 , 但是没有相对应的中断服务程序 。
3看门狗复位
现象:
在执行一段较为耗费时间的程序时 , 程序跑飞 , 并且总是跳到复位位置处 。
原因:
程序中使用了看门狗 , 但是没有及时“喂狗” , 从而导致看门狗复位 , 使程序直接跳到复位位置 。
解决方法:
根据程序运行时间 , 尤其是一定要计算清楚最耗时的那段程序的运行时间 , 然后准确设置看门狗的复位时长 , 定时“喂狗” , 尤其是如果有死循环的情况 , 一定要在死循环中记得“喂狗” 。
声明:本文转载自网络 , 如涉及作品内容、版权和其它问题 , 请于联系工作人员 , 我们将在第一时间和您对接删除处理!
- 程序员|「真实的码农」工作 2-3 年应该是什么状态?
- 程序员|还在手动筛选数据?试试filter这个数组函数,真香!
- 苹果|程序员专用笔记本上市:放弃Win11 拥抱Linux
- 程序员|跨境电商三箭齐发,2022中国品牌出海如何破局?预见·未来风向,品牌出海线上峰会圆满落幕
- 钛媒体|如何通过小程序商城的精准营销来提升用户留存率?
- 程序员|为什么大家都觉得前端自学比培训好?
- 顶级程序员的标配?江苏女子买假发送老公,网友看后沉默了
- 数据库|高薪程序员必备知识:图数据库
- MySQL|程序员一句话,穷则思变,你穷就要反思自己穷的原因
- 美团买菜|广州蓝景技术分享——程序员就业需要必备的3个“软技能”