我创建了一个小模块中的汇编程序ARM,将与我的裸机嵌入式应用连接在一起。 有时,当我重新构建应用程序,我得到一个“错误[Lp002]:搬迁失败:价值超出范围或不合法”。 更让人不解的是,我是一个C模块中注释掉一些代码后得到的错误。
的IAR手册是含糊“重新排序的区段或代码”。 但是看着从我的.c文件的编译器生成的汇编文件,我看到他们的部分申报和我之间没有什么区别。 我实际上是由磕碰它在C,则接管安装文件开始了我的代码。
我创建了一个小模块中的汇编程序ARM,将与我的裸机嵌入式应用连接在一起。 有时,当我重新构建应用程序,我得到一个“错误[Lp002]:搬迁失败:价值超出范围或不合法”。 更让人不解的是,我是一个C模块中注释掉一些代码后得到的错误。
的IAR手册是含糊“重新排序的区段或代码”。 但是看着从我的.c文件的编译器生成的汇编文件,我看到他们的部分申报和我之间没有什么区别。 我实际上是由磕碰它在C,则接管安装文件开始了我的代码。
每当我得到一些神秘的链接器/编译器错误,我做了全部重建。 大约有一半的时间就修复它。 我的猜测是,一些模块应该被重新编译,但没有。
祝好运。
我已经找到了问题的根源,以及如何实现一个可接受的解决方法。 在我的汇编源我有一个数据段和代码段,以及接头将它们放置相距甚远也。 我现在已经搬到我的变量的代码段(这是摆在RAM无论如何,因为它需要在中断上下文中运行,而我写内部闪存),现在我明白了正确链接。
这是接下来的问题是:如何告诉链接器将某些部分彼此接近?
看看编译器的文档。 通常情况下,有一个关于cmd文件,这不正是你要找的部分。