本文主要是介绍【stm32_eide(AC6)+ozone开发工作流bug记录】HardFault_Handler,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
bug描述
bug就是会卡死在这里
void HardFault_Handler(void)
{/* USER CODE BEGIN HardFault_IRQn 0 *//* USER CODE END HardFault_IRQn 0 */while (1){/* USER CODE BEGIN W1_HardFault_IRQn 0 *//* USER CODE END W1_HardFault_IRQn 0 */}
}
通过在Hardfault_handler()
中添加汇编语句__asm("bx lr")
,即跳转到最后一次执行的指令,即可定位出问题的地方
bug复现
可能进入硬件错误的代码都不一样,但是很大一部分都是有强制类型转换的地方
即在编译器中运行这几句代码,即强制类型转换
发现:在MDK中能正常运行,在Ozone中调试时候会进入硬件错误,有人说是编译链的问题
int abc = 1;int *p = &abc;float b = (float)*p;// int abc = 1;// float b = (float)abc;
这篇关于【stm32_eide(AC6)+ozone开发工作流bug记录】HardFault_Handler的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!