專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

relocation failed: value out of range or illegal

作者:未知   來源:Levi之家的空間   點(diǎn)擊數(shù):  更新時(shí)間:2014年08月16日   【字體:

最近在搞LPC43xx系列的雙核芯片,用的是IAR的編譯環(huán)境。

在給cortex-m0核添加匯編啟動(dòng)代碼,以及在源文件中添加M0_M4CORE_IRQHandler服務(wù)程序的時(shí)候遇到一個(gè)錯(cuò)誤。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
剛開始一頭霧水,也不明白為什么會(huì)出現(xiàn)這樣的錯(cuò)誤。google了好久,最后在一個(gè)俄文網(wǎng)站上找到了些靈感,哈哈,俄文網(wǎng)站當(dāng)然是通過瀏覽器自帶的翻譯功能翻譯過來之后的。
 
是由于Location和Target的距離太遠(yuǎn)引起的,當(dāng)時(shí)并不明白為什么cortex-m4上并不會(huì)出現(xiàn)。查看cortex-m0的手冊,發(fā)現(xiàn)cortex-m0的指令是thumb指令是16位的。也許在B跳轉(zhuǎn)指令的時(shí)候,并不能夠跳轉(zhuǎn)到那么遠(yuǎn)。
 
這個(gè)是明白了,可是怎么修改呢。查了半天IAR的函數(shù)定位和變量定位,也沒什么收獲。
其實(shí)我的這個(gè)工程都是從keil上移植過來的,后來想起在移植的時(shí)候,匯編程序中有些中斷并沒有完全給其分配空間,如圖
所以在IAR中也將一些中斷向量表中的中斷不分配空間,就可以編譯成功了。
 
但是還是不明白為什么會(huì)有Location和Target兩個(gè)地址呢?難道在啟動(dòng)匯編代碼中的地址需要重映設(shè)?
以上講的不對的地方還望大家指出以及指點(diǎn)啊~~~
關(guān)閉窗口

相關(guān)文章