如何修复“[Lp002]:IAR ARM 工具重定位失败?

Posted

技术标签:

【中文标题】如何修复“[Lp002]:IAR ARM 工具重定位失败?【英文标题】:How to fix a "[Lp002]: relocation failed with IAR ARM tools? 【发布时间】:2010-11-15 13:13:19 【问题描述】:

我在 ARM 的汇编程序中创建了一个小模块,以与我的裸机嵌入式应用程序链接在一起。有时,当我重建应用程序时,我会收到“错误 [Lp002]:重定位失败:值超出范围或非法”。更令人费解的是,我在注释掉C模块中的一些代码后出现了错误。

IAR 手册对“重新排序部分或代码”含糊其辞。但是查看编译器从我的 .c 文件生成的汇编器文件,我发现它们的部分声明与我的没有区别。实际上,我通过在 C 中将代码存根然后接管组装文件来开始我的代码。

【问题讨论】:

是否还有其他错误信息? IAR 文件表明它应该提供一组“种类”、“位置”和“目的地”信息。 【参考方案1】:

每当我遇到一些神秘的链接器/编译器错误时,我都会执行 Rebuild All。大约有一半的时间可以修复它。我的猜测是某些模块应该被重新编译,但没有。

祝你好运。

【讨论】:

【参考方案2】:

我找到了导致问题的原因,以及如何实施可接受的解决方法。在我的汇编源代码中,我有一个数据部分和一个代码部分,而链接器将它们放置得太远了。我现在已经将我的变量移动到代码部分(无论如何它都放在了 RAM 中,因为它需要在我写入内部闪存时在中断上下文中运行),现在我让它正确链接。

这是剩下的问题:如何告诉链接器将某个部分彼此靠近?

【讨论】:

【参考方案3】:

查看编译器的文档。通常,有一个关于链接器命令文件的部分,它完全符合您的要求。

【讨论】:

以上是关于如何修复“[Lp002]:IAR ARM 工具重定位失败?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复漏洞

如何修复WMI

PHP网站漏洞怎么修复 如何修补网站程序代码漏洞

如何修复这些漏洞? (npm audit fix 无法修复这些漏洞)

如何修复AppScan漏洞

如何在DOS环境下修复系统