我创建了一个小型模块在汇编手臂,被连接在一起用我的裸露的金属嵌入式应用程序。有时,当我重申,我得到一个"错误[Lp002]:搬迁失败:价值超出范围或非法的"。什么是更加令人费解的是,我得到的错误之后,在谈到了一些代码在C模块。

IAR手册是含糊不清关于重新排序的部分或代码。' 但看在汇编文件所产生的编译器从我的。c文件,我看不出有任何差别他们的部分宣言和矿。实际上,我开始我的代码碰它在C然后把组装好的文件。

有帮助吗?

解决方案 2

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

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

其他提示

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

祝你好运。

看在编译器的文件。通常,有一节关于连接命令的文件,这也正是你所寻找的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top