日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁 >> HDSC/華大 >> 國產(chǎn)超低功耗華大單片機(jī)KeilMDK編譯中常遇的錯(cuò)誤和警告匯總

國產(chǎn)超低功耗華大單片機(jī)KeilMDK編譯中常遇的錯(cuò)誤和警告匯總

關(guān)鍵字:小華單片機(jī) 單片機(jī)編程 作者: 來源: 發(fā)布時(shí)間:2020-06-08  瀏覽:362

在MDK的開發(fā)中編譯的時(shí)候會(huì)遇到各種問題,本文把開發(fā)中遇到的問題及相應(yīng)的解決辦法做個(gè)匯總,希望對(duì)大家有幫助。

說明:此顏色顯示的內(nèi)容為編譯器提示的錯(cuò)誤或警告;

此顏色顯示的內(nèi)容為用戶程序中的內(nèi)容具體的實(shí)際情況中會(huì)有不同。


error: #18: expected a ")"
如果是出現(xiàn)在c文件中, 多半是因?yàn)樯倭艘粋(gè)")",或者錯(cuò)誤行有編譯器不識(shí)別的字符;
如果出現(xiàn)在頭文件中,錯(cuò)誤行又是一個(gè)函數(shù)聲明,多半是因?yàn)樵诤瘮?shù)聲明中有編譯器不認(rèn)識(shí)的字符。


error: #20: identifier "TIM2_IRQChannel" is undefined
固件庫里的庫文件沒有添加進(jìn)工程里面,所以出現(xiàn)未定義的情況。
TIM2_IRQChannel指定時(shí)器2的中斷通道沒有定義,其實(shí)在固件庫對(duì)這些參數(shù)都有定義,宏定義代替了一串寄存器地址數(shù)據(jù)。需要將.C文件添加到工程文件中。

warning: #1-D: last line of file ends without a newline
這個(gè)是由于在main函數(shù)的“}”后,沒有加回車。只要在main函數(shù)的“}”后加回車鍵,此警告信息即可消除。

error:#65:expected a ";"
頭文件里的結(jié)構(gòu)體定義里的最后一行沒有加";" 如 NB menu{..};

Error: L6200E: Symbol temp multiply defined (by wenshidu.o and main.o).
變量賦值兩次,看看是不是那個(gè)外部變量又給賦值了,main.c申明,其他.c文件對(duì)應(yīng)的.h文件中用extern引用

warning: #223-D: function "_NOP_" declared implicitly
在使用的文件中添加extern void _NOP_();既可。

warning: #1295-D: Deprecated declaration CC_XCal - give arg types
沒有用形參 定時(shí)時(shí)用void CC_XCal(void);即可。

Error: L6218E: Undefined symbol ..................... (referred from xxxxx.o).Target not created
使用的函數(shù)沒有被定義。一般只要添加相應(yīng)的頭文件即可。

error: #101:“.........” has already been declared in the current scope
.......內(nèi)容已經(jīng)聲明過,解決辦法將#endif調(diào)整到最后!

error: #247: function "DelayUs" has already been defined
有一個(gè)同名的 DelayUs類已經(jīng)被定義過了

error: #109: expression must have (pointer-to-) function type
意思是表達(dá)式必須具有(指針指向)函數(shù)類型,這種情況大多是不同類型的數(shù)據(jù)定義或函數(shù)名定義重名了。

warning: #61-D
warning: #68-D:

在KeilARM的LPCARM,存在(1<<31)編譯警告問題
main.c(174): warning: #61-D: integer operation result is out of range
main.c(174): warning: #68-D: integer conversion resulted in a change of sign

由于編譯器默認(rèn)signed int即32位有符號(hào)整數(shù)類型,而1<<31實(shí)際為0x80000000,
這樣就有可能改寫了符號(hào)位(最高位)
依此類推,(2<<30),(3<<29)...等都會(huì)出現(xiàn)編譯警告問題.
解決辦法為: ((unsigned int)1<<31),((unsigned int)2<<30),...

warning: #1295-D: Deprecated declaration ShowSendTime - give arg types
解決方法:將void ShowSendTime()改為void ShowSendTime(void)

warning: #550-D: variable "d" was set but never used
描述:變量'd'定義但從未使用,或者是,雖然這個(gè)變量你使用了,但編譯器認(rèn)為變量d所在的語句沒有意義,編譯器把它優(yōu)化了.
解決:仔細(xì)衡量所定義的變量d是否有用,若是認(rèn)定變量d所在語句有意義,那么嘗試用volatile關(guān)鍵字修飾變量d,若是真的沒有用,那么刪除掉以釋放可能的內(nèi)存.

error: #159: declaration is incompatible with previous "wr_lcd" (declared at line 40)
void a(void) //函數(shù)a的實(shí)體
{
b(); //調(diào)用函數(shù)b
}
void b(void) //函數(shù)b的實(shí)體
{
...
}
這樣如果點(diǎn)編譯,就會(huì)產(chǎn)生error: #159的錯(cuò)誤,因?yàn)楫?dāng)函數(shù)a調(diào)用函數(shù)b時(shí),發(fā)現(xiàn)在這之前都沒有函數(shù)b的任何聲明.
解決方法:在函數(shù)a調(diào)用函數(shù)b之前,對(duì)函數(shù)b進(jìn)行聲明,如:
void b(void); //對(duì)函數(shù)b進(jìn)行聲明
void a(void) //函數(shù)a的實(shí)體
{
b(); //調(diào)用函數(shù)b
}
void b(void) //函數(shù)b的實(shí)體
{
...
}

