MDK常見報錯 編譯arm

2021-06-27 14:30:49 字數 2608 閱讀 1410

1.warning: #550-d: variable "d" was set but never used

描述:變數'd'定義但從未使用,或者是,雖然這個變數你使用了,但編譯器認為變數d所在的語句沒有意義,編譯器把它優化了.

解決:仔細衡量所定義的變數d是否有用,若是認定變數d所在語句有意義,那麼嘗試用volatile關鍵字修飾變數d,若是真的沒有用,那麼刪除掉以釋放可能的記憶體.

2.warning: #1-d: last line of file ends without a newline

描述:檔案最後一行不是新的一行.編譯器要求程式檔案的最後一行必須是空行,想了半天沒想通為什麼要這樣.

解決:可以不理會.若是覺得出現警告不爽,那麼在出現警告的檔案的最後一行敲個回車,空出一行.

3. warning: #111-d: statement is unreachable

描述:宣告不可能到達.多出現在這種場合:

int main(void)

return 0; //這句宣告在正常情況下不可能執行到,編譯器發出警告

}解決:不理會.

4. warning: c3017w: data may be used before being set

描述:變數'data'在使用前沒有明確的賦值.如:

uint8 i,data; //定義變數i和data,二者都沒有明確賦值

for ( i = 0; i < 8; i++) //變數'i'在語句中被賦值0

解決:應仔細衡量該變數的初始值是否為0,若是,可以不理會這個警告,因為mdk編譯器在程式執行前,會將使用到的資料區初始化為0,但若是該變數的初始值不應該是0,忽略這個警告可能會引起致命錯誤.這個警告應引起足夠重視.應養成變數賦初值的習慣,好在有編譯器給把關.

5. warning: #177-d: variable "temp" was declared but never referenced

描述:變數'temp'進行了宣告但沒有引用.多出現在宣告了乙個變數,但卻沒有使用它,它和warning: #550-d: variable "temp" was set but never used不同之處在於temp從沒有使用過.

解決:若是定義的變數確實沒有用,刪除掉;若是有用,則在程式中使用.

與該警告類似的還有 warning: #177-d: function "macprocessbeacon" was declared but never referenced

6. warning: #940-d: missing return statement at end of non-void function "dealwithinspect2"

描述:返回非空的函式"dealwithinspect2"的最後缺少返回值宣告.如:

int dealwithinspect2(uint32 test)

7.1. error: #65: expected a ";"

描述:缺少分號.大多是漏忘';'.

解決:雙擊錯誤行,在定位到錯誤點的附近找到沒加';'號的語句,加上分號.並不一定在定位到的錯誤行才卻分號,可能是這行的上一行,也可能是下一行.

2. error: #65: expected a ";"和 error: #20: identifier "***x" is undefined一塊出現,而且後面的error: #20錯誤可能一大堆

解決:仔細檢查.h檔案,將分號補上.

3. error: l6200e: symbol flagu multiply defined (by uart0.o and main.o).

描述:變數(也是一種符號)flagu多處定義(在uart0.c中和main.c都定義了).通常錯在全域性變數定義重複.比如:在main.c中定義全域性變數flagu:

uint8 flagu=0;

在uart0.c中也用到該變數,於是宣告此變數,我通常都是先複製定義的變數再在變數前面加關鍵字extern修飾:

extern uint8 flagu=0;

然後編譯,就會出現上面的連線錯誤,原因在於,我在uart0.c中是又定義了乙個變數,而不是宣告變數,因為我給變數賦了初值"flagu=0",這樣就重複定義了變數flag.正確的宣告方法是去掉賦值部分:

extern uint8 flagu;

解決辦法:找到重複定義的變數,看情況修改一處.

4.error: #159: declaration is incompatible with previous "wr_lcd" (declared at line 40)

描述:在wr_lcd函式還沒有宣告之前就已經使用了.多出現在兩種情況:第一種,wr_lcd函式體還沒有寫,就已經用到了它,這種情況多出現在寫乙個程式的大體結構中,只是簡單寫一下框架.第二種情況比較常見,函式a呼叫函式b,但函式b的函式體在函式a的下面:

void a(void) //函式a的實體

void b(void) //函式b的實體

這樣如果點編譯,就會產生error: #159的錯誤,因為當函式a呼叫函式b時,發現在這之前都沒有函式b的任何宣告.

解決方法:在函式a呼叫函式b之前,對函式b進行宣告,如:

void b(void); //對函式b進行宣告

void a(void) //函式a的實體

void b(void) //函式b的實體

supervisor常見報錯

基本思路 首先我們要明確問題出在supervisor上還是啟動的程式上,可以用ps ef grep supervisord檢視是否啟動,在用ps檢視自己的程序有沒有啟動 確認下啟動的supervisor配置檔案是哪個,有的是 etc supervisor supervisord.conf,有的是 e...

常見報錯整理

原因 後台可能有node占用3000埠 查詢埠占用情況命令 netstat ano 檢視被占用埠對應的pid,輸入命令 netstat aon findstr 49157 回車,記下最後一位數字,即pid,這裡是2720 繼續輸入tasklist findstr 2720 回車,檢視是哪個程序或者程...

pyCharm常見報錯

出錯原因 pycharm中存在相同名字的虛擬環境變數。解決方法 刪除同名工程。1.我在給專案配虛擬環境裡的直譯器的時候有沒有遇到過這個問題的啊,就是乙個正常的專案,直譯器忽然丟了,直譯器是配在虛擬環境裡面的,再去選擇直譯器就一直報這個錯,給現有專案新增虛擬環境的時候也是報這個錯 pycharm pl...