小书明-2042808 发表于 2014-3-30 11:38:47

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

 该问题由某用户提出,发生在 STM32F2xx 器件上。据其工程师讲述:在其产品设计中,使用了第三方的软件库。出于某种原因,第三方不能提供软件库的源代码,只能以二进制映像的形式供其使用。在软件工程中,通过相关设置将该映像定位到某一固定的地址上,用户程序则是通过各个库函数的入口地址来调用相关的库函数。在软件调试过程中,其工程师发现,将库函数的入口地址赋给函数指针,再用函数指针进行函数调用会导致程序跑飞。使用调试器中止程序运行后,发现程序停留在Hard Fault 中断服务程序内。
 
问题详细描述以及ST官方解答见文档:
 
ST MCU实战经验栏目,更多应用问题&官方解答,欢迎下载!

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

学习。。。。。。。。。。。
页: [1]
查看完整版本: 【ST工程师 MCU实战经验30篇】使用指针调函数产生 Hard Fault