2011-08-29 110 views
2

使用SDCC 3.0.0。 編譯此代碼使用SDCC編譯器警告

#include < pic16f84.h> 
void main(void) { 
TRISA0=0; 
RA0=1; 
} 

和接收這些警告。

代達羅斯@歐律狄刻:〜/項目/ PIC $ SDCC -I在/ usr /共享/ SDCC /包括/ PIC -p16f84 test.c的

/usr/share/sdcc/include/pic/pic16f84.h :101:警告182:sfr'INDF'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:101:warning 182:sfr'INDF'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:102:警告182:絕對地址SFR 'TMR0' 可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:102:警告182:sfr'TMR0'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:103:warning 182:sfr'PCL'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:103:警告182:絕對地址SFR 'PCL' 可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:104:warning 182:sfr'STATUS'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:104:警告182:絕對地址SFR '狀態' 可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:105:警告182:絕對地址SFR 'FSR' 可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:105:warning 182:sfr'FSR'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:106:warning 182:sfr'PORTA'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:106:warning 182:sfr'PORTA'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:107:warning 182:sfr'PORTB'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:107:warning 182:sfr'PORTB'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:108:warning 182:sfr'EEDATA'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:108:warning 182:sfr'EEDATA' 的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:109:warning 182:sfr'EEADR'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:109:warning 182:sfr'EEADR'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:110:warning 182:sfr'PCLATH'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:110:warning 182:sfr'PCLATH'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:111:warning 182:sfr'INTCON'的絕對地址可能超出範圍。

/usr/share/sdcc/include/pic/pic16f84.h:111:warning 182:sfr'INTCON'的絕對地址可能超出範圍。

?ASlink - 警告 - 未定義的全局「_TRISA_bits」參考模塊「測試」

?ASlink - 警告 - 未定義的全局「_PORTA_bits」參考模塊「測試」

誰能幫助我瞭解這些警告? 我應該在意嗎?

+0

這個問題可能更有可能在http://electronics.stackexchange.com/ – kenny

回答

1

免責聲明:我從來沒有工作在PIC

我的猜測是編譯器檢測到分配給這些變量的地址(這是SFR的 - 「特殊功能寄存器」)不中處理器的預期內存映射。 sfr語法看起來像__sfr __at (0x80) P0;這是將寄存器變量分配給特定地址。警告說這些地址似乎無效。

許多嵌入式編譯器工具鏈都包含某種「鏈接映射」命令文件,它告訴鏈接器在哪個物理地址中放置代碼和數據。 This SDCC user's guide建議您可以使用「.lkr」文件。 (見第68頁)。確保這對您的特定處理器是正確的。

此外,該手冊說,選擇圖片的正確標誌是-mpic16。你確定-p16f86選項是正確的嗎?

+0

謝謝ASEYly上產生答案。我從來不需要使用其他編譯器創建鏈接文件,所以這讓我措手不及。如何將.lnk文件指定給SDCC?我可以將它作爲頭文件包含在主C文件中嗎?你是正確的,因爲手冊確實說--mpic16是用於圖片。我看到一個使用-p16f84的例子,這就是我使用它的原因。他們產生相同的結果。 – Michael

+0

謝謝,我編輯瞭如何調用sdcc。 'sdcc -mpic16 -I/usr/share/sdcc/include -L 16f84.lkr scoreboard.c'然而,我現在得到一個錯誤「libdev18f452.lib:沒有這樣的文件或目錄」,沒有別的。 – Michael

+0

該男子也對此說到-mpic16選項。爲PIC 14位處理器生成代碼(開發中,不完整)。所以也許我正在用SDCC咆哮錯誤的樹。 – Michael