問(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文件是比較好的方法)。
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
technology development. Innovations like oscilloscopes, logicanalyzers and bit error ratio testers have enabled new, faster and more
發(fā)表于 07-14 10:48
?14次下載
Calculating the Error Budget in Precision Digital-to-Analog Converter (DAC) Applications
Abstract
發(fā)表于 01-06 13:44
?953次閱讀
電腦各種錯(cuò)誤信息的中文意思 一、BIOS中的提示信息 提示信息 說(shuō)明 Drive A error 驅(qū)動(dòng)器A錯(cuò)誤 System halt 系統(tǒng)掛起 Keyboard controller
發(fā)表于 02-11 17:32
?762次下載
在使用電腦中有時(shí)候會(huì)遇到unknown hard error,很多人不知道unknown hard error什么意思。電腦出現(xiàn)hard error是因?yàn)槭裁矗瑄nknown hard err
發(fā)表于 12-13 11:23
?0次下載
publications in technical journals and conferences, use has been made of the concept of % error in Tj.
發(fā)表于 04-11 10:04
?3次下載
本文檔的有內(nèi)容詳細(xì)介紹的是Keil編譯錯(cuò)誤improper fixup應(yīng)該如何解決。
發(fā)表于 07-31 17:35
?1次下載
RTD Configurator and Error Budget Calculator
發(fā)表于 01-27 18:36
?17次下載
出現(xiàn)Error: Unable to reset MCU!的解決方法
發(fā)表于 10-25 21:06
?14次下載
錯(cuò)誤信息:error: #40: expected an identifier原因1:是命名重疊了, 比如在stm32f10x.h中有如下定義typedef enum {ERROR = 0
發(fā)表于 11-13 13:21
?9次下載
Keil LX51 Error L104Error L104處理Error L104處理8051系列單片機(jī)總體來(lái)說(shuō)內(nèi)存空間小, 在需要數(shù)據(jù)轉(zhuǎn)發(fā)的編程中為了更容易掌控內(nèi)存分配和重用, 通常多用全局變量
發(fā)表于 11-29 13:21
?8次下載
在編譯程序是報(bào)錯(cuò):…\OBJ\test_program.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested but a semihosting fputc was li
發(fā)表于 12-03 09:51
?9次下載
STM32CubeIDE安裝-NSIS Error問(wèn)題
發(fā)表于 12-03 21:06
?18次下載
【GCC編譯】運(yùn)行編譯后的程序報(bào)錯(cuò) error while loading shared libraries: lib*.so: cannot open shared object file
發(fā)表于 08-26 13:14
?7521次閱讀
問(wèn):怎么來(lái)改正“fixup”錯(cuò)誤? 答:這里假定你已經(jīng)知道如何來(lái)定位導(dǎo)致fixup錯(cuò)誤的代碼位置。如果不清楚,請(qǐng)參看前面的問(wèn)答“怎么來(lái)定位"Fixup error"
發(fā)表于 01-22 15:03
?1281次閱讀
?當(dāng)程序發(fā)生故障時(shí),正常情況下采用人為干預(yù),不可避免會(huì)影響生產(chǎn)效率,機(jī)器人編程時(shí),可以通過(guò)Error Handler 這項(xiàng)功能來(lái)自動(dòng)處理一些故障,提高生產(chǎn)效率。
發(fā)表于 05-26 09:23
?950次閱讀
評(píng)論