硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1111|回复: 4
收起左侧

[开发工具] IAR从8.50.6升级到9.10.2后,cortex-M4会生成NEON指令,导致出现硬件错误HardFault_Handler

[复制链接]

0

主题

32

回帖

32

积分

新手上路

积分
32
发表于 2022-6-10 10:03:39 | 显示全部楼层 |阅读模式
本帖最后由 沉醉东风 于 2022-6-10 11:01 编辑

硬件环境:MCU为MK60DX256VLL10(cortex-M4内核)。
软件环境:IAR 8.50.6(没问题)和IAR 9.10.2(有问题)。
问题描述:我使用的MCU是MK60DX256VLL10(cortex-M4内核),工程之前一直使用的是IAR 8.50.6,运行没问题,程序下载到板子上一直都是正常运行的。最近安装了IAR 9.10.2后,使用IAR 9.10.2打开之前的工程,编译没问题,下载到板子上后,直接进入了硬件错误中断即HardFault_Handler。
然后一步一步的调试,发现HardFault_Handler出现在执行这条语句:NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))。该语句在core_cm4.h,函数内容如下:
__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
{
  NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
}

出现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,截图如下:
image.png
我查了下VCEQ这条执行属于NEON的指令,cortex-M4内核是不支持这条指令的,不知道IAR为什么会出现这条执行,该工程在IAR8.50.6上是没问题的,该语句编译成汇编指令不会出现VCEQ这条指令。我使用IAR8.50.6和IAR9.10.2,分别打开这个工程,对比了下工程的配置,暂时没发现有啥不同的。
有人遇到过类似的问题吗?这是我工程设置的问题?还是IAR编译器的原因?硬汉可有啥好的建议?以便我进一步查找问题的根源。


回复

使用道具 举报

0

主题

32

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2022-6-10 10:10:41 | 显示全部楼层
补充下,使用IAR9.10.2的时候,该语句也会出现 VQADD.U32 Q7,Q0,Q15,这条指令我查了下,也是NEON指令。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107072
QQ
发表于 2022-6-10 17:42:34 | 显示全部楼层
整不好是个bug,升级到最新的9.20试试
回复

使用道具 举报

0

主题

32

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2022-6-13 10:24:54 | 显示全部楼层
我试了最新的IAR 9.20,依然会进入硬件错误中断,暂时只能使用IAR 8.506。
回复

使用道具 举报

2

主题

63

回帖

69

积分

初级会员

积分
69
发表于 2022-6-13 13:24:23 | 显示全部楼层
沉醉东风 发表于 2022-6-13 10:24
我试了最新的IAR 9.20,依然会进入硬件错误中断,暂时只能使用IAR 8.506。

把option 关键的配置截图发出来大家看看呗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 10:51 , Processed in 0.357254 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表