KEIL C编译器错误的解决办法Word格式.docx
- 文档编号:16551288
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:17
- 大小:21.41KB
KEIL C编译器错误的解决办法Word格式.docx
《KEIL C编译器错误的解决办法Word格式.docx》由会员分享,可在线阅读,更多相关《KEIL C编译器错误的解决办法Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
XDATASPACEMEMORYOVERLAP
FROM:
0025H
TO:
说明外部资料ROM的0025H重复定义地址
解决方法外部资料ROM的定义如下
PdataunsignedcharXFR_ADC_at_0x25其中XFR_ADC变量的名称为0x25,请检查是
否有其它的变量名称也是定义在0x25处并修正它
7WARNING206:
’DelayX1ms’:
missingfunction-prototype
\8051\INPUT.C
Error267:
’DelayX1ms‘:
requiresANSI-styleprototypeC:
说明程序中有调用DelayX1ms函数但该函数没定义即未编写程序内容或函数
已定义但未作宣告
解决方法编写DelayX1ms的内容编写完后也要作宣告或作外部宣告可在delay.h
的包含档宣告成外部以便其它函数调用
8***WARNING1:
UNRESOLVEDEXTERNALSYMBOL
SYMBOL:
MUSIC3
MODULE:
\8051\MUSIC.OBJ(MUSIC)
***WARNING2:
REFERENCEMADETOUNRESOLVEDEXTERNAL
ADDRESS:
0018H
说明程序中有调用MUSIC函数但未将该函数的含扩档C加入到工程档
Prj作编译和连接
解决方法设MUSIC3函数在MUSICC里将MUSICC添加到工程文件中去
9***ERROR107:
ADDESSSPACEOVERFLOW
SPACE:
DATA
_DATA_GOUP_
LENGTH:
0018H
***ERROR118:
REFERENCEMADETOERRONEOUSEXTERNAL
VOLUME
C:
\8051\OSDM.OBJ(OSDM)
4036H
说明data存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存
储模式设为SMALL则局部变量先使用工作寄存器R2~R7作暂存当存储器不够用时则会
以data型别的空间作暂存的个数超过0x7f时就会出现地址不够的现象
解决方法将以data型别定义的公共变量修改为idata型别的定义
------------------------------------------------------------------------------------------------
--
keilc编译器错误与解决方法2008-05-2720:
191.Warning280:
说明局部变量i在函数中未作任何的存取操作解决方法消除函数中i变量的宣告
解决方法将叙述voidMusic3(void)写在程序的最前端作宣告如果是其他文件的函数则要写
成externvoidMusic3(void),即作外部宣告
\8051\MANN.C程序过程中由于main.c用了指令#include“beep.h”,但
却找不到所致解决方法编写一个beep.h的包含档并存入到c:
说明DelayX1ms()函数未被其它函数调用也会占用程序记忆体空间解决方法去掉
DelayX1ms()函数或利用条件编译#if…..#endif,可保留该函数并不编译
解决方法外部资料ROM的定义如下PdataunsignedcharXFR_ADC_at_0x25其中XFR_ADC
变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25处并修正它
说明程序中有调用DelayX1ms函数但该函数没定义即未编写程序内容或函数已定义但未作
宣告
解决方法编写DelayX1ms的内容编写完后也要作宣告或作外部宣告可在delay.h的包含档
宣告成外部以便其它函数调用
说明程序中有调用MUSIC函数但未将该函数的含扩档C加入到工程档Prj作编译和连接
说明如对编译出错感兴趣的网友能否把你们常遇到的错误信息收集起来并提出最终的
解决办法加以归纳以期共享
10.***WARNINGL15:
MULTIPLECALLTOSEGMENT
_WRITE_GMVLX1_REG?
D_GMVLX1
CALLER1:
VSYNC_INTERRUPT?
MAIN
CALLER2:
C_C51STARTUP
***WARNINGL15:
_SPI_SEND_WORD?
D_SPI
SPI_RECEIVE_WORD?
该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断
服务程序的函数)同时调用,
或者同时被多个中断服务程序调用。
出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一
个中断打断,从而使得结果发生变化
并可能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时
候都可以被ISR打断,一段时间后又可以
运行,但是相应数据不会丢失)。
原因之二是用于局部变量和变量(暂且这样翻译,arguments,[自变量,变元一数值,用于
确定程序或子程序的值])的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的
内存区就会
被使用,这将导致其他函数的内存冲突。
例如,第一个警告中函数WRITE_GMVLX1_REG在D_GMVLX1.C或者D_GMVLX1.A51被定义,
它被一个中断服务程序或者一个调用了中断
服务程序的函数调用了,调用它的函数是VSYNC_INTERRUPT,在MAIN.C中。
解决方法:
如果你确定两个函数决不会在同一时间执行(该函数被主程序调用并且中断被禁止),并
且该函数不占用内存(假设只使用寄存器),
则你可以完全忽略这种警告。
如果该函数占用了内存,则应该使用连接器(linker)OVERLAY指令将函数从覆盖分析
(overlayanalysis)中除去,例如:
OVERLAY(?
D_GMVLX1!
*)
上面的指令防止了该函数使用的内存区被其他函数覆盖。
如果该函数中调用了其他函数,
而这些被调用在程序中其他地方也被调用,
你可能会需要也将这些函数排除在覆盖分析(overlayanalysis)之外。
这种OVERLAY指令能
使编译器除去上述警告信息。
如果函数可以在其执行时被调用,则情况会变得更复杂一些。
这时可以采用以下几种方
法:
1.主程序调用该函数时禁止中断,可以在该函数被调用时用#pragmadisable语句来实现禁
止中断的目的。
必须使用OVERLAY指令将该函数
从覆盖分析中除去。
2.复制两份该函数的代码,一份到主程序中,另一份复制到中断服务程序中。
3.将该函数设为重入型。
例如:
voidmyfunc(void)reentrant{
...
}
这种设置将会产生一个可重入堆栈,该堆栈被被用于存储函数值和局部变量,用这种
方法时重入堆栈必须在STARTUP.A51文件中配置。
这种方法消耗更多的RAM并会降低重入函数的执行速度。
11.***WARNINGL16:
UNCALLEDSEGMENT,IGNOREDFOROVERLAYPROCESS
_COMPARE?
TESTLCD
说明:
程序中有些函数(或片段)以前(调试过程中)从未被调用过,或者根本没有
调用它的语句。
这条警告信息前应该还有一条信息指示出是哪个函数导致了这一问题。
只要做点简
单的调整就可以。
不理它也没什么大不了的。
解决方法:
去掉COMPARE()函数或利用条件编译#if…..#endif,可保留该函数并不
编译。
C编译器错误信息中文翻译
Ambiguousoperatorsneed
parentheses
不明确的运算需要用括号括起
Ambiguoussymbol``xxx``
不明确的符号
Argumentlistsyntaxerror
参数表语法错误
Arrayboundsmissing
丢失数组界限符
Arraysizetoolarge
数组尺寸太大
Badcharacterinparamenters
参数中有不适当的字符
Badfilenameformatininclude
directive
包含命令中文件名格式不正确
Badifdefdirectivesynatax
编译预处理ifdef有语法错
Badundefdirectivesyntax
编译预处理undef有语法错
Bitfieldtoolarge
位字段太长
Callofnon-function
调用未定义的函数
Calltofunctionwithno
prototype
调用函数时没有函数的说明
Cannotmodifyaconstobject
不允许修改常量对象
Caseoutsideofswitch
漏掉了case语句
Casesyntaxerror
Case语法错误
Codehasnoeffect
代码不可述不可能执行到
Compoundstatementmissing{
分程序漏掉"
{"
Conflictingtypemodifiers
不明确的类型说明符
Constantexpressionrequired
要求常量表达式
Constantoutofrangein
comparison
在比较中常量超出范围
Conversionmaylose
significantdigits
转换时会丢失意义的数字
Conversionofnearpointernot
allowed
不允许转换近指针
Couldnotfindfile``xxx``
找不到XXX文件
Declarationmissing;
说明缺少"
;
"
Declarationsyntaxerror
说明中出现语法错误
Defaultoutsideofswitch
Default出现在switch语句之外
Definedirectiveneedsan
identifier
定义编译预处理需要标识符
Divisionbyzero
用零作除数
Dostatementmusthavewhile
Do-while语句中缺少while部分
Enumsyntaxerror
枚举类型语法错误
Enumerationconstantsyntax
error
枚举常数语法错误
Errordirective:
xxx
错误的编译预处理命令
Errorwritingoutputfile
写输出文件错误
Expressionsyntaxerror
表达式语法错误
Extraparameterincall
调用时出现多余错误
Filenametoolong
文件名太长
Functioncallmissing)
函数调用缺少右括号
Fuctiondefinitionoutofplace
函数定义位置错误
Fuctionshouldreturnavalue
函数必需返回一个值
Gotostatementmissinglabel
Goto语句没有标号
Hexadecimaloroctalconstant
toolarge
16进制或8进制常数太大
Illegalcharacter``x``
非法字符x
Illegalinitialization
非法的初始化
Illegaloctaldigit
非法的8进制数字
Illegalpointersubtraction
非法的指针相减
Illegalstructureoperation
非法的结构体操作
Illegaluseoffloatingpoint
非法的浮点运算
Illegaluseofpointer
指针使用非法
Improperuseofa
typedefsymbol
类型定义符号使用不恰当
In-lineassemblynotallowed
不允许使用行间汇编
Incompatiblestorageclass
存储类别不相容
Incompatibletypeconversion
不相容的类型转换
Incorrectnumberformat
错误的数据格式
Incorrectuseofdefault
Default使用不当
Invalidindirection
无效的间接运算
Invalidpointeraddition
指针相加无效
Irreducibleexpressiontree
无法执行的表达式运算
Lvaluerequired
需要逻辑值0或非0值
Macroargumentsyntaxerror
宏参数语法错误
Macroexpansiontoolong
宏的扩展以后太长
Mismatchednumberof
parametersindefinition
定义中参数个数不匹配
Misplacedbreak
此处不应出现break语句
Misplacedcontinue
此处不应出现continue语句
Misplaceddecimalpoint
此处不应出现小数点
Misplacedelifdirective
不应编译预处理elif
Misplacedelse
此处不应出现else
Misplacedelsedirective
此处不应出现编译预处理else
Misplacedendifdirective
此处不应出现编译预处理endif
Mustbeaddressable
必须是可以编址的
Musttakeaddressofmemory
location
必须存储定位的地址
Nodeclarationforfunction
``xxx``
没有函数xxx的说明
Nostack
缺少堆栈
Notypeinformation
没有类型信息
Non-portablepointer
assignment
不可移动的指针(地址常数)赋
值
不可移动的指针(地址常数)比
较
conversion
不可移动的指针(地址常数)转
换
Notavalidexpressionformat
type
不合法的表达式格式
Notanallowedtype
不允许使用的类型
Numericconstanttoolarge
数值常太大
Outofmemory
内存不够用
Parameter``xxx``isnever
used
能数xxx没有用到
Pointerrequiredonleftsideof
->
符号->
的左边必须是指针
Possibleuseof``xxx``before
definition
在定义之前就使用了xxx(警告)
Possiblyincorrectassignment
赋值可能不正确
Redeclarationof``xxx``
重复定义了xxx
Redefinitionof``xxx``isnot
identical
xxx的两次定义不一致
Registerallocationfailure
寄存器定址失败
Repeatcountneedsanlvalue
重复计数需要逻辑值
Sizeofstructureorarraynot
known
结构体或数给大小不确定
Statementmissing;
语句后缺少"
Structureorunionsyntaxerror
结构体或联合体语法错误
Structuresizetoolarge
结构体尺寸太大
Subscriptingmissing]
下标缺少右方括号
Superfluous&
withfunctionor
array
函数或数组中有多余的"
&
Suspiciouspointerconversion
可疑的指针转换
Symbollimitexceeded
符号超限
Toofewparametersincall
函数调用时的实参少于函数的
参数不
Toomanydefaultcases
Default太多(switch语句中一
个)
Toomanyerrororwarning
messages
错误或警告信息太多
Toomanytypeindeclaration
说明中类型太多
Toomuchautomemoryin
function
函数用到的局部存储太多
Toomuchglobaldatadefined
infile
文件中全局数据太多
Twoconsecutivedots
两个连续的句点
Typemismatchin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- KEIL C编译器错误的解决办法 编译器 错误 解决办法