scfor123456 发表于 2019-8-12 13:05:55

碰到函数指针跳到了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就不行了?

tyhjrwx2011 发表于 2019-8-12 13:30:23

估计是const DO_FUNC_CAL doFuncCal 的数组元素的值,有问题,才导致HardFault
看你是固定值,还是函数名?
如果不注意Thumb2模式,值肯定错了

cdlongbo 发表于 2019-8-12 13:43:29

你看是否是每次调用都是在同一个地方出的我问题

cdlongbo 发表于 2019-8-12 13:44:14

从以往的经验一般都是野指针导致的

scfor123456 发表于 2019-8-12 14:18:17

tyhjrwx2011 发表于 2019-8-12 13:30
估计是const DO_FUNC_CAL doFuncCal 的数组元素的值,有问题,才导致HardFault
看你是固定 ...

DO_FUNC_NUMBER是固定值,39

scfor123456 发表于 2019-8-12 14:19:05

cdlongbo 发表于 2019-8-12 13:43
你看是否是每次调用都是在同一个地方出的我问题

每次复位重新走到此条语句就出问题了

scfor123456 发表于 2019-8-12 14:24:34

找到问题了,fc值超过了doFuncCal[]定义数组的大小

songshiqun2010 发表于 2019-8-13 08:00:52

又是老生常谈之数组越界访问。。。

scfor123456 发表于 2019-8-14 08:55:09

songshiqun2010 发表于 2019-8-13 08:00
又是老生常谈之数组越界访问。。。

是的,应该对数组序号进行限制

cdlongbo 发表于 2019-9-2 17:19:38

scfor123456 发表于 2019-8-12 14:24
找到问题了,fc值超过了doFuncCal[]定义数组的大小

是的,这类问题大部分是数组越界,野指针访问导致的
页: [1]
查看完整版本: 碰到函数指针跳到了HardFault_Handler