免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
使用keil編譯軟件的常見(jiàn)錯(cuò)誤

Error: L6200E

 Error: L6200E: Symbol temp multiply defined (by wenshidu.o and main.o).在編譯的時(shí)候出現(xiàn)了這個(gè)問(wèn)題,但是檢查不出來(lái),希望各位大俠幫幫忙

 什么變量你給付了兩次值

你看看是不是那個(gè)外部變量你又給賦值了

main.c申明,其他.c文件對(duì)應(yīng)的.h文件中用extern引用

error: #20

error: #20: identifier "TIM2_IRQChannel" is undefined 誰(shuí)能說(shuō)說(shuō),哪里錯(cuò)了

 

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

 

warning:  #1-D 

main.c(7): warning:  #1-D: last line of file ends without newline

 

當(dāng)使用keil編譯時(shí),彈出這樣的警告信息:main.c(7): warning:  #1-D: last line of file ends without newline 

這個(gè)是由于在main函數(shù)的“}”后,沒(méi)有加回車(chē)。

只要在main函數(shù)的“}”后加回車(chē)鍵,此警告信息即可消除。

error:#65

...test_menu.c(27):error:#65:expected ";"

 

分?jǐn)?shù)送你了,問(wèn)題在你回答之前已經(jīng)解決了,頭文件里的結(jié)構(gòu)體定義里的最后一行沒(méi)有加";" 如 NB menu{..};

error: #1113: 

折騰了大半天,才搞明白一個(gè)空操作的指令

先在網(wǎng)上查有的說(shuō)是__asm{NOP;},從intrins.h里調(diào)用,可犄角旮旯全找了,也沒(méi)看到什么intrint.h的文件。如果直接用,就出現(xiàn)error: #1113: Inline assembler not permitted when generating Thumb code 

最后搜索這條錯(cuò)誤,知道是因?yàn)?font face="Calibri">__asm("指令");這種語(yǔ)法是內(nèi)聯(lián)匯編(inline assembly)的語(yǔ)法。而RMDK下,內(nèi)聯(lián)匯編僅支持ARM匯編語(yǔ)言,不支持Thumb或者Thumb-2匯編語(yǔ)言;但內(nèi)嵌匯編器支持ThumbThumb-2。 
__asm放到一個(gè)單獨(dú)的子函數(shù)再被調(diào)用就沒(méi)問(wèn)題了

如下:
__asm void nop(void)
{
    NOP

}
然后在之后的C代碼中調(diào)用該函數(shù):
void main()
{
...

nop();

... 

 

最新更新

來(lái)自KEIL官網(wǎng)

 

 

 

warning:  #223-D

..\..\source\CCxx00_New.C(718): warning:  #223-D: function "_NOP_" declared implicitly

在使用的文件中添加extern void _NOP_();既可

warning:  #1295-D

..\..\include\CCxx00_New.h(20): warning:  #1295-D: Deprecated declaration CC_XCal give arg types

沒(méi)有用形參 定時(shí)時(shí)用void CC_XCal(void);即可

 

Error: L6218E: Undefined symbol

.\Obj\output.axf: Error: L6218E: Undefined symbol FSMC_NORSRAMCmd (referred from tft_lcd.o).
.\Obj\output.axf: Error: L6218E: Undefined symbol FSMC_NORSRAMInit (referred from tft_lcd.o).
Target not created
請(qǐng)教高人,我該如何處理。

 

你看看tft_lcd里面有沒(méi)有添加fsmcXXX.h之類(lèi)的頭文件,這個(gè)錯(cuò)誤是說(shuō)你使用的函數(shù)沒(méi)有被定義。
一般只要添加相應(yīng)的頭文件即可

error: #101:

error: #101: has already been declared in the current scope

 

#ifndef __STM32F10x_LIB_H

#define __STM32F10x_LIB_H

#endif調(diào)整到最后!

error: #247: function "DelayUs" has already been defined

有一個(gè)同名的 DelayUs類(lèi)已經(jīng)被定義過(guò)了

 

error:  #109: expression must have (pointer-to-) function type

這個(gè)問(wèn)題就是那19個(gè)error中的大部分,意思是表達(dá)式需要一個(gè)(指針)函數(shù)參數(shù),我一開(kāi)始以為是自己函數(shù)聲明或者調(diào)用上的錯(cuò)誤,但是看了下發(fā)現(xiàn)并沒(méi)有錯(cuò),后來(lái)查了好久發(fā)現(xiàn)原來(lái)是犯了一個(gè)很低級(jí)的錯(cuò)誤:將宏定義和函數(shù)名重名了。因?yàn)槲乙婚_(kāi)始想的是每一個(gè)宏定義對(duì)應(yīng)一個(gè)函數(shù)名,這樣做起來(lái)就比較清晰,但是我卻很傻逼地將函數(shù)名每次直接復(fù)制到宏名,導(dǎo)致了這種蛋碎的結(jié)果。

 

