【亂整理】KEIL編譯錯誤,ERROR代碼分析解決彙總~

warning C206: 'delay': missing function-prototype

問題及解決:

函數體定義放在調用語句之後了,在調用該函數之前加入前置聲明就可以

 

*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL

問題及解決:

c/c++語言中有很多地方要用到extern,但是如果沒有真正的瞭解它的意義,會給編程帶來很大的麻煩,爲了使大家少走彎路,特祥細的說明一下。
      對於比較小的程序,一般只有一個c文件和一個頭文件,全局變量我們通常會直接定義在c文件中,在程序之前加int i定義。如果要在頭文件中定義有以下兩種方法:用extern來聲明:extern int i;這一句只是對變量i進行聲明,在c文件的程序之前必須加上int i進行定義。extern int i=0;這一句聲明和定義都做了。
    對於大一點的程序,有很多c文件和頭文件,這個時候全局變量就必須在頭文件中聲明(不需要初始化),然後在一個c文件中定義(該初始化的要初始化)。如果在頭文件中定義,則編譯的時候會出現重複定義的錯誤。如果只有頭文件中聲明就會出現沒有定義有警告。
   *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
       SYMBOL: K
       MODULE: 222.obj (222)
出現上述錯誤則是因爲變量k重複定義,把你的頭文件中的變量定義前加extern(只是變量聲明不用初始化),再在某一個你要調用該變量的c文件的程序之前再定義(注意第一個調用的c文件要負責附帶初始化該變量,其他調用的c文件就不需要初始化過程啦)

 

*** ERROR L107: ADDRESS SPACE OVERFLOW

*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT

問題及解決:

出現以上錯誤的原因主要是第一個原因,第一個原因導致了它下面所有錯誤,第一個原因是:

ERROR L107: ADDRESS SPACE OVERFLOW

SPACE: DATA 

SEGMENT: ?DT?GMNS_3V4

LENGTH: 0014H

說明data空間已經不夠用,原因是你可能有好多函數,而函數內部的局部變量又沒有定義其空間,這種情況下,系統會將變量分配到你在Otions for Target 對話框裏的設置的空間。如果你在下圖所示中的 Memory Model 裏設置成 Small:variables in DATA,則DATA空間很快便用完,導致data空間不夠用。解決的辦法有兩種,一是通過更改Memory Model設置,可以設置成pdata或xdata,以便有足夠大的空間,但這又帶來新的問題,程序運行速度減慢,而且code代碼也會加大,因爲如果一個局部變量被存放在了xdata空間,彙編語言訪問xdata空間的代碼大小要比訪問data空間的代碼大,變量一旦很多,程序的代碼也會逐漸增大;二是根據自己的要求設置變量的空間。所以這涉及到代碼優化的問題,遇到具體問題時,在運行速度和代碼大小之間取得適合自己的情況。

 

*** WARNING L13: RECURSIVE CALL TO SEGMENT
    SEGMENT: ?PR?FUNC
    CALLER:  ?PR?F_OK_OFF_SET_7?FUNC
當這類問題超過一定數量時,將導致下面的錯誤
** FATAL ERROR L232: APPLICATION CONTAINS TOO MANY RECURSIONS
問題及解決:

函數對自己進行了遞歸調用 

 

warning C316: unterminated conditionals
問題及解決:

該錯誤是說,你的AD_converter.c文件有一個凌亂的條件編譯或預編譯。因爲C語言中有時自己做頭文件,

頭文件中的預編譯或宏定義,那麼條件編譯就避免不了。那寫條件編譯時,可能有忘寫一個基本的語句。比

如說,你用了條件編譯#ifndef而忘記寫#endif。因爲他們本來就是配套的。有前者必有後者。不能丟掉其中

任何一個。就像你寫C語句,你不會寫了 int i   而不能忘記寫 " ; " 。總之,出現上述問題。先看看整個C文

件中是否出現上述錯誤。或整個工程中自己做的頭文件中。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章