STM32F439的浮点运算功能

2019-07-21 04:48发布

我最近在用STM32F439这款芯片的时候,发现只要是用到了浮点运算的话,
就会出现HardFault异常,有哪位老兄碰到过这种情况吗。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
fzhYou
2019-07-21 21:45
这个问题的原因已经找到了,M4的用户指南里面说了,
当你使用了浮点函数时,Cortex-M4处理器在进入异常时
会自动把浮点运算相关的状态压入堆栈。Cortex-M4处理器
在进入异常时,自动压栈的格式有两种,一种是不带浮点寄存器
状态的格式,一种是带浮点状态的格式,而且这些寄存器压栈都是
CPU进入异常时自动完成的,不是人为能够干预的。所以在RTOS环境
里面,在进入CPU异常时经常发生线程切换,A线程执行时,发生异常,
进入异常处理,是以带浮点寄存器的格式压栈的,在异常处理的过程中,
发生了线程切换,切换到B线程的堆栈,但是B线程的堆栈是不带浮点
寄存器的格式压栈的,在异常处理退出时,用B线程的堆栈来出栈就会
发生出栈错误,产生HardFault异常。

一周热门 更多>