PIC MPLAB采用C语言编译错误信息
Keil编译常见错误

Keil编译常见错误Error: L6200EError: L6200E: Symbol temp multiply defined (by wenshidu.o and main.o).在编译的时候出现了这个问题,但是检查不出来,希望各位大侠帮帮忙什么变量你给付了两次值你看看是不是那个外部变量你又给赋值了main.c申明,其他.c文件对应的.h文件中用extern引用error: #20error: #20: identifier \谁能说说,哪里错了你的固件库里的库文件没有添加进工程里面,所以出现未定义的情况。
TIM2_IRQChannel指定时器2的中断通道没有定义,其实在固件库对这些参数都有定义,宏定义代替了一串寄存器地址数据。
需要将.C文件添加到工程文件中warning: #1-Dmain.c(7): warning: #1-D: last line of file ends without a newline当使用keil编译时,弹出这样的警告信息:main.c(7): warning: #1-D: last line of file ends without a newline这个是由于在main函数的“}”后,没有加回车。
只要在main函数的“}”后加回车键,此警告信息即可消除。
error:#65...test_menu.c(27):error:#65:expected a \分数送你了,问题在你回答之前已经解决了,头文件里的结构体定义里的最后一行没有加\如 NB menu{..};error: #1113:折腾了大半天,才搞明白一个空操作的指令先在网上查有的说是__asm{NOP;},从intrins.h里调用,可犄角旮旯全找了,也没看到什么intrint.h的文件。
如果直接用,就出现error: #1113: Inline assembler not permitted when generating Thumb code最后搜索这条错误,知道是因为__asm(\指令\这种语法是内联汇编(inline assembly)的语法。
C语言代码区错误以及编译过程

C语⾔代码区错误以及编译过程C语⾔代码区错误欲想了解C语⾔代码段会有如何错误,我们必须⾸先了解编译器是如何把C语⾔⽂本信息编译成为可以执⾏的机器码的。
背景介绍测试使⽤的C语⾔代码导⼊标准库,定义宏变量,定义结构体,重命名结构体,函数原型声明,主函数⼊⼝,函数定义#include <stdio.h>#define PI 3.14159typedef struct student {char name[8];int age;} Student;void sayHi(Student);int main() {// we define a Student structure here.Student mushroom = {"mushroom", 19};/*Output some massage.*/sayHi(mushroom);printf("I know PI equels to %lf", PI);return 0;}void sayHi(Student stu) {printf("Hi! I am %s.\n", );}C语⾔编译基本流程⼀共划分为了⽂件输⼊,预处理,编译,汇编,连接,最后输出为可执⾏⽂件。
GCC正好就为我们提供了所有的这些⽅法,下⾯来⼀⼀介绍下GCC内置的处理C语⾔⽂件的指令。
GCC编译器基本指令了解指令名解释gcc -c编译或汇编源⽂件,但是不作连接.编译器输出对应于源⽂件的⽬标⽂件.gcc -S编译后即停⽌,不进⾏汇编.对于每个输⼊的⾮汇编语⾔⽂件,输出⽂件是汇编语⾔⽂件.gcc -E预处理后即停⽌,不进⾏编译.预处理后的代码送往标准输出.gcc -o filename指定输出⽂件为file.该选项不在乎GCC产⽣什么输出,⽆论是可执⾏⽂件,⽬标⽂件,汇编⽂件还是预处理后的C代码.这⾥只是给出了gcc最常见的指令,如果还想了解更多的细节可以查看下官⽅⽂档.这⾥给出如上的GCC相关指令给出了⼀整套处理C语⾔⽂件的完整⽅法,下⾯使⽤来完整的按流程编译下C语⾔⽂件。
PIC MPLAB采用C语言编译错误信息

