我在ARM的汇编程序中创建了一个小模块,与我的裸机嵌入式应用程序链接在一起。有时当我重建应用程序时,我得到一个“错误[Lp002]:重定位失败:超出范围或非法”。更令人费解的是,在C模块中注释掉一些代码后,我收到了错误。
IAR手册含糊不清“重新订购部分或代码”。但是看看编译器从我的.c文件生成的汇编文件,我发现它们的部分声明与我的之间没有区别。我实际上是通过在C中将其删除然后接管汇编文件来启动我的代码。
答案 0 :(得分:1)
每当我收到一些神秘的链接器/编译器错误时,我都会进行Rebuild All。大约一半的时间它修复它。我的猜测是某些模块应该重新编译,但没有。
祝你好运。答案 1 :(得分:0)
我找到了导致问题的原因,以及如何实施可接受的解决方法。在我的汇编源代码中,我有一个数据部分和一个代码部分,链接器将它们放得太远了。我现在已经将我的变量移动到代码部分(无论如何它放在RAM中,因为它需要在写入内部闪存时在中断上下文中运行)现在我可以正确链接。
这是剩下的问题:如何告诉链接器将某些部分放在彼此靠近的位置?
答案 2 :(得分:0)
查看编译器的文档。通常,有一个关于链接器命令文件的部分,它正是您正在寻找的。 p>