源程序中代碼的優化和ICCAVR常見的錯誤代碼及其解釋_第1頁
源程序中代碼的優化和ICCAVR常見的錯誤代碼及其解釋_第2頁
源程序中代碼的優化和ICCAVR常見的錯誤代碼及其解釋_第3頁
源程序中代碼的優化和ICCAVR常見的錯誤代碼及其解釋_第4頁
源程序中代碼的優化和ICCAVR常見的錯誤代碼及其解釋_第5頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

源程序中代碼的優化和ICCAVR常見的錯誤代碼及其解釋源程序中代碼的優化和ICCAVR常見的錯誤代碼及其解釋源程序中代碼的優化和ICCAVR常見的錯誤代碼及其解釋xxx公司源程序中代碼的優化和ICCAVR常見的錯誤代碼及其解釋文件編號:文件日期:修訂次數:第1.0次更改批準審核制定方案設計,管理制度源程序中代碼的優化和ICCAVR常見的錯誤代碼及其解釋(1)用移位實現乘除法運算

a=a*4;

b=b/4;

可以改為:

a=a<<2;

b=b>>2;

說明:通常如果需要乘以或除以2n,都可以用移位的方法代替。在ICCAVR中,如果乘以2n,都可以生成左移的代碼,而乘以其它的整數或除以任何數,均調用乘除法子程序。用移位的方法得到代碼比調用乘除法子程序生成的代碼效率高。實際上,只要是乘以或除以一個整數,均可以用移位的方法得到結果,如:

a=a*9

可以改為:

a=(a<<3)+aICCAVR常見的錯誤代碼及其解釋!ECan'topeninputfileC:\Documents

錯誤分析:錯誤提示的大體意思是:無法打開C盤根目錄下的文件“Documents”。事實上,我們都知道這里的Documents顯然是DocumentsandSetting文件夾名稱的前一個單詞。ICC并不支持路徑名稱中含有空格,因此系統將DocumentsandSetting的第一個空格認作是分隔符,將and和Setting及其以后的東西都認作是參數。這樣看來,Documents并不是一個存在的文件,自然無法打開,于是我們就看到了這樣的錯誤提示。

解決方法:將文件拷貝到一個路徑名中不含空格的文件夾中。

!E(XXXXX):cannotincludesourcefile"";filenotfound

錯誤分析:在ICC7以下的版本中,系統并不會自動到安裝目錄下的include文件夾中尋找所需的頭文件。此時,如果我們未能正確的通過Project->Option->Paths選項卡設定正確的路徑,就會看到以上的提示。當然,如果工程中使用的某些頭文件路徑不正確的話,也會看到這樣的提示。解決方法:如果信息提示缺失的是系統頭文件,正確設定Paths選項卡即可;如果信息提示缺失的是用戶頭文件,我們應該查找頭文件的正確位置,并修改程序中的包含信息。

!ERRORfile'':undefinedsymbol'_main'

錯誤分析:工程中所有的.c文件里都沒有main函數。

解決方法:補充main函數

!E(XXXXX):'text'areasizetoolarge(>64Kbytes).Pleasemovesomecodetoanotherfile

錯誤分析:在ICC的未注冊版本中,往往存在單個.c文件允許編譯代碼的最大限制。這就是著名的64K代碼限制。按照系統的提示,將一個.c文件中的部分代碼轉移到別的.c文件中,有時候能夠解決問題。

解決方法:購買正版ICC。或者嘗試將一個.c文件中的部分代碼轉移到另外一個.c文件中。!E<library>(0):area'bss'notlargeenoughwantsize1024lo260hi767size508

錯誤分析:bss段是編譯器存放全局數組和局部靜態數組的地方。如果我們在編寫程序時聲明了過大的數組、或局部靜態數組,就有可能看到這個提示。

解決方法:如果某些數組是常量,我們就可以增加const關鍵字,將其放到空間相對寬裕的FLASH中(例如段碼表、字模等)。對于其他情況,就只有簡化程序或者外擴SRAM存儲器了。

!E<library>(101):area'data'notlargeenough

錯誤分析:data段是編譯器放置全局變量和靜態局部變量的地方。如果我們聲明了過多的全局變量和局部靜態變量,就有可能看到這個提示。

解決方法:簡化程序或者外擴SRAM存儲器。

!E(XXXXX):Codeaddress0alreadycontainsavalue

!E(XXXXX):Codeaddress0x1alreadycontainsavalue

錯誤分析:如果我們在編譯程序前忘記或者沒有正確選擇單片機型號,就會看到這個提示解決方法:檢查Project->Option->Target選項卡中是否選擇了正確的器件型號

!E(XXXXX):macronamemissedin"#define"

錯誤分析:代碼中存在未完成的宏定義語句,例如:#define解決方法:完成該宏的編寫或者直接刪除.

!E(XXXXX):unrecognizedstatement

!E(XXXXX):syntaxerror;found`}'exp!E(XXXXX):syntaxerror;found`endofinput'expecting'}'

錯誤分析:代碼中缺少指定位置的分號.當然,還有很多其他原因導致類似的錯誤提示。找出這些隱含的錯誤往往需要耐心、經驗甚至是運氣。解決方法:視情況補充分號即可

!E(XXXXX):illegalcharacter`\0243'!E(XXXXX):illegalcharacter`\0273'錯誤分析:代碼中指定位置出現了中文分號解決方法:將中文分號換為西文分號

!E(XXXXX):undeclaredidentifier`a'錯誤分析:代碼中指定位置出現了從未定義過的變量.錯誤的大小寫.單詞拼寫錯誤、下劃線錯誤等都有可能導致這類錯誤。

解決方法:檢查變量聲明,更正拼寫錯誤。如果真的是忘記了變量聲明,在合適的位置補充即可。!E(XXXXX):illegalstatementtermination!E(XXXXX):skipping'int'!E(XXXXX):undeclaredidentifier`a'!W(XXXXX):[warning]expressionwithnoeffectelided錯誤分析:這種錯誤的出現,原因相當隱蔽。注意以下代碼:

voidFunction(void){FuncA();inta=0;……}

在這段代碼中,在聲明變量a之前,程序已經執行了其他操作,這在AISN-C中是不允許的.正確的做法是將變量的聲明移動到緊隨花括號的位置。甚至可以這樣:voidFunction(void){FuncA();.....{inta=0;.....}}

不過需要強調的是,在這種情況下,變量a僅在第二對花括號內有效,這是變量的作用域法則所決定的解決方法:將變量的聲明移動到正確的位置。

!E(XXXXX):redeclarationof`FuncA'previouslydeclaredat(XXXXX)錯誤分析:該錯誤提示大體意思是:發生了函數重復定義,排除函數名沖突這種原因之后,模塊內部函數聲明部分和函數實體結構部分不一致通常是導致這種錯誤的元兇。例如:

//模塊內對函數進行了聲明

voidFuncA(unsignedcharcData);//函數實體部分卻寫成

viodFuncA(viod)

{

……

}

解決方法:首先排除函數聲明和函數實體結構不一致的情況,如果問題依舊,就需要查找是不是真的有重名函數存在

!E(XXXXX):typeerrorinargument

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論