为什么转换为浮点数会在 STM32F429ZI 上遇到硬错误 (App_Fault_ISR)
Why does casting to a float hits a hard error on STM32F429ZI (App_Fault_ISR)
为什么转换为浮点数会在 STM32F429ZI (App_Fault_ISR) 上遇到硬错误?
我不太确定这里发生了什么。
我在 Atollic TrueSTUDIO
上使用 Nucleo 开发板 STM32F429ZI
代码
CPU_FP32 speed;
CPU_INT32U val = (CPU_INT32U)(0x20u >> 4u);
speed = (CPU_FP32)val;
上次崩溃的程序集
080026f2: bl 0x8001dc8 <BSP_Tick_Init>
51 CPU_INT32U val = (CPU_INT32U)(0x20u >> 4u);
080026f6: movs r3, #2
080026f8: str r3, [r7, #4]
52 speed = (CPU_FP32)val;
080026fa: ldr r3, [r7, #4]
080026fc: vmov s15, r3 <----
看起来像是一个移动问题
检测到硬故障Window shos
总线、内存管理或使用错误(强制)
额外的细节
尝试执行协处理器指令 (NOCP)
这落在 App_Fault_ISR 上,这似乎是一个硬故障
就配置而言
汇编器、编译器和 C 链接器在设置中启用了 FPU (FPv4-SP-D16)
已选择硬件实现
您似乎没有启用 FPU,这需要在尝试任何浮点指令之前完成。您必须在 CPACR
寄存器中设置位 20-23。
这个link显示了所需的步骤,我通常在启动代码中这样做。
为什么转换为浮点数会在 STM32F429ZI (App_Fault_ISR) 上遇到硬错误?
我不太确定这里发生了什么。 我在 Atollic TrueSTUDIO
上使用 Nucleo 开发板 STM32F429ZI代码
CPU_FP32 speed;
CPU_INT32U val = (CPU_INT32U)(0x20u >> 4u);
speed = (CPU_FP32)val;
上次崩溃的程序集
080026f2: bl 0x8001dc8 <BSP_Tick_Init>
51 CPU_INT32U val = (CPU_INT32U)(0x20u >> 4u);
080026f6: movs r3, #2
080026f8: str r3, [r7, #4]
52 speed = (CPU_FP32)val;
080026fa: ldr r3, [r7, #4]
080026fc: vmov s15, r3 <----
看起来像是一个移动问题
检测到硬故障Window shos
总线、内存管理或使用错误(强制) 额外的细节 尝试执行协处理器指令 (NOCP)
这落在 App_Fault_ISR 上,这似乎是一个硬故障
就配置而言 汇编器、编译器和 C 链接器在设置中启用了 FPU (FPv4-SP-D16) 已选择硬件实现
您似乎没有启用 FPU,这需要在尝试任何浮点指令之前完成。您必须在 CPACR
寄存器中设置位 20-23。
这个link显示了所需的步骤,我通常在启动代码中这样做。