专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

relocation failed: value out of range or illegal

作者:未知   来源:Levi之家的空间   点击数:  更新时间:2014年08月16日   【字体:

最近在搞LPC43xx系列的双核芯片,用的是IAR的编译环境。

在给cortex-m0核添加汇编启动代码,以及在源文件中添加M0_M4CORE_IRQHandler服务程序的时候遇到一个错误。Error[Lp002]: relocation failded: value out of range or illegal:0xfffff5a0
              Kind: R_ARM_THM_JUMP11[0x66]
              Location: 0x10001514
                   Module:
                   Section: 16(.text)
                   Offset: 0x0
           Target: 0x10000ab9
                    "M0_M4CORE_IRQHandler"
                     Module:
                     Section: 8(.text)
                     Offset: 0xc1
刚开始一头雾水,也不明白为什么会出现这样的错误。google了好久,最后在一个俄文网站上找到了些灵感,哈哈,俄文网站当然是通过浏览器自带的翻译功能翻译过来之后的。
 
是由于Location和Target的距离太远引起的,当时并不明白为什么cortex-m4上并不会出现。查看cortex-m0的手册,发现cortex-m0的指令是thumb指令是16位的。也许在B跳转指令的时候,并不能够跳转到那么远。
 
这个是明白了,可是怎么修改呢。查了半天IAR的函数定位和变量定位,也没什么收获。
其实我的这个工程都是从keil上移植过来的,后来想起在移植的时候,汇编程序中有些中断并没有完全给其分配空间,如图
所以在IAR中也将一些中断向量表中的中断不分配空间,就可以编译成功了。
 
但是还是不明白为什么会有Location和Target两个地址呢?难道在启动汇编代码中的地址需要重映设?
以上讲的不对的地方还望大家指出以及指点啊~~~
关闭窗口

相关文章