前言

在嵌入式软件开发中,程序跑飞是一个比较棘手的问题。为什么说棘手,那是因为当程序跑飞时,往往没有任何错误信息报出来,Log停止的地方通常也不是出现问题的地方,因此这让我们很难定位问题。
基于以上原因,我将嵌入式开发中一些常见的程序跑飞原因以及相关解决方案记录在这篇博客下。

程序跑飞的原因与相关解决方案

1. 栈溢出
说明:这可能是最常见的问题了,往往是因为我们定义了较大的局部变量,使得栈空间不够了。
解决方案:使用static关键字或者将局部变量定义为全局变量。

2. 访问了不该访问的内存
说明:这个问题也是比较常见的,通常由于指针使用不当造成的。
解决方案:这个我也没啥办法,只能仔细检查一下代码中的指针了。

3. 程序运行时,将内存中重要的数据覆盖了
说明:这个问题遇到的比较少。如果往错误的地址写了数据,导致重要数据被覆盖,程序自然跑不起来了。
解决方案:这个一般也与指针使用不当有关,还是好好检查指针的使用吧。

4. 代码中有死循环
说明:这属于笔误型的错误,例如以下代码。
for(i = 0; i < j; j++)
这样的语句编译不会报错,但程序会一直在这循环。
解决方案:这种错误一旦发生是很难发现的,我只能建议写代码时多注意一些。

5. 编译问题
说明:一般来说,这个问题发生的场景为,程序员小A终于把程序跑飞的问题解决掉了,妥善起见,他把修改的代码保存了。小A在后续开发中又遇到了一些问题,代码被他改的不像样。于是,他将代码回退到以前的版本编了一把,编完后他发觉这个版本的程序跑飞问题还没有解决。小A想,还好我有备份,于是他把自己的备份文件替换了原文件,重新编译,结果,程序又跑飞了。这是为什么呢?难道小A之前没有把程序跑飞问题解决掉吗?
其实不是的,这个问题是由编译器的“增量编译”导致的。我们注意到小A把代码回退后先编了一把,然后才替换的文件,这个时候,如果小A的备份文件中有一些文件的日期比被替换文件的早,那么再次编译时,编译器就不会编译它们。
解决方案:修改一下备份文件的注释什么的,更新一下文件日期,然后再次编译。

这些就是我目前所记录下的有关程序跑飞的原因了,至于我写的解决方案,我其实觉得意义不大,聊胜于无吧。因为这类问题难就难在如何定位,定位到了错误后解决起来还是很快的。至于如何定位问题,我一般先把自己添加、修改的代码改回去或者注释掉,然后再一点一点把它们加上,加到哪一段发现出错了,那就定位到了。
以上是我的个人经验,若有不当之处欢迎大家指出,大家有其他情况补充也可以在评论区留言。

嵌入式开发——程序跑飞原因总结相关推荐

  1. 【跑飞、死机】单片机 msp430程序跑飞原因和解决方式积累

    目录 单片机 msp430程序跑飞原因和解决方式积累 MSP430 数组填充越界引起的栈溢出 导致程序跑飞 [单片机重启]MSP430重启/频繁重启/跑飞 原因分析 单片机 msp430程序跑飞原因和 ...

  2. MSP430程序跑飞原因

    MSP430单片机的程序有时候容易出现跑飞的情况,导致运行不正常.常见原因总结如下: 没有设置停止看门狗,也没有及时喂狗 没有定义中断函数,但又开启了对应的中断,发生中断时,找不到中断函数入口 供电电 ...

  3. 单片机长时间程序跑飞_单片机程序跑飞的三种现象、原因及解决方法

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

  4. MPC5748G开发笔记-----MPC5748G程序跑飞uSDHCDriverIRQHandler

    MPC5748G程序跑飞uSDHCDriverIRQHandler 文章目录 MPC5748G程序跑飞uSDHCDriverIRQHandler 前言 一.跑飞时的状态 二.利用异常中断获取位置 1. ...

  5. 教你如何找到导致程序跑飞的指令

    调试嵌入式程序时,你是否遇到过程序跑飞最终导致硬件异常中断的问题?遇到这种问题是否感觉比较难定位?不知道问题出在哪里,没有办法跟踪?尤其是当别人的程序踩了自己的内存,那就只能哭了:( 今天在论坛上看有 ...

  6. 三种嵌入式开发程序架构

    三种必须掌握的嵌入式开发程序架构 前言 reference 前言 在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题.软件架构对于系统整体的稳定性和可靠性是非常重要的,一 ...

  7. 困扰一周的奇葩bug:重复相似代码多,导致单片机程序跑飞

    今天是个好日子,困扰一周的bug终于解决了,迫不及待将这个奇葩问题分享给各位朋友~ 硬件环境: 国产MCU:华大HC32L130 问题描述: 最近做一款基于Modbus协议的三通道温度采集模块,程序设 ...

  8. AUTOSAR实战教程 - 软件集成调试_程序跑飞一招解决

    工欲善其事必先利其器. AUTOSAR工程如此庞大的代码量,如果没有一个科学.程式化的方法来调试程序, 那么程序跑飞之后使用三板斧:打断点.看变量.对比正常代码和异常代码的变动,这显然是不能够胜任工作 ...

  9. C语言 跑飞位置,DSP程序跑飞的问题 - C2000™︎ 微控制器论坛 - C2000 微控制器 - E2E™ 设计支持...

    Other Parts Discussed in Thread:MOTORWARE TI的各位专家大家好: 第一次发帖,请多多包涵.本人使用的是F28027 C2000 Piccolo LaunchP ...

最新文章

  1. LeetCode实战:两两交换链表中的节点
  2. xgboost 正则项_XGBoost入门系列第一讲
  3. lamp不解析php,LAMP环境下不能解析php原因及排查步骤
  4. git提交忽略权限问题
  5. ExtJs组件之间的相互访问,访问机制
  6. 网易云携手美云智数掀起企业移动信息化发展新浪潮
  7. java中如何检查字符串都是数字_如何在Java中检查字符串是否为数字?
  8. 阿里第二代微服务强势崛起,你还敢往简历上写“精通”吗?
  9. java线程锁标记_java 线程 中断标志位
  10. 开发到底要不要自己做测试?
  11. python查看函数参数快捷键_python查看函数源代码快捷键_pycharm中查看源码的快捷键...
  12. 清晨晓叙:matlab中的矩阵拼接
  13. 前后台进程的本质区别
  14. spring中使用quartz(注解版)
  15. c语言 软件编程入门自学,软件编程入门自学
  16. SCC(三):HEVC IBC
  17. STM32芯片无法下载 芯片锁死 M3错误的一种解决方案
  18. 测试用例-------纸杯
  19. 计算机与软件工程-研究生复试-专业面试题型举例
  20. 华硕天选无法识别蓝牙

热门文章

  1. OracleLinux-R6-U5-Server-x86_64安装,及oracle11g安装
  2. 微软杀毒软件Microsoft Security Essentials 今起可下载
  3. java socket 加密,Java socket通信实现DES加密与解密
  4. Ghost 搭建博客小记
  5. CTF.show:新春红包题wp
  6. 带你开发个转盘抽奖小游戏【附源码】
  7. 手机通讯录误删怎么恢复
  8. 【性能测试】性能测试步骤
  9. 好消息,个人也可以申请支付宝支付了
  10. 现在是经济的寒冬吗?