打印

STM32程序跑飞求助

[复制链接]
4066|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ab198604|  楼主 | 2012-8-13 10:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

大家好,小弟在用STM32开发项目时遇到一个问题,程序总是跑飞,非常奇怪,希望能得到各位的帮助。现象如下:
见下图:
  
1 执行993行断点前的程序代码






2
变量值查看结果

注:sf->new_cmd_objsf->destroy_cmd_obj是函数指针,new_cmd_obj_idestroy_cmd_obj是具体的函数,993行和994行均是函数指针的赋值操作。

上图是程序在执行断点之前的情况,从图上可以看出,在执行sf->new_cmd_obj = new_cmd_obj_i这句话之前,
1 通过图2可以看到sf->new_cmd_obj此时的值是0x20008DE0(应该是指向内存区域的某个地方,这是不是有点问题,因为sf->destroy_cmd_obj的值为0,这可以形成一个对比,所以我认为这是有差异的一个地方)。
2 new_cmd_obj_i这个函数的地址是在flash0x0800039AC处。

单步执行至图1的第995行后,情况如下:

3执行至995行的断点后

4
执行至995行变量值

3和图4显示程序从第993行执行至995行的情况,从图上可以看出,sf->new_cmd_obj的值为0x0D4604B5,这个地址已经不是程序正常执行范围内,所以当程序调用new_cmd_obj方法时,程序就跑飞了,进入HardFault_Handler()了。
sf结构体中的destroy_cmd_obj是函数指针, destroy_cmd_obj是外部的一个函数,994行的赋值语句含义是通过函数的值赋给sf->destroy_cmd_obj,图4标蓝线的值是正确的,主要是和new_cmd_obj异常情况形成一下对比。

请大家帮我找找,为何我的程序在执行993行后,sf->new_cmd_obj的值变成0x0D4604B5导致后期调用这个成员时使程序跑飞。
沙发
lvjing880907| | 2012-8-13 11:23 | 只看该作者
图呢?

使用特权

评论回复
板凳
5509| | 2012-8-13 11:58 | 只看该作者
看不见

使用特权

评论回复
地板
chenyu988| | 2012-8-13 12:36 | 只看该作者
图呢

使用特权

评论回复
5
笑对人生AA| | 2013-8-25 08:48 | 只看该作者
请问楼主解决没,我也遇到这样的问题

使用特权

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

本版积分规则

0

主题

2

帖子

0

粉丝