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]