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

【ST工程师 MCU实战经验30篇】使用指针调函数产生 Hard Fault

[复制链接]
小书明-2042808 提问时间:2014-3-30 11:38 /
 该问题由某用户提出,发生在 STM32F2xx 器件上。据其工程师讲述:在其产品设计中,使用了第三方的软件库。出于某种原因,第三方不能提供软件库的源代码,只能以二进制映像的形式供其使用。在软件工程中,通过相关设置将该映像定位到某一固定的地址上,用户程序则是通过各个库函数的入口地址来调用相关的库函数。在软件调试过程中,其工程师发现,将库函数的入口地址赋给函数指针,再用函数指针进行函数调用会导致程序跑飞。使用调试器中止程序运行后,发现程序停留在Hard Fault 中断服务程序内。
 
问题详细描述以及ST官方解答见文档: 使用指针调用函数产生 Hard Fault.pdf (157.2 KB, 下载次数: 362)

评分

参与人数 1 ST金币 +1 收起 理由
gengwentao + 1

查看全部评分

收藏 1 评论11 发布时间:2014-3-30 11:38

举报

11个回答
zzyist 回答时间:2014-3-30 11:48:27

RE:【ST工程师 MCU实战经验30篇】使用指针调函数产生 Hard Fault

我也遇见过......
wuzhujian 回答时间:2014-3-30 12:24:45

RE:【ST工程师 MCU实战经验30篇】使用指针调函数产生 Hard Fault

我一看,就知道是什么原因。
肯定是函数指针的最低位不为1,而为0。
基于ARM处理器的历史原因,指令地址的最低位,如果是0,为ARM状态,如果是1,为Thumb状态。
STM32的处理器,是基于Cortex-M的,处理器状态应为Thumb状态,否则,就是非法指令地址,进入Hard Fault也属正常。
wuzhujian 回答时间:2014-3-30 12:24:50

RE:【ST工程师 MCU实战经验30篇】使用指针调函数产生 Hard Fault

我一看,就知道是什么原因。
肯定是函数指针的最低位不为1,而为0。
基于ARM处理器的历史原因,指令地址的最低位,如果是0,为ARM状态,如果是1,为Thumb状态。
STM32的处理器,是基于Cortex-M的,处理器状态应为Thumb状态,否则,就是非法指令地址,进入Hard Fault也属正常。
HenryChen 回答时间:2015-6-10 10:03:22
学习。。。。。。。。。。。。。
sfee2002 回答时间:2015-6-10 11:00:08
学习一下。。。。。。。。。。。。。
stary666 回答时间:2015-6-10 13:32:34
学习。。。。。。。。。。。。
某人 回答时间:2016-3-25 10:33:29
学习了
仙景 回答时间:2016-3-25 11:04:54
学习了。。。。
HenryChen 回答时间:2016-5-13 16:48:47
学习。。。。。。。。。。。。
sky7 回答时间:2020-1-14 09:32:09

学习一下。。。。。。。。。。。。。
changjianqiyuan 回答时间:2021-2-5 20:47:42
学习。。。。。。。。。。。

所属标签

相似问题

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