warning:  #61-D

warning:  #68-D:

KeilARMLPCARM,存在(1<<31)編譯警告問(wèn)題

main.c(174): warning:  #61-D: integer operation result is out of range
main.c(174): warning:  #68-D: integer conversion resulted in change of sign

由于編譯器默認(rèn)signed int32位有符號(hào)整數(shù)類(lèi)型,1<<31實(shí)際為0x80000000,

這樣就有可能改寫(xiě)了符號(hào)位(最高位)

依此類(lèi)推,(2<<30),(3<<29)...等都會(huì)出現(xiàn)編譯警告問(wèn)題.

解決辦法為((unsigned int)1<<31),((unsigned int)2<<30),...

 

warning:  #1295-D: 

warning:  #1295-D: Deprecated declaration ShowSendTime give arg types

解決方法:將void ShowSendTime()改為void ShowSendTime(void)

 

warning:  #550-D:

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

 

error:  #159:

.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)在這之前都沒(méi)有函數(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:

error:  #70: incomplete type is not allowed

原來(lái)是重復(fù)定義了,包含了兩次的psock的定義,所以才會(huì)出現(xiàn)這種情況。因?yàn)槲野l(fā)現(xiàn)psockpt是一樣定義的,但是pt是不報(bào)錯(cuò)的,所以我就試圖刪除頭文件中include頭文件的那一行,錯(cuò)誤消除了,謝謝你了,還是實(shí)踐出真知啊,有些時(shí)候不能死編,要思考,哈哈。

 

 

keil MDK編譯器警告和錯(cuò)誤詳解(不定期更新

工作后從單片機(jī)轉(zhuǎn)成ARM,剛開(kāi)始用ADS1.2編譯器,用了一段時(shí)間,因?yàn)槲医邮值捻?xiàng)目的老程序正是用ADS編譯的,部門(mén)也大都在用.在學(xué)單片機(jī)的時(shí)候用的是keil c51編譯器,ads和這個(gè)編譯器在易用性上真是無(wú)法比較.后來(lái)漸漸知道keil已經(jīng)被arm公司收購(gòu),現(xiàn)在keil MDK成為了arm官方編譯器,所以決定重新投奔keil,利用平時(shí)的時(shí)間,將原程序重新用mdk編譯.mdk的優(yōu)點(diǎn)就沒(méi)必要說(shuō)了,在這里把平時(shí)遇到的編譯器給出的警告和錯(cuò)誤信息給出詳解,希望給初學(xué)者一點(diǎn)幫助,發(fā)現(xiàn)錯(cuò)誤,需要補(bǔ)充的歡迎留言.

warning: #550-D:

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

warning: #1-D:

2.warning: #1-D: last line of file ends without newline
描述:文件最后一行不是新的一行.編譯器要求程序文件的最后一行必須是空行,想了半天沒(méi)想通為什么要這樣.
解決:可以不理會(huì).若是覺(jué)得出現(xiàn)警告不爽,那么在出現(xiàn)警告的文件的最后一行敲個(gè)回車(chē),空出一行.

