程序跑飞求助

2019-03-23 19:40发布

大家好,小弟在用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导致后期调用这个成员时使程序跑飞。 此帖出自小平头技术问答
0条回答

一周热门 更多>