如何修复“[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 工具重定位失败?的主要内容,如果未能解决你的问题,请参考以下文章