問(wèn):我得到一個(gè)信息"Fixup error referencing ...";或者是"Fixup error in expression ..."
這究竟是什么意思,我該怎么做?
答:簡(jiǎn)單地說(shuō),這意味著鏈接器指示你要去調(diào)整(fixup)對(duì)一個(gè)存儲(chǔ)位置的引用,因?yàn)橛?jì)算出的地址是和可用的空間是不匹配的,例如:對(duì)一個(gè)字節(jié)(8位)的引用,卻要求放入一個(gè)大于0xFF的值。
在使用PICC編譯器時(shí),這種問(wèn)題比較多地發(fā)生在指針沒(méi)有被正確地聲明的情況下,例如:
bank2 char ch;
char *ptr;
ptr = &ch; //這里就會(huì)出現(xiàn)fixup error
這是一個(gè)fixup error,因?yàn)?ptr"是默認(rèn)指向bank0數(shù)據(jù)的指針(這里ptr只有8位,而&ch是一個(gè)大于8位的一個(gè)地址)——要改正它需要讓指針也指向bank2,如下:
bank2 char *ptr;
要定位發(fā)生fixup error的原因,可以查看完整的錯(cuò)誤信息。這里有一個(gè)例子:
gmain6.obj:113:Fixup overflow referencing psect rbss_1 (loc 0x8C8 (0x8C2+6), size 1, value 0xA8)
這個(gè)錯(cuò)誤信息是來(lái)自PICC編譯器。這里的"size"告訴我們這是對(duì)一個(gè)字節(jié)的引用——實(shí)際上這是一個(gè)7位數(shù)據(jù)的引用,因?yàn)檫@個(gè)數(shù)值0xA8太大了,和7位的數(shù)據(jù)引用是不匹配的。
從信息里可知,在這里是引用了rbss_1,也就是bank1的地址,它建議了一個(gè)將對(duì)bank1的引用卻沒(méi)有截?cái)嗤暾刂芬赃m合指令的7位地址。
注意這個(gè)位置——0x8C8。這是一個(gè)出錯(cuò)指令的絕對(duì)地址;請(qǐng)確保你已經(jīng)產(chǎn)生了匯編列表文件,請(qǐng)打開(kāi)編輯它。這個(gè)提供的地址是一個(gè)字節(jié)地址,因?yàn)镻IC的程序空間是14位寬的,所以計(jì)算字地址時(shí)要用該地址除以2——0x8C8/2 = 0x464。
在list文件里,可以很簡(jiǎn)單地定位到0x464:
993 0464 00A8 movwf _TempChar ;#
^^^^ location
在出錯(cuò)信息里給出的值(0xA8)就是TempChar的地址——你還可以檢查map或者symbol文件來(lái)查找對(duì)應(yīng)這個(gè)地址的符號(hào)(通常使用list文件是比較好的方法)。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7145瀏覽量
89582 -
編譯器
+關(guān)注
關(guān)注
1文章
1642瀏覽量
49287
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
An Introduction to Error Locat
Calculating the Error Budget i
![Calculating the <b class='flag-5'>Error</b> Budget i](https://file1.elecfans.com//web2/M00/A4/85/wKgZomUMNJOAJXrgAAAA6dCvhIo833.gif)
電腦錯(cuò)誤信息的中文解讀
hard error什么意思及解決辦法
What’s Wrong with % Error in Junction Temperature"
Keil編譯錯(cuò)誤improper fixup應(yīng)該如何解決
![Keil編譯錯(cuò)誤improper <b class='flag-5'>fixup</b>應(yīng)該如何解決](https://file.elecfans.com/web1/M00/9F/05/o4YBAF1BQ4eAE7QqAADno_Y_Zk0412.png)
RTD Configurator and Error Budget Calculator
![RTD Configurator and <b class='flag-5'>Error</b> Budget Calculator](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單片機(jī)開(kāi)發(fā),報(bào)錯(cuò) error: #40: expected an identifier
![單片機(jī)開(kāi)發(fā),報(bào)錯(cuò) <b class='flag-5'>error</b>: #40: expected an identifier](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
KEIL ERROR L104
![KEIL <b class='flag-5'>ERROR</b> L104](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
"STM32-MDK: Error: L6915E: Library reports error: __use_no_semihosting was requested,"
!["STM32-MDK: <b class='flag-5'>Error</b>: L6915E: Library reports <b class='flag-5'>error</b>: __use_no_semihosting was requested,"](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【GCC編譯運(yùn)行報(bào)錯(cuò)】error while loading
![【GCC編譯運(yùn)行報(bào)錯(cuò)】<b class='flag-5'>error</b> while loading](https://file.elecfans.com//web2/M00/64/B2/poYBAGMIVpuAP42VAADEgNPcSSM641.png)
MPLAB XC8編譯器出現(xiàn)“fixup”錯(cuò)誤怎么辦
ABB高級(jí)編程Error Handler
![ABB高級(jí)編程<b class='flag-5'>Error</b> Handler](https://file1.elecfans.com/web2/M00/88/B4/wKgaomRwCgOAFTW2AAAX3dbnBCI564.png)
評(píng)論