withtotal) for psect text in segment CODE
Error[000] : Can't find 0xC words (0xC
withtotal) for psect text4 in segment CODE
67. rror[000] D:\Work\standard_\remo.c 113 : 程序中大括号不完整,检查{}是否完整成对使
误,检查程序是否超页:
66. Error[000] : Can't find 0x26 words (0x26 常见的情况是编译的内容超出芯片 ROM 空间,
withtotal) for psect text13 in segment CODE 可屏蔽部分代码,以检查代码量是否过多。
Error[000] : Can't find 0xC words (0xC
probable missing '}' in previous block
用
Error[000] D:\Work\standard_\remo.c 8 :
{ expected
68. Error[000] D:\Work\standard\remo.c 8 : ; 程序代码后缺少“;”号。
expected
13. Illegal conditional compile
IF/ELSE/ENDIF 结构书写有错。
14. Illegal character…in label… 15. Illegal digit 16. Illegal opcode
在标号字符中出现非法字符。合法的字符是 “-”、“·”、“A”~“Z”、“a”~“z”、“0”~“9”。 非法数字。如在十进制数中出现十六进制符 等。 非法操作数。
(完整word版)C语言程序编译常见错误对照

error C2117: 'xxx' : array bounds overflow
中文对照:(编译Байду номын сангаас误)数组xxx边界溢出
分析:一般是字符数组初始化时字符串长度大于字符数组长度,例如“char str[4] = "abcd";”
中文对照:(编译错误)重复定义形式参数xxx
分析:函数首部中的形式参数不能在函数体中再次被定义
error C2084: function 'xxx' already has a body
中文对照:(编译错误)已定义函数xxx
分析:在VC++早期版本中函数不能重名,6.0版本中支持函数的重载,函数名可以相同但参数不一样
error C2048: more than one default
中文对照:(编译错误)default语句多于一个
分析:switch语句中只能有一个default,删去多余的default
error C2050: switch expression not integral
中文对照:(编译错误)switch表达式不是整型的
error C2017: illegal escape sequence
中文对照:(编译错误)转义字符非法
分析:一般是转义字符位于' '或" "之外,例如“char error = ' '\n;”
error C2018: unknown character '0xhh'
c++编译器错误代码大全

C/C++编译器错误代码大全-编译器错误C2001 错误消息常数中有换行符字符串常数不能继续到第二行,除非进行下列操作:•用反斜杠结束第一行。
•用一个双引号结束第一行上的字符串,并在下一行用另一个双引号开始该字符串。
用\n 结束第一行是不够的。
编译器错误C2002 错误消息无效的宽字符常数多字节字符常数是非法的。
通过检查下面的可能原因进行修复1.宽字符常数包含的字节比需要的多。
2.未包括标准头文件STDDEF.h。
3.宽字符不能与一般字符串连接。
4.宽字符常数之前必须是字符“L”:编译器错误C2003 错误消息应输入“defined id”标识符必须跟在预处理器关键字之后。
编译器错误C2004 错误消息应为“defined(id)”标识符必须出现在预处理器关键字之后的括号中。
也可能由于为V isual Studio .NET 2003 进行的编译器一致性工作生成此错误:在预处理器指令中缺少括号。
如果预处理器指令缺少右括号,则编译器将生成一个错误。
编译器错误C2005 错误消息#line 应跟一个行号,却找到“token”#line 指令后面必须跟行号。
编译器错误C2006 错误消息“directive”应输入文件名,却找到“token”诸如#include 或#import 等指令需要文件名。
若要解决该错误,请确保token 是一个有效文件名。
并且将该文件名放在双引号或尖括号中。
编译器错误C2007 错误消息#define 语法#define 后未出现标识符。
若要解决该错误,请使用标识符。
编译器错误C2008 错误消息“character”: 宏定义中的意外该字符紧跟在宏名之后。
若要解决该错误,宏名之后必须有一个空格。
编译器错误C2009 错误消息宏形式“identifier”重复使用宏定义的形参表多次使用该标识符。
宏的参数列表中的标识符必须是唯一的。
编译器错误C2010 错误消息“character”: 宏形参表中的意外该字符在宏定义的形参表中使用不正确。
C语言编辑程序常出现错误提示

大家好!在这美好的时光里,我们齐聚一堂,共同参加公司年度运功会。
首先,请允许我代表公司全体员工,向在此次活动中付出辛勤努力的各位工作人员表示衷心的感谢!同时,也要感谢各位领导的光临,为我们的运功会增添了无限光彩。
回顾这次运功会,我们全体员工积极参与,热情洋溢,充分展现了我们团结协作、拼搏进取的精神风貌。
在此,我想从以下几个方面对本次运功会进行总结:一、活动筹备阶段在活动筹备阶段,公司领导高度重视,亲自指导,各部门通力合作,确保了运功会的顺利进行。
活动筹备小组精心策划,制定了详细的活动方案,包括活动时间、地点、内容、流程等,为运功会的成功举办奠定了基础。
二、活动开展阶段1. 开幕式:在庄严的国歌声中,运功会正式拉开序幕。
公司领导发表了热情洋溢的讲话,对全体员工的辛勤付出表示肯定,并对未来提出了新的期望。
2. 竞技比赛:本次运功会设有多个比赛项目,如拔河、篮球、羽毛球、乒乓球等。
比赛过程中,参赛选手们发扬了友谊第一、比赛第二的精神,展现出了良好的竞技状态。
观众们热情高涨,为参赛选手们加油鼓劲。
3. 文艺表演:在竞技比赛之余,我们还安排了丰富多彩的文艺表演。
员工们自编自导自演的节目,充分展示了公司员工的才艺和风采。
4. 互动游戏:为增进员工之间的沟通与交流,我们还设置了互动游戏环节。
员工们积极参与,笑声不断,充分体现了团队精神。
三、活动成果1. 提升团队凝聚力:通过本次运功会,全体员工更加紧密地团结在一起,增强了团队凝聚力。
2. 激发员工潜能:在比赛中,员工们充分发挥了自己的潜能,为团队争光。
3. 丰富员工生活:运功会为员工提供了一个展示自我、放松身心的平台,丰富了员工的生活。
4. 提升公司形象:本次运功会充分展示了公司员工的精神风貌,提升了公司形象。
四、不足与改进1. 活动筹备时间较为紧张,部分环节还需进一步完善。
2. 部分比赛项目设置不够合理,影响了比赛公平性。
3. 部分员工参与度不高,需加强宣传和动员。
MPLAB编译指令

我们在第一章中已经详细介绍了中档PIC 单片机的35 条指令,源程序的编写主要就是用这些基本的指令实现你的控制任务。
但为了增加源程序的可读性和可维护性,我们引入了伪指令的概念。
伪指令本身不会产生可执行的汇编指令,但它们可以帮组“管理”你编写的程序,其实用性和必要性绝不亚于35 条正真的汇编指令。
我们在此着重介绍最常用的几种伪指令。
#include 或include#include 伪指令的作用是把另外一个文件的内容全部包含复制到本伪指令所在的位置。
被包含复制的文件可以是任何形式的文本文件,当然文件中的内容和语法结构必须是MPASM 能够识别的。
最经常被“include”的是针对PIC 单片机内部特殊功能寄存器定义的包含头文件,在MPLAB 安装后它们全部放在路径“ C:\Program Files\MPLAB IDE\MCHIP_Tools”下,每一个型号的PIC 单片机都有一个对应的预定义包含头文件,扩展名是“.inc”。
除了一些符号预定义文件,你也可以把现有的其它程序文件作为一个代码模块直接“包含”进来作为自己程序的一部分。
见例3-01。
#include <p16f877a.inc> ;把预定义的PIC16F877A寄存器符号包含到此处#include”math.asm”;把现有的程序文件包含进来作为自己代码的一部分例3-01请注意被包含文件的引用方式。
一种是<>尖括号引用,这种引用意味着让编译器去默认的路径下寻找该文件,MPASM 默认的寄存器预定义文件存放路径即为上面提及的MPLAB 安装后的目录;另一种是””双引号引用,这种引用方式的意思是指示编译器从引号中指定的全程文件路径下寻找该文件。
例3-01 中”math.asm”没有指定路径,即意味着在当前项目路径下寻找math.asm 文件。
如果编译器找不到被包含的文件,将会有错误信息告知。
请在你的源程序中尽量用MPLAB标准头文件定义的寄存器符号。
用PCLint检查PIC32的C代码错误

1. 引言C语言在嵌入式领域应用非常广泛,其主要优点是灵活和高效,但若在使用过程中不加以规范,容易引入各种潜在的代码问题。
先来看一段C代码,这段代码中有多少C语言的使用错误?uint8_t vFunc(void){uint8_t index = 0;for (index = 0; index {if (index == 3){vFunc_1(&index);return true;}}}比较容易发现的问题有:●for循环结束后没有返回值不太容易发现的问题有:●index初值没有使用●index值可能在vFunc_2()内被清零,使得循环一直被执行为了在编码阶段找出这些问题,常用的分析方法有静态代码分析和动态代码分析。
有研究表明,使用动态代码分析找到的问题中的95%都可以用静态代码分析找到。
中小型嵌入式软件项目一般使用静态代码分析工具作为主要分析手段,其中最常见的工具是PClint。
PCLint是GIMPEL SOFTWARE 公司研发的C/C 软件代码静态分析工具,支持几乎所有流行的编辑环境和编译器。
PC-lint不但可以检测单个文件,也可以从整个项目的角度来检测问题。
支持Scott Meyes的名著(Effective C /More Effective C )中说描述的各种提高效率和防止错误的方法。
在我们的项目中,使用C语言作为PIC32单片机的编程语言,开发环境是MPLABX,代码查看工具是source insight。
本文的主要内容就是如何将PCLint 工具集成到上述两种工具中。
集成完成后,可通过快捷键调用lint工具,对目标代码进行静态分析,再根据分析结果优化代码。
2. 配置PCLint2.1. 安装PCLint下载PCLint并安装:升级到最新版本:,下载下列文件:●复制升级包和lpatch到安装路径(C:\lint)●按住shift 右键,打开快捷菜单,选择“在此处打开命令窗口”●输入命令并执行:lpatch l9-a-b.lp, …, 依次类推直到l9-K-L.lp(每次输入一条执行)●输入命令lint-nt -v,完成上述步骤后,显示当前版本是9.00L2.2. 下载xc32编译器共用的文件打开,下载Compiler Options files:●co-cci.lnt●co-xc32.lnt将上述文件存放在lint安装路径下的lnt文件夹中(c:\lint\lnt)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
69. Error[000] D:\Work\standard\remo.c 10 : 变量 buzz1 未定义就使用,变量应先定义后使
undefined identifier: buzz1
用。
70. Error[000] D:\Work\standard\remo.c 80 : If,else 语句未成对使用,缺少 if 条件,提示不
bank2 unsigned char buff[8]; //定义 bank2 中的
一个缓冲区
程序语句:
ptr0 = buff; //错误!试图将 bank2 内的变量地
址赋给指向 bank0/1 的指针
,如果你看到了“Fixup overflow”的错误指示,
请重点检查程序中有关指针的操作。
◆如果总程序仍超过一页,则可能会有以上错
使用了未定义的参数。
32. Unknow error
MPASM 碰到未知的错,这种情况一般很少发
生。
33. While failed to terminate within 256
While 语句中没有结束的条件产生。
iterationg
34. Can't find 0x12C words for psect rbss_1 in 连接器告诉你总共有 0x12C(300)个字节准备
6. Duplicate lable or redefininy symbol that 标号或变量名重复定义。
cannot be redefined
7. Error in parameter
参数错误。
8. Expected…
源程序行有错。
9. File not found
指定的文件找不到。
10. Illegal argument
17. Include file not found
Include 指令中的文件找不到。
18. Include files nested too cleep 19. Macro name missing
Include 文件嵌套太多。Include 文件嵌套最 多的为 5 重。 缺少宏定义名称。
20. Marco nested too deep
52. [131] Processor type is undefined
错误的器件选型。 未定义的器件选型。
53. [132] Unknown processor
未知的器件选型。
54. [135] Macro name missing
缺少名字的宏定义。
55. [136] Duplicate macro name
38. [114] Divide by zero
#include 文件内部可以嵌套#include 文件,当 文件中包含有声明的时候,就要注意其位置是 否在使用符号之前。通常都将#include 文件置 于程序的最前面。 除数为 0。
39. [115] Duplicate label
重复定义标号。
40. [116] Address label duplicated or 重复的地址标号。
一、错误信息
序号
内容
原因
1. Address exceeds maximum limit avaiable 程序存储器地址溢出(超出)有效范围。
2. Attempt to redefine reserved word 3. Branch or jump out of range 4. Couldn't open… 5. Couldn't open source file…
非法参数。
11. Illegal condition
IF 语句中的条件符号出错。
12. Illegal condition,EOF encountered before IF、WHILE 或 MACRO 语句中缺少相应的
END or conditional end directive
ENDIF、ENDW 和 ENDM。
address
44. [121] Illegal label
非法的标号。
45. [124] Illegal argument 46. [125] Illegal condition
非法的操作数。 CW-OTP-ICE-I 型仿真器用户 手册 非法的条件,例如:未匹配的 endif。
47. [126] Argument out of range
13. Illegal conditional compile
IF/ELSE/ENDIF 结构书写有错。
14. Illegal character…in label… 15. Illegal digit 16. Illegal opcode
在标号字符中出现非法字符。合法的字符是 “-”、“·”、“A”~“Z”、“a”~“z”、“0”~“9”。 非法数字。如在十进制数中出现十六进制符 等。 非法操作数。
MPASM 中的保留字如“END”、“ERROR”、 “HIGH”、“LOW”和“PAGE”被重定义,用户必 须避免再将其用做标号或变量。 程序跳转指令如“GOTO”、“CALL”等超出规定 的范围。 TMPASM 不能打开“.OBJ”、“.map”、“.Hex”、 “.Err”、“.Lst”或“.ref”文件。一般是电脑已没有 足够的磁盘空间。 汇编的源程序文件不存在。
segment BANK1
放到 bank1 中但 bank1 容量不够。显然,只
有把一部分原本定位在 bank1 中的变量改放到
其它 bank 中才能解决此问题。
35. [103] Syntax error
语法错误,请检查源代码。
36. [108] Illegal character
非法字符。 标号中的有效地字符为:“a~f”、
误,检查程序是否超页:
66. Error[000] : Can't find 0x26 words (0x26 常见的情况是编译的内容超出芯片 ROM 空间,
withtotal) for psect text13 in segment CODE 可屏蔽部分代码,以检查代码量是否过多。
Error[000] : Can't find 0xC words (0xC
61. [152] Executable code and data must be 错误定位的代码和数据。 defined in an appropriate section
62. [154] Each object file section must be 各目标文件必须彼此相连。 contiguous
Error [477] ; . fixup overflow in expression 在对指针变量赋值时就必须实现类型匹配,
(location 0x1FEE (0x1FE6+8), size 2, value 下面的指针赋值将产生一个致命错误:
0xFF5)
unsigned char *ptr0; //定义指向 bank0/1 的指针
inappropriate 'else'
对称的 else。
71. Error[000] : undefined sympsel()等是否
59. [149] Directive only allowed when 错误应用仅在目标文件生成时允许的指令。 generating an object file
60. [151] Operand contains unresolvable 错误的操作数。 labels or is too complex
重复名字的宏定义。
56. [140] WHILE must terminate within 256 超过 256 次循环未结束的 While 条件语句。
iterations
57. [143] Illegal nesting
非法的嵌套。
58. [145] Unmatched ENDM
未匹配的 endm。
超范围的操作数,例如:IODIR 10。
48. [127] Too many arguments
太多的操作数。
49. [128] Missing argument(s)
不足的操作数。
50. [129] Expected
缺少操作数。
51. [130] Processor type previously defined
different in second pass
41. [117] Address wrapped around 0
代码地址超出 ROM 范围,常伴随 error [118]
而出现。
42. [118] Overwriting previous address 重复的代码地址。
contents
43. [120] Call or jump not allowed at this 无效的调用或跳转地址。
probable missing '}' in previous block
用
Error[000] D:\Work\standard_\remo.c 8 :
{ expected
68. Error[000] D:\Work\standard\remo.c 8 : ; 程序代码后缺少“;”号。
expected
错误/警告/消息信息
MPASM 汇编一个源程序后,可以产生一个.ERR 文件,该文件用来存放汇编后可能产生的错误或警 告信息。必须强调的是错误信息(Error)是指出源程序中出现“致命”(fatal)的错误,用户必须修改 直至汇编后 Errors= 0。而警告信息(Warnings)是指出源程序中可能有问题的地方,但并不一定是 “致命”错误,只是提醒用户去注意这些被警告的地方。如果用户可以确认无误,便可以不理会产生的 Warnings。