该问题由某用户提出,发生在 STM32F2xx 器件上。据其工程师讲述:在其产品设计中,使用了第三方的软件库。出于某种原因,第三方不能提供软件库的源代码,只能以二进制映像的形式供其使用。在软件工程中,通过相关设置将该映像定位到某一固定的地址上,用户程序则是通过各个库函数的入口地址来调用相关的库函数。在软件调试过程中,其工程师发现,将库函数的入口地址赋给函数指针,再用函数指针进行函数调用会导致程序跑飞。使用调试器中止程序运行后,发现程序停留在Hard Fault 中断服务程序内。 问题详细描述以及ST官方解答见文档: |
参与人数 1 | ST金币 +1 | 收起 理由 |
---|---|---|
gengwentao | + 1 |
RE:【ST工程师 MCU实战经验30篇】使用指针调函数产生 Hard Fault
RE:【ST工程师 MCU实战经验30篇】使用指针调函数产生 Hard Fault
肯定是函数指针的最低位不为1,而为0。
基于ARM处理器的历史原因,指令地址的最低位,如果是0,为ARM状态,如果是1,为Thumb状态。
STM32的处理器,是基于Cortex-M的,处理器状态应为Thumb状态,否则,就是非法指令地址,进入Hard Fault也属正常。
RE:【ST工程师 MCU实战经验30篇】使用指针调函数产生 Hard Fault
肯定是函数指针的最低位不为1,而为0。
基于ARM处理器的历史原因,指令地址的最低位,如果是0,为ARM状态,如果是1,为Thumb状态。
STM32的处理器,是基于Cortex-M的,处理器状态应为Thumb状态,否则,就是非法指令地址,进入Hard Fault也属正常。
学习一下。。。。。。。。。。。。。