warning: #111-D:

3. warning: #111-D: statement is unreachable
描述:聲明不可能到達(dá).多出現(xiàn)在這種場(chǎng)合:
int main(void)
{
...

while(1) //無(wú)限循環(huán),這在不使用操作系統(tǒng)的程序中最常見(jiàn)
{
...

}

return 0; //這句聲明在正常情況下不可能執(zhí)行到,編譯器發(fā)出警告
}

解決:不理會(huì).

 

warning: C3017W:

4warning: C3017W: data may be used before being set
描述:變量'data'在使用前沒(méi)有明確的賦值.:
uint8 i,data; //定義變量idata,二者都沒(méi)有明確賦值

for 0; 8; i++) //變量'i'在語(yǔ)句中被賦值0
{
if IO1PIN SO_CC2420 )
data |= 0x01; //變量'data'在使用前沒(méi)有明確賦值,編譯器發(fā)出警告
else
data &= ~0x01;
}
解決:應(yīng)仔細(xì)衡量該變量的初始值是否為0,若是,可以不理會(huì)這個(gè)警告,因?yàn)?/font>MDK編譯器在程序執(zhí)行前,會(huì)將使用到的數(shù)據(jù)區(qū)初始化為0,但若是該變量的初始值不應(yīng)該是0,忽略這個(gè)警告可能會(huì)引起致命錯(cuò)誤.這個(gè)警告應(yīng)引起足夠重視.應(yīng)養(yǎng)成變量賦初值的習(xí)慣,好在有編譯器給把關(guān).

warning: #177-D:

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

warning: #940-D:

6. 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ù),若是沒(méi)有返回值,編譯器產(chǎn)生警告
}

.warning: #1295-D:

7..warning: #1295-D: Deprecated declaration lcd_init give arg types

描述:在定義函數(shù)的時(shí)候,如果你寫(xiě)上函數(shù)參數(shù),就會(huì)有這個(gè)警告,比如void timer_init(); 這里就沒(méi)有形參,如果這樣的話(huà),編譯器會(huì)給出警告.

error: #65:

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

error: #65: error: #20

2. error: #65: expected ";"和 error: #20: identifier "xxxx" is undefined一塊出現(xiàn),而且后面的error: #20錯(cuò)誤可能一大堆
描述:這個(gè)錯(cuò)誤對(duì)于第一次遇上的人來(lái)說(shuō)絕對(duì)是個(gè)噩夢(mèng),當(dāng)錯(cuò)誤出現(xiàn),滿(mǎn)懷希望的雙擊錯(cuò)誤提示,來(lái)到錯(cuò)誤行時(shí)卻愕然發(fā)現(xiàn),錯(cuò)誤行絕對(duì)沒(méi)有錯(cuò),于是找找錯(cuò)誤行的上一行,下一行,沒(méi)有錯(cuò)誤,再找上上行,下下行...讓人無(wú)比郁悶的事情出現(xiàn)了:編譯提示的所有錯(cuò)誤行都不可能有錯(cuò)誤出現(xiàn).其實(shí)這最可能是你在.h文件聲明外部變量或者函數(shù)時(shí),沒(méi)有在聲明語(yǔ)句的最后加分號(hào)!如果你有很多模塊,main.c,lcd.c,key.c...有很多頭文件,lcd.h,key.h,若是在lcd.h文件聲明函數(shù)時(shí)沒(méi)有加分號(hào),那么這種錯(cuò)誤可能定為到main.c,所以要檢查所有頭文件.
解決:仔細(xì)檢查.h文件,將分號(hào)補(bǔ)上.

Error: L6200E:

3Error: L6200E: Symbol flagu multiply defined (by uart0.o and main.o).

描述:變量(也是一種符號(hào))flagu多處定義(uart0.c中和main.c都定義了).通常錯(cuò)在全局變量定義重復(fù).比如:main.c中定義全局變量flagu:

