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