你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

碰到函数指针跳到了HardFault_Handler

[复制链接]
scfor123456 提问时间:2019-8-12 13:05 /
typedef struct
{
    void (*calc)();       // 函数指针
} DO_FUNC_CAL;

const DO_FUNC_CAL doFuncCal[DO_FUNC_NUMBER] = {
    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[fc].calc();
直接跳进HardFault_Handler,貌似这个写法没有问题吧,DSP里这么用的,换到了STM32就不行了?
收藏 评论9 发布时间:2019-8-12 13:05

举报

9个回答
tyhjrwx2011 回答时间:2019-8-12 13:30:23
估计是const DO_FUNC_CAL doFuncCal[DO_FUNC_NUMBER] 的数组元素的值,有问题,才导致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[DO_FUNC_NUMBER] 的数组元素的值,有问题,才导致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[]定义数组的大小
byronsong 回答时间:2019-8-13 08:00:52
又是老生常谈之数组越界访问。。。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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[]定义数组的大小

是的,这类问题大部分是数组越界,野指针访问导致的

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版