Assembly 使用-ffast math时手臂皮质-m4硬故障
我正在尝试启动一个简单的LED闪烁应用程序,一切正常,但如果我加上-ffast数学,它就出了大问题。我通过GDB进行了调试,发现如果我添加-ffast math,它将从uuu libc_init_数组插入对uuu arm_set_fast_math的调用,作为初始化例程的一部分(从.init_数组部分) 分解(手臂)(设置)(快速)(数学显示)Assembly 使用-ffast math时手臂皮质-m4硬故障,assembly,arm,gdb,interrupt,Assembly,Arm,Gdb,Interrupt,我正在尝试启动一个简单的LED闪烁应用程序,一切正常,但如果我加上-ffast数学,它就出了大问题。我通过GDB进行了调试,发现如果我添加-ffast math,它将从uuu libc_init_数组插入对uuu arm_set_fast_math的调用,作为初始化例程的一部分(从.init_数组部分) 分解(手臂)(设置)(快速)(数学显示) 080001f4 <__arm_set_fast_math>: 80001f4: eef1 3a10 vmrs
080001f4 <__arm_set_fast_math>:
80001f4: eef1 3a10 vmrs r3, fpscr
80001f8: f043 7380 orr.w r3, r3, #16777216 ;0x1000000
80001fc: eee1 3a10 vmsr fpscr, r3
8000200: 4770 bx lr
8000202: bf00 nop
它立即跳转到硬故障处理程序。移除——快速数学修复一切。有什么想法吗?谢谢 我假设这个错误是非法指令错误?而且你的CPU没有硬件FPU?您想使用
-ffast math
有什么原因吗?你在使用软件模拟浮点吗?我有mfloat abi=hard-mfpu=fpv4-sp-d16和-ffast math,我得到了一个模板,花了2天时间调试它,现在我想知道为什么它会导致这样的行为。错误是“硬错误”,构建模板是否直接来自硬件供应商?或者只是你发现的东西?在任何情况下,本文件记录了FPSCR布局:。fast math init函数正在设置FZ位(刷新非规范值为零),这可能会在FPU产生非规范值时加速FPU。但是M4(我正在使用的核心)也有相同的寄存器:我正在试图弄清楚为什么它在没有-ffast math
的情况下硬故障,当您编译不符合FP数学的代码时,是否会遇到严重错误?如双x=1.111,y=2.33代码>双z=x*y代码>(并使用-O0
进行编译,或使用volatile
或其他不在编译时进行计算的工具)我假设该错误是非法指令错误?而且你的CPU没有硬件FPU?您想使用-ffast math
有什么原因吗?你在使用软件模拟浮点吗?我有mfloat abi=hard-mfpu=fpv4-sp-d16和-ffast math,我得到了一个模板,花了2天时间调试它,现在我想知道为什么它会导致这样的行为。错误是“硬错误”,构建模板是否直接来自硬件供应商?或者只是你发现的东西?在任何情况下,本文件记录了FPSCR布局:。fast math init函数正在设置FZ位(刷新非规范值为零),这可能会在FPU产生非规范值时加速FPU。但是M4(我正在使用的核心)也有相同的寄存器:我正在试图弄清楚为什么它在没有-ffast math
的情况下硬故障,当您编译不符合FP数学的代码时,是否会遇到严重错误?如双x=1.111,y=2.33代码>双z=x*y代码>(并使用-O0
进行编译,或者使用volatile
或其他不在编译时进行计算的方法。)
0x080001f4 in __arm_set_fast_math ()
(gdb) stepi
HardFault_Handler () at src/stm32f4xx_it.c:61