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;