uint8 flagu=0;

uart0.c中也用到該變量,于是聲明此變量,我通常都是先復(fù)制定義的變量再在變量前面加關(guān)鍵字extern修飾:

extern uint8 flagu=0;

然后編譯,就會(huì)出現(xiàn)上面的連接錯(cuò)誤,原因在于,我在uart0.c中是又定義了一個(gè)變量,而不是聲明變量,因?yàn)槲医o變量賦了初值"flagu=0",這樣就重復(fù)定義了變量flag.正確的聲明方法是去掉賦值部分:

extern uint8 flagu;

解決辦法:找到重復(fù)定義的變量,看情況修改一處.

error: #159:

4.error: #159: declaration is incompatible with previous "wr_lcd" (declared at line 40)
描述:wr_lcd函數(shù)還沒(méi)有聲明之前就已經(jīng)使用了.多出現(xiàn)在兩種情況:第一種,wr_lcd函數(shù)體還沒(méi)有寫(xiě),就已經(jīng)用到了它,這種情況多出現(xiàn)在寫(xiě)一個(gè)程序的大體結(jié)構(gòu)中,只是簡(jiǎn)單寫(xiě)一下框架.第二種情況比較常見(jiàn),函數(shù)a調(diào)用函數(shù)b,但函數(shù)b的函數(shù)體在函數(shù)a的下面:
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)在這之前都沒(méi)有函數(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: #137:

5. error: #137: expression must be modifiable lvalue

描述:表達(dá)式必須是一個(gè)可以修改的左值.主要出現(xiàn)在這種現(xiàn)象:

a=NUM;

NUM是一個(gè)數(shù)值或表達(dá)式,a為一個(gè)變量,a被定義為像const這種不可更改的類(lèi)型,導(dǎo)致NUM不能賦值給變量a.

解決方法:要么放棄賦值,要么修改變量屬性.

.error: #18:

6.error: #18: expected ")"
如果是出現(xiàn)在c文件中多半是因?yàn)樯倭艘粋€(gè)")",或者錯(cuò)誤行有編譯器不識(shí)別的字符

如果出現(xiàn)在頭文件中,錯(cuò)誤行又是一個(gè)函數(shù)聲明,多半是因?yàn)樵诤瘮?shù)聲明中有編譯器不認(rèn)識(shí)的字符


ERRORL107: ADDRESS SPACE OVERFLOW

KEIL選用small模式編譯一個(gè)程序時(shí)老時(shí)出錯(cuò),信息如下。 

*** ERROR L107: ADDRESS SPACE OVERFLOW 
... ... 
Program Size: data=217.6 xdata=0 code=5314 
Target not created 

芯片我選的是AT89C52,RAM256呀,怎么會(huì)OVERFLOW呢? 
但是如果編譯模式選用Compactlarge時(shí)就一切正常。 
... ... 
Program Size: data=110.6 xdata=111code=5914 
"test" - 0 Error(s), 22 Warning(s). 

--------------------------------------------------------------- 

另外的可能性:

比如全局變量中定義的過(guò)多如下所示:

ucharxpos,ypos;

uchardisbac;

ucharcoma1,comb1,comc1,coma2,comb2,comc2;

ucharmap[35];

ucharbuff[35];

局變量是不是用得太多了,另外用的是什么單片機(jī),RAM總共有多大,定義變量的時(shí)候

一定要注意變量是定義在那個(gè)區(qū)域的,系統(tǒng)默認(rèn)為直接尋址DATA區(qū),DATA區(qū)只有128個(gè)字節(jié),很容易用完和溢出的,

51單片機(jī)超出128個(gè)字節(jié)的RAM區(qū)定義變量的時(shí)候一定要要變里前面加IDATA,

這樣表明這個(gè)變量是定義在IDATA區(qū)的,IDATA區(qū)是128256之間的間接尋址RAM區(qū).

 

建意你在全局變量和數(shù)組前都加在IDATA

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服