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