最近在搞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
剛開始一頭霧水,也不明白為什么會(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)啊~~~