代码之家  ›  专栏  ›  技术社区  ›  florin

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

  •  1
  • florin  · 技术社区  · 16 年前

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

    IAR手册中关于“重新排序节或代码”的内容含糊不清。但看看编译器从my.c文件生成的汇编文件,我发现它们的节声明和我的节声明没有区别。实际上,我开始编写代码时,先用C语言将代码截短,然后接管汇编文件。

    3 回复  |  直到 16 年前
        1
  •  1
  •   Robert Deml    16 年前

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

        2
  •  0
  •   florin    16 年前

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

        3
  •  0
  •   swegi    16 年前

    查看编译器的文档。通常,有一个关于链接器命令文件的部分,它正是您要查找的内容。