問:我得到一個信息"Fixup error referencing ...";或者是"Fixup error in expression ..."
這究竟是什么意思,我該怎么做?
答:簡單地說,這意味著鏈接器指示你要去調(diào)整(fixup)對一個存儲位置的引用,因為計算出的地址是和可用的空間是不匹配的,例如:對一個字節(jié)(8位)的引用,卻要求放入一個大于0xFF的值。
在使用PICC編譯器時,這種問題比較多地發(fā)生在指針沒有被正確地聲明的情況下,例如:
bank2 char ch;
char *ptr;
ptr = &ch; //這里就會出現(xiàn)fixup error
這是一個fixup error,因為"ptr"是默認(rèn)指向bank0數(shù)據(jù)的指針(這里ptr只有8位,而&ch是一個大于8位的一個地址)——要改正它需要讓指針也指向bank2,如下:
bank2 char *ptr;
要定位發(fā)生fixup error的原因,可以查看完整的錯誤信息。這里有一個例子:
gmain6.obj:113:Fixup overflow referencing psect rbss_1 (loc 0x8C8 (0x8C2+6), size 1, value 0xA8)
這個錯誤信息是來自PICC編譯器。這里的"size"告訴我們這是對一個字節(jié)的引用——實際上這是一個7位數(shù)據(jù)的引用,因為這個數(shù)值0xA8太大了,和7位的數(shù)據(jù)引用是不匹配的。
從信息里可知,在這里是引用了rbss_1,也就是bank1的地址,它建議了一個將對bank1的引用卻沒有截斷完整地址以適合指令的7位地址。
注意這個位置——0x8C8。這是一個出錯指令的絕對地址;請確保你已經(jīng)產(chǎn)生了匯編列表文件,請打開編輯它。這個提供的地址是一個字節(jié)地址,因為PIC的程序空間是14位寬的,所以計算字地址時要用該地址除以2——0x8C8/2 = 0x464。
在list文件里,可以很簡單地定位到0x464:
993 0464 00A8 movwf _TempChar ;#
^^^^ location
在出錯信息里給出的值(0xA8)就是TempChar的地址——你還可以檢查map或者symbol文件來查找對應(yīng)這個地址的符號(通常使用list文件是比較好的方法)。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
相關(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
?946次閱讀
電腦各種錯誤信息的中文意思 一、BIOS中的提示信息 提示信息 說明 Drive A error 驅(qū)動器A錯誤 System halt 系統(tǒng)掛起 Keyboard controller
發(fā)表于 02-11 17:32
?762次下載
在使用電腦中有時候會遇到unknown hard error,很多人不知道unknown hard error什么意思。電腦出現(xiàn)hard error是因為什么,unknown 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編譯錯誤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次下載
錯誤信息: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系列單片機總體來說內(nèi)存空間小, 在需要數(shù)據(jù)轉(zhuǎn)發(fā)的編程中為了更容易掌控內(nèi)存分配和重用, 通常多用全局變量
發(fā)表于 11-29 13:21
?8次下載
在編譯程序是報錯:…\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問題
發(fā)表于 12-03 21:06
?18次下載
【GCC編譯】運行編譯后的程序報錯 error while loading shared libraries: lib*.so: cannot open shared object file
發(fā)表于 08-26 13:14
?7363次閱讀
問:怎么來改正“fixup”錯誤? 答:這里假定你已經(jīng)知道如何來定位導(dǎo)致fixup錯誤的代碼位置。如果不清楚,請參看前面的問答“怎么來定位"Fixup error"
發(fā)表于 01-22 15:03
?1235次閱讀
?當(dāng)程序發(fā)生故障時,正常情況下采用人為干預(yù),不可避免會影響生產(chǎn)效率,機器人編程時,可以通過Error Handler 這項功能來自動處理一些故障,提高生產(chǎn)效率。
發(fā)表于 05-26 09:23
?915次閱讀
評論