• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32程序程序跑飞的问题

liangeeg 2019-05-06 浏览量:2015
STM32程序运行一段时间后程序跑飞,一般是在接收串口数据收到一半的时候出现这种情况,但是现象随机出现,程序里面有定时器,ADC 四个串口,按键中断等,找不到具体原因,调试出现概率也低,会不会跟中断优先级有关系
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 一般不是中断优先级的问题。

    个人猜测,一般是数组与指针的问题。

    比如:定义了一个 u8  a[4]的数组,u8  cnt的变量

    cnt++  去读取a数组的值。

    当cnt=4时

    a[cnt]这事就出错了,程序就跑分了


    数组越界,指针越界等等,都会造成程序跑飞。

    最后就是堆栈溢出,也会出现这个问题,所以,建议检查下程序



    • 发布于 2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:8
  • 如果固定跑飞,肯定是程序问题;现在是随机跑飞,就可能硬件也有问题。总之,问题复杂了。
    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果都是在接收串口数据时出现问题,建议认真追踪一下串口处理程序。
    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 用调试器仿真试试,还有就是通过串口输出运行情况入判断程序哪里出了问题
    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 程序跑飞,一般都是内存越界导致,检查下数据操作是否超过容量什么的,
    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 一般都是在串口接收数据时出现,看看接收数组大小,接收到的数据大小;在接收中是否使用指针对数据进行了转移或处理等操作。

    感觉是数组越界、指针指向不明地址导致的。


    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种情况一般是数组越界 或者指针地址没有回收

    也有可能是使用了不正确的goto语句

    硬件损坏的纪律很低 但也不能排除

    先按排除以上的软件问题 如果不能解决

    在换单片机试试 最好是用在线调试的方式

    在容易出错的地方加输出调试信息

    • 发布于2019-05-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 有可能是有数据越界的情况发生

    可以先把所有的功能关了,再一个一个打开进行验证,看看是哪一部分外设引起的

    • 发布于2019-05-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种可以通过硬件调试的方法,看跑死在哪里,方法是接STM32下载器,然后使用MDK的debug功能,发现跑死之后停止运行,然后打开call stack那个工具,看哪里进入了hardfault
    • 发布于2019-05-17
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32程序程序跑飞的问题