【ARM】MDK-编译时Linker Error:Internal fault

1、 文档目标


记录问题ARMCLANG: Linker Error: Internal fault: [0xb3b91b:6120001]的解决方案,以及添加原厂对于该问题的说明链接,为同事解决该问题提供参考。

2、 问题场景


客户在编译时linking中出现报错信息.SPIN32G0601-JXPR-VSH SPIN32G0601-JXPR-VSHaxf: Internal fault: [0xb3b9b:6120001]


图2-1


此问题在Arm Compiler version 6.11中引入。到目前为止,我们只在链接器分散文件包含. any选择器和区段具有随机大小时看到过它。当从目标对话框中选择使用内存布局选项时,µVision创建包含. any选择器的分散文件。


:在极少数情况下,使用 Arm 编译器版本6.11或 Arm 编译器版本 6.12生成应用程序时,会出现该报错


3、软硬件环境

1)、软件版本:MDK 5.27 Arm 编译器版本 6.12

2)、电脑环境:Windows 10

3)、外设硬件:无



4、解决方法

方法1)、更改编译器优化级别。

首先点击图4-1-1标记1处快捷方式,进入 Options for Target 目标窗口- ,并选择C/C++(AC6)。uVision中,可以根据如图4-1-1的标记 3 选择优化的级别。


当需要调试时,将优化级别从0(-0)更改为1(-01)(建议),反之亦然。对应用程序版本使用不同的优化级别(1或更高)。


图4-1-1

方法2)、更改设置One ELF Section per Function


首先点击图4-2-1标记1处快捷方式,进入 Options for Target 目标窗口- ,并选择C/C++(AC6)。uVision中,可以根据如图4-2-1的标记 3 取消One ELF Section per Function的选择,编译后无报错。

图4-2-1

注意:如果不能使用Arm编译器版本6.13,有不同的方法来解决这个问题。前两种解决方法很简单,并尝试改变部分大小,但它们可能起作用,也可能不起作用。唯一安全的解决方法是不要在链接器分散文件中使用ANY选择器。

方法3)、最安全的解决方法是将链接器分散文件中的.ANY选择器替换为*(如果可能的话)。如果你使用的是自定义散射文件,你可以这样修改它:


修改前

图4-3-1

修改后

图4-3-2

注:如果您在uVision的目标链接器对话框选项中选择了目标对话框中的“ Use Memory Layout from Target Dialog ”选项,µVision将为您生成分散文件。在这种情况下,您需要禁用此选项并手动编辑已经创建的散射文件。

图4-3-3

方法4)、将Arm Compiler version 更新至6.13及以上版本,该编译器版本为Keil MDK 5.29版本的一部分,更加直接的方法更新软件版本至Keil MDK 5.29及以上版本。



【更多软件使用问题请ARMCLANG: Linker Error: Internal fault: [0xb3b91b:6120001]