keil錯誤;C51編譯器識別錯類型有三種;1、致命錯誤:偽指令控制行有錯,訪問不存在的原文;2、語法及語義錯誤:語法和語義錯誤都發(fā)生在原文件;3、警告:警告出現(xiàn)并不影響目標文件的產生,但執(zhí)行;C_51FATAL_ERRORACTION:&l;ERROR:<錯誤信息>termin;FILE:<錯誤所在文件>;ERROR:<錯誤信
keil錯誤
C51編譯器識別錯類型有三種
1、致命錯誤:偽指令控制行有錯,訪問不存在的原文件或頭文件等。
2、語法及語義錯誤:語法和語義錯誤都發(fā)生在原文件中。有這類錯誤時,給出 提示但不產生目標文件,錯誤超過一定數量才終止編譯。
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)建上述文件??赡艽疟P滿或文件已存在而且寫保護。 *PARSING SOURCE_FILE/ANALYZING DECLARATIONS
分析源程序時發(fā)現(xiàn)外部引用名太多。 *GENERATING INTERMEDIATE CODE
源代碼被翻譯成內部偽代碼,錯誤可能來源于函數太大而超過內部極限。 *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個各種函數的類型段,256個全局變量, 256 個公共定義或外部引用名。不使用為變量可以減少使用的段數。使用static 存儲類型說
明符可減少全局變量的使用數目。合理調整定義性說明的位置可減少外部引用名的使用數 目。
*FILEWRITE ERROR
當向list、prelist、work或object文件中寫內容時,由于空間不夠而發(fā)生錯誤。 *NON_NULLARGUMENT EXPECTED
所選的控制參數需要一個括號內的變量,如一個文件夾或一個數。 *“(”AFTER CONTROL EXPECTED 變量的左括號丟失。
*“)”AFTER PARAMETER EXPECTED 變量的右括號丟失。
*RESPECIFIED OR CONFLICTING CONTROL
所選的控制參數與前面發(fā)生沖突或重復,例如CODE和NOCOND *BAD DECIMAL NUMBER
控制參數的數字含有非法數,需要使用十進制數。 *OUT OF RANGE DECIMAL NUMBER
控制參數的數字越界,例如OPTIMIZE 的參量為0-5。
*IDENTIFIER EXPECTED
控制參數DEFINE 需要一個標識符做參量,與C語言的規(guī)則相同。
*PARSE STACK OVERFLOW
分析棧溢出??赡苁窃闯绦虬貏e復雜的表達式,或功能塊嵌套數超過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的數量與if或ifdef的數量不匹配。 *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指令的數值表達式有語法錯誤。
*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
對象用無效的存儲類所說明。當在函數外用auto/register 存儲時會發(fā)生這種情況。 *ERROR 128:memory space: illegal memory space ?memory space ?used
函數參數的存儲類由存儲模式(SMALL LARGE COMPACT)決定用戶不能改變,使用不同
于存儲模式的自動變量應該為靜態(tài)的存儲類
*ERROR 129:missing? ;?before ?token?
該錯誤表示分號丟失,通常該錯誤會引發(fā)一連串的錯誤,引發(fā)的這些錯誤無關緊要。因為缺 少分號后編譯器不能做正確的語法分析 *ERROR 130:value out of range
using 或interrupt 指令后參數越限。using 用的寄存器組號位0-3,interrupt 需要0-15 的中 斷號
*ERROR 131:duplicate function-parameter 函數中形參名重復,形參名應彼此不同 *ERROR 132:not in formal parameter list 函數內參數聲明使用的名字未出現(xiàn)在參數表中 *ERROR 133:char function(v0,v1,v2)
Char*v0,*v1,*v5;/ *?v5?在形參中未出現(xiàn)
*ERROR 134:xdata/idata/pdata/data on function not permitted
函數總是駐留于0x5xxxx 的code存儲區(qū),不能位于xdata/idata/pdata/data 空間 *ERROR 135:bad storage class for bit
位變量的定義可以接受static或extern的存儲類,用REGIESTER和ALIEN 都是非法的 *ERROR 136:?void?on variable
?void?類型只允許作為函數的返回類型或與指針類型合用(void*) *ERROR 137:illegal parameter type:?function?
函數參數的類型不能是函數,然而函數指針可以作為參數 *ERROR 138:interrupt ()may not receive or return value (s) 中斷函數既不能有參數又不能有返回值
*ERROR 139:illegal use of ?alien?
關鍵字alien 將函數定義為PL/M51 規(guī)定的過程與函數結構。這意味著C函數中有參數的縮
記符號(即funct(…);)時是不能用alien的
*ERROR 140:bit in illegal memory-space
位變量的定義可包含修飾符DATA,如果無修飾符則假定為DATA。因為位變量始終位于 0x4xxx 的內部數據存儲器中,當試圖采用其他存儲空間就會產生這個錯誤。 *ERROR 141:NEAR
*ERROR 142:invalid base address
Sfr說明中的基址有錯。有效基址為0x80-0xff。如果聲明采用base^pos形式,則基址是8的
整數倍
*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)合不能包含函數類型的成員。但是指向函數的指針是允許的 *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 位域聲明中指定的位數超過所給原型中位的數量
*ERROR 153:named bit-field