出现HardFault_Handler时的调用关系为:
UART_Init --> EnableIRQ(UARTDOCK_IRQn); -->NVIC_EnableIRQ(interrupt);-->NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
进一步查看CFSR寄存器,只有UNDEFINSTR标志被置1。同时Fault exception viewer,提示信息如下:
The processor has escalated a configurable-priority exception to HardFault.
The processor has attempted to execute an undefined instruction (CFSR.UNDEFINSTR).
Exception occurred at PC = 0x414, LR = 0x45b
大致意思是处理器执行了一条未定义的指令,然后我打开汇编查看 PC = 0x414,截图如下:
我查了下VCEQ这条执行属于NEON的指令,cortex-M4内核是不支持这条指令的,不知道IAR为什么会出现这条执行,该工程在IAR8.50.6上是没问题的,该语句编译成汇编指令不会出现VCEQ这条指令。我使用IAR8.50.6和IAR9.10.2,分别打开这个工程,对比了下工程的配置,暂时没发现有啥不同的。
有人遇到过类似的问题吗?这是我工程设置的问题?还是IAR编译器的原因?硬汉可有啥好的建议?以便我进一步查找问题的根源。