C51-keil編譯常見(jiàn)錯(cuò)誤和警告處理53
掃描二維碼
隨時(shí)隨地手機(jī)看文章
keil錯(cuò)誤;C51編譯器識(shí)別錯(cuò)類(lèi)型有三種;1、致命錯(cuò)誤:偽指令控制行有錯(cuò),訪問(wèn)不存在的原文;2、語(yǔ)法及語(yǔ)義錯(cuò)誤:語(yǔ)法和語(yǔ)義錯(cuò)誤都發(fā)生在原文件;3、警告:警告出現(xiàn)并不影響目標(biāo)文件的產(chǎn)生,但執(zhí)行;C_51FATAL_ERRORACTION:&l;ERROR:<錯(cuò)誤信息>termin;FILE:<錯(cuò)誤所在文件>;ERROR:<錯(cuò)誤信
keil錯(cuò)誤
C51編譯器識(shí)別錯(cuò)類(lèi)型有三種
1、致命錯(cuò)誤:偽指令控制行有錯(cuò),訪問(wèn)不存在的原文件或頭文件等。
2、語(yǔ)法及語(yǔ)義錯(cuò)誤:語(yǔ)法和語(yǔ)義錯(cuò)誤都發(fā)生在原文件中。有這類(lèi)錯(cuò)誤時(shí),給出 提示但不產(chǎn)生目標(biāo)文件,錯(cuò)誤超過(guò)一定數(shù)量才終止編譯。
3、警告:警告出現(xiàn)并不影響目標(biāo)文件的產(chǎn)生,但執(zhí)行時(shí)有可能發(fā)生問(wèn)題。程序 員應(yīng)斟酌處理。 D.1 致命錯(cuò)誤
C_51 FATAL_ERROR ACTION: <當(dāng)前行為> LINE: <錯(cuò)誤所在行>
ERROR: <錯(cuò)誤信息> terminated 或C_51 FATAL ERROR ACTION: <當(dāng)前行為>
FILE: <錯(cuò)誤所在文件>
ERROR: <錯(cuò)誤信息> terminated C_51 TERMINATED C_51 (1) ACTION 的有關(guān)信息
*PARSING INVOKE-/#PRAGMA_LINE
在對(duì)#pragma 指明的控制行作此法分析時(shí)出錯(cuò)。 *ALLOCATING MEMORY
系統(tǒng)分配存儲(chǔ)空間時(shí)出錯(cuò)。編譯較大程序需要512k空間。 *OPENING INPUT_FILE
打開(kāi)文件時(shí),未找到或打不開(kāi)源文件/頭文件。
*CREATE LIST_FILE/OBJECT_FILE/WORK_FILE 不能創(chuàng)建上述文件??赡艽疟P(pán)滿或文件已存在而且寫(xiě)保護(hù)。 *PARSING SOURCE_FILE/ANALYZING DECLARATIONS
分析源程序時(shí)發(fā)現(xiàn)外部引用名太多。 *GENERATING INTERMEDIATE CODE
源代碼被翻譯成內(nèi)部偽代碼,錯(cuò)誤可能來(lái)源于函數(shù)太大而超過(guò)內(nèi)部極限。 *WRITING TO FILE
在向文件(work,list,prelist或object file)寫(xiě)時(shí)發(fā)生錯(cuò)誤。 (2)ERROR的有關(guān)信息
*MEMORY SPACE EXHAUSTED
所有可用系統(tǒng)空間耗盡。至少需要512k 字節(jié)空間。沒(méi)有足夠空間,用戶必須檢查常駐內(nèi)存 的驅(qū)動(dòng)程序是否太多。 *FILE DOES NOT EXIST FILE 行定的文本文件名未發(fā)現(xiàn)。 *CAN?T CREAT FILE
FILE行定義的文件不能被創(chuàng)建。
*SOURCE MUST COME FROMA DISK_FILE
源文件和頭文件必須存在于硬盤(pán)或軟盤(pán)上??刂婆_(tái)、CON、CI 或類(lèi)似設(shè)備不允許作為輸入 文件。
*MORE THAN 256 SEGMENTS/PUBLICS/EXTERNALS
受OMF_51的歷史限制,一個(gè)源程序不能超過(guò)256個(gè)各種函數(shù)的類(lèi)型段,256個(gè)全局變量, 256 個(gè)公共定義或外部引用名。不使用為變量可以減少使用的段數(shù)。使用static 存儲(chǔ)類(lèi)型說(shuō)
明符可減少全局變量的使用數(shù)目。合理調(diào)整定義性說(shuō)明的位置可減少外部引用名的使用數(shù) 目。
*FILEWRITE ERROR
當(dāng)向list、prelist、work或object文件中寫(xiě)內(nèi)容時(shí),由于空間不夠而發(fā)生錯(cuò)誤。 *NON_NULLARGUMENT EXPECTED
所選的控制參數(shù)需要一個(gè)括號(hào)內(nèi)的變量,如一個(gè)文件夾或一個(gè)數(shù)。 *“(”AFTER CONTROL EXPECTED 變量的左括號(hào)丟失。
*“)”AFTER PARAMETER EXPECTED 變量的右括號(hào)丟失。
*RESPECIFIED OR CONFLICTING CONTROL
所選的控制參數(shù)與前面發(fā)生沖突或重復(fù),例如CODE和NOCOND *BAD DECIMAL NUMBER
控制參數(shù)的數(shù)字含有非法數(shù),需要使用十進(jìn)制數(shù)。 *OUT OF RANGE DECIMAL NUMBER
控制參數(shù)的數(shù)字越界,例如OPTIMIZE 的參量為0-5。
*IDENTIFIER EXPECTED
控制參數(shù)DEFINE 需要一個(gè)標(biāo)識(shí)符做參量,與C語(yǔ)言的規(guī)則相同。
*PARSE STACK OVERFLOW
分析棧溢出。可能是源程序包含特別復(fù)雜的表達(dá)式,或功能塊嵌套數(shù)超過(guò)15。 *PREPOCESSOR: MACRO TO NESTED
宏擴(kuò)展期間,預(yù)處理器的棧耗用太大。表明宏嵌套太多,或有遞歸宏定義。 *PREPOCESSOR: LINE TOO LONG(510) 宏擴(kuò)展后行超過(guò)510個(gè)字符。
*CAN?T HAVE GENERAL CONTROL IN INVOCATION LINE
一般控制(如EJECT)不能是命令行的一部分,應(yīng)將它們放入源文件“pragma”預(yù)處理行 中。
D.2 語(yǔ)法及語(yǔ)義錯(cuò)誤 D.2.1 錯(cuò)誤格式
這類(lèi)錯(cuò)誤在列表文件中產(chǎn)生如下格式的信息:
***ERROR
表示源文件或頭文件中與錯(cuò)誤或警告相關(guān)的行;
*ERROR100:unprintable character 0x??skipped
源文件中發(fā)現(xiàn)非法字符(注意,注解內(nèi)的字符不做檢查)。 *ERROR101:unclosed string 串未用引號(hào)結(jié)尾。
*ERROR 102:string too long
串不得超過(guò)511 個(gè)字符。為了定義更長(zhǎng)的串,用戶必須使用續(xù)行符??邏輯的繼續(xù)該串, 在詞匯分析時(shí)遇到以該符號(hào)結(jié)尾的行會(huì)與下行連接起來(lái)。 *ERROR 103: invalid character constant
試圖再聲明一個(gè)已定義的宏,已存在的宏可以用#undef指令刪除。預(yù)定義的宏不能刪除。 *ERROR 104: identifier expected
預(yù)處理器指令期望產(chǎn)生一個(gè)標(biāo)示符,如ifdef
當(dāng)注解無(wú)結(jié)束界定符(*/)時(shí)產(chǎn)生此錯(cuò)誤。 *EROOR 106: unbalanced#if-endif controls endif的數(shù)量與if或ifdef的數(shù)量不匹配。 *ERROR 107:include file nesting exceeds 9 include指令后的文件名無(wú)效或丟失
*ERROR 108: expected string,如#error “string” 預(yù)處理器指令期望一個(gè)串變量。
*ERROR 109:
由#error 偽指令引入的錯(cuò)誤信息以錯(cuò)誤信號(hào)形式顯示。 *ERROR 110:missing directive 預(yù)處理行#后缺少偽指令。
*ERROR 111:unknown directive 預(yù)處理行#后不是偽指令。 *ERROR 112:misplaced ?elif?
*ERROR 113:misplaced ?else? *ERROR 114:misplaced ?endif?
指令elif/else/endif只有在if、ifdef、ifndef指令內(nèi)才是合法的。 *ERROR 117:bad integer expression if/elif指令的數(shù)值表達(dá)式有語(yǔ)法錯(cuò)誤。
*ERROR 118:missing?(?after macro identifier 宏調(diào)用中實(shí)參表的左括號(hào)丟失
*ERROR 119:reuse of macro formal parameter 宏定義形參名重復(fù)使用
*ERROR 120:?C?unexpected in formal list 形參表中不允許有字符?c?,應(yīng)用逗號(hào)代替 *ERROR 121:missing ?)?after actual parameter 宏調(diào)用實(shí)參表的右括號(hào)丟失
*ERROR 122:illegal macro invocation 宏調(diào)用的實(shí)參表與宏定義中的形參表不同 *ERROR 123:missing macro name after ?define? #define 偽指令后缺預(yù)定義的宏
*ERROR 124:expected macro formal parameter 宏定義要求形參名
*ERROR 125:declarater too complex
說(shuō)明過(guò)于復(fù)雜
*ERROR 126:type-stack underflow
對(duì)象的聲明至多只能包含20 個(gè)類(lèi)型修飾符(【】,*,(),)錯(cuò)誤126 經(jīng)常在錯(cuò)誤125 之前,
兩者一起發(fā)生。
*ERROR 127:invalid storage class
對(duì)象用無(wú)效的存儲(chǔ)類(lèi)所說(shuō)明。當(dāng)在函數(shù)外用auto/register 存儲(chǔ)時(shí)會(huì)發(fā)生這種情況。 *ERROR 128:memory space: illegal memory space ?memory space ?used
函數(shù)參數(shù)的存儲(chǔ)類(lèi)由存儲(chǔ)模式(SMALL LARGE COMPACT)決定用戶不能改變,使用不同
于存儲(chǔ)模式的自動(dòng)變量應(yīng)該為靜態(tài)的存儲(chǔ)類(lèi)
*ERROR 129:missing? ;?before ?token?
該錯(cuò)誤表示分號(hào)丟失,通常該錯(cuò)誤會(huì)引發(fā)一連串的錯(cuò)誤,引發(fā)的這些錯(cuò)誤無(wú)關(guān)緊要。因?yàn)槿?少分號(hào)后編譯器不能做正確的語(yǔ)法分析 *ERROR 130:value out of range
using 或interrupt 指令后參數(shù)越限。using 用的寄存器組號(hào)位0-3,interrupt 需要0-15 的中 斷號(hào)
*ERROR 131:duplicate function-parameter 函數(shù)中形參名重復(fù),形參名應(yīng)彼此不同 *ERROR 132:not in formal parameter list 函數(shù)內(nèi)參數(shù)聲明使用的名字未出現(xiàn)在參數(shù)表中 *ERROR 133:char function(v0,v1,v2)
Char*v0,*v1,*v5;/ *?v5?在形參中未出現(xiàn)
*ERROR 134:xdata/idata/pdata/data on function not permitted
函數(shù)總是駐留于0x5xxxx 的code存儲(chǔ)區(qū),不能位于xdata/idata/pdata/data 空間 *ERROR 135:bad storage class for bit
位變量的定義可以接受static或extern的存儲(chǔ)類(lèi),用REGIESTER和ALIEN 都是非法的 *ERROR 136:?void?on variable
?void?類(lèi)型只允許作為函數(shù)的返回類(lèi)型或與指針類(lèi)型合用(void*) *ERROR 137:illegal parameter type:?function?
函數(shù)參數(shù)的類(lèi)型不能是函數(shù),然而函數(shù)指針可以作為參數(shù) *ERROR 138:interrupt ()may not receive or return value (s) 中斷函數(shù)既不能有參數(shù)又不能有返回值
*ERROR 139:illegal use of ?alien?
關(guān)鍵字alien 將函數(shù)定義為PL/M51 規(guī)定的過(guò)程與函數(shù)結(jié)構(gòu)。這意味著C函數(shù)中有參數(shù)的縮
記符號(hào)(即funct(…);)時(shí)是不能用alien的
*ERROR 140:bit in illegal memory-space
位變量的定義可包含修飾符DATA,如果無(wú)修飾符則假定為DATA。因?yàn)槲蛔兞渴冀K位于 0x4xxx 的內(nèi)部數(shù)據(jù)存儲(chǔ)器中,當(dāng)試圖采用其他存儲(chǔ)空間就會(huì)產(chǎn)生這個(gè)錯(cuò)誤。 *ERROR 141:NEAR
*ERROR 142:invalid base address
Sfr說(shuō)明中的基址有錯(cuò)。有效基址為0x80-0xff。如果聲明采用base^pos形式,則基址是8的
整數(shù)倍
*ERROR 143:invalid absolute bit position
Sbit說(shuō)明中位地址必須在0x80-0xff之間 *ERROR 144:base^pos:invalid bit position Sbit說(shuō)明中位pos必須在0~7之間 *ERROR 145:undeclared sfr Sfr未說(shuō)明
*ERROR 146:invalid sfr
絕對(duì)位地址說(shuō)明(base^pos)包含無(wú)效的基地址。這個(gè)基地址必須與sfr名相對(duì)應(yīng) *ERROR 147:object too large 對(duì)象不能超過(guò)65536(64k)字節(jié)
*ERROR 148:field not permitted in union
聯(lián)合不能包含位成員,這個(gè)限制是由8051結(jié)構(gòu)決定的。 *ERROR 149:function member in struct/union
結(jié)構(gòu)或者聯(lián)合不能包含函數(shù)類(lèi)型的成員。但是指向函數(shù)的指針是允許的 *ERROR 150:bit member in struct/union
結(jié)構(gòu)或者聯(lián)合不能包含位類(lèi)型的成員,這個(gè)限制是由8051 結(jié)構(gòu)決定的 *ERROR 151:self relativestruct/union
結(jié)構(gòu)或者聯(lián)合不能包含自身
*ERROR 152:bit field type too small for number of bits 位域聲明中指定的位數(shù)超過(guò)所給原型中位的數(shù)量
*ERROR 153:named bit-field