error: #70: incomplete type is not allowed
描述:不允許不完整的類型。原因是數(shù)據(jù)的引入方法錯(cuò)誤。

正確的引入結(jié)構(gòu)體方法是;

1.在a.h中聲明這個(gè)結(jié)構(gòu)體,(結(jié)構(gòu)體實(shí)體要在.h文件中)

2.在a.c中定義這個(gè)結(jié)構(gòu)體類型的變量。(也可以在a.h中定義結(jié)構(gòu)體變量)

3.在b.c中ertern引入這個(gè)結(jié)構(gòu)體變量

當(dāng)ertern一個(gè)數(shù)組時(shí)如果不定義數(shù)組大小是也會(huì)出現(xiàn)error: #70: incomplete type is not allowed這個(gè)錯(cuò)誤。。

正確引入數(shù)組:

ertern char a[10];


warning: #111-D: statement is unreachable
描述:聲明不可能到達(dá).多出現(xiàn)在這種場(chǎng)合:
int main(void)
{
...
while(1) //無限循環(huán),這在不使用操作系統(tǒng)的程序中最常見
{
...
}
return 0; //這句聲明在正常情況下不可能執(zhí)行到,編譯器發(fā)出警告
}
解決:不理會(huì).

warning: C3017W: data may be used before being set
描述:變量'data'在使用前沒有明確的賦值.如:

warning: #177-D: variable "temp" was declared but never referenced
描述:變量'temp'進(jìn)行了聲明但沒有引用.多出現(xiàn)在聲明了一個(gè)變量,但卻沒有使用它,它和warning: #550-D: variable "temp" was set but never used不同之處在于temp從沒有使用過.
解決:若是定義的變量確實(shí)沒有用,刪除掉;若是有用,則在程序中使用.
與該警告類似的還有 warning: #177-D: function "MACProcessBeacon" was declared but never referenced

warning: #940-D: missing return statement at end of non-void function "DealwithInspect2"

描述:返回非空的函數(shù)"DealwithInspect2"的最后缺少返回值聲明.如:
int DealwithInspect2(uint32 test)
{
...
...
...
//此處應(yīng)該是return x;返回一個(gè)int型數(shù)據(jù),若是沒有返回值,編譯器產(chǎn)生警告
}

warning: #1295-D: Deprecated declaration lcd_init - give arg types
描述:在定義函數(shù)的時(shí)候,如果你寫上函數(shù)參數(shù),就會(huì)有這個(gè)警告,比如void timer_init(); 這里就沒有形參,如果這樣的話,編譯器會(huì)給出警告.

error: #65: expected a ";"
描述:缺少分號(hào).大多是漏忘';'.
解決:雙擊錯(cuò)誤行,在定位到錯(cuò)誤點(diǎn)的附近找到?jīng)]加';'號(hào)的語句,加上分號(hào).并不一定在定位到的錯(cuò)誤行才卻分號(hào),可能是這行的上一行,也可能是下一行.

error: #65: expected a ";"和 error: #20: identifier "xxxx" is undefined一塊出現(xiàn),而且后面的error: #20錯(cuò)誤可能一大堆
最可能是在.h文件聲明外部變量或者函數(shù)時(shí),沒有在聲明語句的最后加分號(hào)。
解決:仔細(xì)檢查.h文件,將分號(hào)補(bǔ)上.

Error: L6200E: Symbol flagu multiply defined (by uart0.o and main.o).
描述:變量(也是一種符號(hào))flagu多處定義.通常錯(cuò)在全局變量定義重復(fù).
解決辦法:找到重復(fù)定義的變量,看情況修改一處.

error: #137: expression must be a modifiable lvalue
描述:表達(dá)式必須是一個(gè)可以修改的數(shù)值.主要出現(xiàn)在這種現(xiàn)象:
a=NUM;
NUM是一個(gè)數(shù)值或表達(dá)式,a為一個(gè)變量,但a被定義為像const這種不可更改的類型,導(dǎo)致NUM不能賦值給變量a.
解決方法:要么放棄賦值,要么修改變量屬性.


error: #1113: Inline assembler not permitted when generating Thumb code
這條錯(cuò)誤是因?yàn)開_asm("指令");這種語法是內(nèi)聯(lián)匯編(inline assembly)的語法。而RMDK下,內(nèi)聯(lián)匯編僅支持ARM匯編語言,不支持Thumb或者Thumb-2匯編語言;但內(nèi)嵌匯編器支持Thumb和Thumb-2。
__asm放到一個(gè)單獨(dú)的子函數(shù)再被調(diào)用就沒問題了
如下:
__asm void nop(void)
{
NOP
}
然后在之后的C代碼中調(diào)用該函數(shù):
void main()
{
...
nop();
...
}

編輯:admin  最后修改時(shí)間:2023-03-06

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4

章丘市| 桓仁| 十堰市| 平泉县| 湖州市| 博兴县| 台前县| 平潭县| 南昌市| 丰县| 富平县| 洪江市| 静海县| 五华县| 抚远县| 华蓥市| 元氏县| 石狮市| 江北区| 文化| 清流县| 宿松县| 河南省| 永兴县| 炎陵县| 彩票| 彝良县| 永靖县| 临泽县| 那曲县| 长沙市| 旌德县| 建昌县| 河间市| 浦北县| 临湘市| 桐城市| 扎囊县| 封开县| 都安| 稻城县|