在编写单片机程序的时候 , 由于中断服务程序写的不好 , 导致单片机程序总是跑飞 , 最后费了好长时间 , 花了很大功夫才找到问题原因 , 由此总结了单片机程序跑飞的三种现象、原因及解决方法 。
1数组越界/溢出
现象:
单片机程序在函数中运行时 , 总是在运行到函数末尾 , 要跳出函数时 , 程序跑飞 。
原因:
【单片机|单片机程序又跑飞? ! 三种跑飞现象分析】数组越界(数组溢出) , 函数中定义的数组元素的个数小于程序中实际使用的数组元素的个数 , 例如在函数中定义了一个数组ucDataBuff[10
, 这个数组只有10个元素 , 但是在函数中却有这样的语句ucDataBuff[10
=0x1a这个语句是给数组的第11个元素赋值 , :由于定义的数组只有10个元素 , 从而导致赋值语句中不知道把0x1a放到什么地方 , 从而导致程序跑飞 。
解决方法:
如果在调试程序时 , 发现程序总是在函数执行完毕时跑飞 , 多数情况是发生了数组越界(数组溢出)的错误 , 仔细检查函数中调用的数组是否存在越界(溢出)的情况 。
2中断服务程序缺失
现象:
程序运行过程中总是跑飞 。
原因:
程序中打开了某个中断 , 但是却没有相应的中断服务程序 , 从而导致在中断发生后 , 找不到中断服务程序入口 , 从而导致程序跑飞 。
解决方法:
检查程序中是否存在打开了某个中断 , 但是没有相对应的中断服务程序 。
3看门狗复位
现象:
在执行一段较为耗费时间的程序时 , 程序跑飞 , 并且总是跳到复位位置处 。
原因:
程序中使用了看门狗 , 但是没有及时“喂狗” , 从而导致看门狗复位 , 使程序直接跳到复位位置 。
解决方法:
根据程序运行时间 , 尤其是一定要计算清楚最耗时的那段程序的运行时间 , 然后准确设置看门狗的复位时长 , 定时“喂狗” , 尤其是如果有死循环的情况 , 一定要在死循环中记得“喂狗” 。
声明:本文转载自网络 , 如涉及作品内容、版权和其它问题 , 请于联系工作人员 , 我们将在第一时间和您对接删除处理!
- 单片机|分享两种单片机编程思想
- 微软|微软Windows 11商店大变样,摒弃更新自动关闭程序,你爱了吗?
- 芯片|程序员年龄增大后的职业出路是什么?德国和我国的差距是什么?
- 程序员|「真实的码农」工作 2-3 年应该是什么状态?
- 程序员|还在手动筛选数据?试试filter这个数组函数,真香!
- 芯片|程序员一句话,穷则思变,你穷就要反思自己穷的原因
- 编程|不会编程也能亲手编写一个桌面数字小时钟程序,仅需3步教你轻松实现,人人都可学
- 程序员|程序员月薪4万以上,年薪百万是常态,可为何还担忧不满呢?
- 机器|Java程序员应知应会,为什么现在我们不用Servlet了?
- 相机|为什么西方的程序员不加班?