碰到函数指针跳到了HardFault_Handler
typedef struct{
void (*calc)(); // 函数指针
} DO_FUNC_CAL;
const DO_FUNC_CAL doFuncCal = {
DoutRSVD,Dout1,Dout2,Dout3,Dout4,
Dout5, Dout6,Dout7,Dout8,Dout9,
Dout10, Dout11, Dout12, Dout13, Dout14,
Dout15, Dout16, DoutRSVD, Dout18, Dout19,
Dout20, Dout21, Dout22, Dout23, Dout24,
Dout25, Dout26, Dout27, Dout28, Dout29,
Dout30, Dout31, Dout32, Dout33, Dout34,
Dout35, Dout36, Dout37, Dout38,
};
运行此条语句时
doFuncCal.calc();
直接跳进HardFault_Handler,貌似这个写法没有问题吧,DSP里这么用的,换到了STM32就不行了? 估计是const DO_FUNC_CAL doFuncCal 的数组元素的值,有问题,才导致HardFault
看你是固定值,还是函数名?
如果不注意Thumb2模式,值肯定错了 你看是否是每次调用都是在同一个地方出的我问题 从以往的经验一般都是野指针导致的 tyhjrwx2011 发表于 2019-8-12 13:30
估计是const DO_FUNC_CAL doFuncCal 的数组元素的值,有问题,才导致HardFault
看你是固定 ...
DO_FUNC_NUMBER是固定值,39 cdlongbo 发表于 2019-8-12 13:43
你看是否是每次调用都是在同一个地方出的我问题
每次复位重新走到此条语句就出问题了 找到问题了,fc值超过了doFuncCal[]定义数组的大小 又是老生常谈之数组越界访问。。。 songshiqun2010 发表于 2019-8-13 08:00
又是老生常谈之数组越界访问。。。
是的,应该对数组序号进行限制 scfor123456 发表于 2019-8-12 14:24
找到问题了,fc值超过了doFuncCal[]定义数组的大小
是的,这类问题大部分是数组越界,野指针访问导致的
页:
[1]