PIC编译错误信息
- 格式:doc
- 大小:142.00 KB
- 文档页数:8
开发工具ICD2使用方面需要注意的问题1.1 问:为什么我的系统编程或校验失败?答:按照第5 章,故障诊断中所述,检查PGC、PGD 和VPP 连接以及电压,诊断故障。
确保目标PICmicro 单片机已上电。
如果目标PICmicro 单片机有AVSS 和AVPP 引脚,确认这些引脚都已正确连接。
1.2 问:为什么我需要 ICD 转接头?答:对于MPLAB ICD 2 支持的低引脚数器件,如果在线调试引脚被保留,将不能有效地使用这些器件。
试想一下,对于8 个引脚的器件, 6 个I/O 引脚失去其中3 个的情形。
为此,生产了特殊的外合(bond-out) PICmicro 单片机,这种单片机能通过一个转接头来仿真这些低引脚数器件,这使得能在目标应用中使用所有引脚。
外合(bond-out) PICmicro 单片机具有在线通讯引脚与MPLAB ICD 2 接口。
这样做的优点是可以用MPLAB ICD 2 开发低引脚数器件。
缺点是,对于这些器件,为进行在线调试,不能只在目标应用中采用一个ICD 2 连接插座,还要使用外合(bond-out) PICmicro 单片机。
这些外合(bond-out) PICmicro 单片机类似于仿真器芯片,能支持多种器件。
在ICD 转接头电路板上有跳线来配置芯片,以与开发使用的器件相匹配。
这些低引脚数器件可通过通用编程适配器,或者在目标应用上放置一个ICD 2 连接插座来连接这些器件的VPP、PGC 和PGD,来采用MPLAB ICD 2 编程。
1.3 问:无法连接到MPLAB ICD 2 。
我现在该怎么做?答:MPLAB ICD 2 的电源灯亮了吗?这个LED 应该是明亮的。
如果它比较暗,可能只连接了USB,用户可能需要连接一个电源。
PC 的RS-232 口不能为MPLAB ICD 2 提供电源,不过USB 口可以。
注意有些USB 集线器不能提供电源。
请针对当前的故障线索,查看在线帮助。
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)。
PCI故障代码1、特殊代码“00”和“FF”及其它起始码有三种情况出现:①已由一系列其它代码之后再出现:“00”或“FF”,则主板OK。
②如果将CMOS中设置无错误,则不严重的故障不会影响BIOS自检的继续,而最终出现“00”或“FF”。
③一开机就出现“00”或“FF”或其它起始代码并且不变化则为板没有运行起来。
2、本表是按代码值从小到大排序,卡中出码顺序不定。
3、未定义的代码表中未列出。
4、对于不同BIOS(常用的AMI、Award、Phoenix)用同一代码所代表的意义有所不同,因此应弄清您所检测的电脑是属于哪一种类型的BIOS,您可查问你的电脑使用手册,或从主板上的BIOS芯片上直接查看,也可以在启动屏幕时直接看到。
5、有少数主板的PCI槽只有前一部分代码出现,但ISA槽则有完整自检代码输出。
且目前已发现有极个别原装机主板的ISA槽无代码输出,而PCI槽则有完整代码输出,故建议您在查看代码不成功时,将本双槽卡换到另一种插槽试一下。
另外,同一块主板的不同PCI槽,有的槽有完整代码送出,如DEL L810主板只有靠近CPU的一个PCI槽有完整的代码显示,一直变化到“00”或“FF”,而其它槽走到“38”则不继续变化。
6、复位信号所需时间ISA与PCI不一定同步,故有可能ISA开始出代码,但PCI的复位灯还不熄,故PCI代码停在起始码上。
代码 Award BIOS Ami BIOS Phoenix BIOS或Tandy 3000 BIOS00 . 已显示系统的配置;即将控制INI19引导装入。
.01 处理器测试1,处理器状态核实,如果测试失败,循环是无限的。
处理器寄存器的测试即将开始,不可屏蔽中断即将停用。
CPU寄存器测试正在进行或者失败。
02 确定诊断的类型(正常或者制造)。
如果键盘缓冲器含有数据就会失效。
停用不可屏蔽中断;通过延迟开始。
CMOS写入/读出正在进行或者失灵。
03 清除8042键盘控制器,发出TESTKBRD命令(AAH)通电延迟已完成。
KEIL C编译器常见警告与错误信息的解决办法1. Warning 280:‟i‟:unreferenced local variable说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告2 Warning 206:‟Music3‟:missing function-prototype说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告3 Compling :C:\8051\MANN.CError:318:can‟t open file …beep.h‟说明在编译C:\8051\MANN.C 程序过程中由于main.c 用了指令#include “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中4 Compling:C:\8051\LED.CError 237:‟LedOn‟:function already has a body说明LedOn( )函数名称重复定义即有两个以上一样的函数名称解决方法修正其中的一个函数名称使得函数名称都是独立的5 ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAYX1MS?DELAY说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译6 ***WARNING 6 :XDATA SPACE MEMORY OVERLAPFROM : 0025HTO: 0025H说明外部资料ROM 的0025H 重复定义地址解决方法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它7 WARNING 206:‟DelayX1ms‟: missing function-prototypeC:\8051\INPUT.CError 267 :‟DelayX1ms …:requires ANSI-style prototype C:\8051\INPUT.C说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h的包含档宣告成外部以便其它函数调用8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOLSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)ADDRESS:0018H说明程序中有调用MUSIC 函数但未将该函数的含扩档C 加入到工程档Prj 作编译和连接解决方法设MUSIC3 函数在MUSIC C 里将MUSIC C 添加到工程文件中去9 ***ERROR 107:ADDESS SPACE OVERFLOWSPACE: DATASEGMENT: _DATA_GOUP_LENGTH: 0018H***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNALSYMBOL: VOLUMEMODULE: C:\8051\OSDM.OBJ (OSDM)ADDRESS: 4036H说明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会以data 型别的空间作暂存的个数超过0x7f 时就会出现地址不够的现象解决方法将以data 型别定义的公共变量修改为idata 型别的定义--------------------------------------------------------------------------------------------------keil c编译器错误与解决方法2008-05-27 20:191. Warning 280:‟i‟:unreferenced local variable 说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告2 Warning 206:‟Music3‟:missing function-prototype说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告3 Compling :C:\8051\MANN.CError:318:can‟t open file …beep.h‟说明在编译C:\8051\MANN.C 程序过程中由于main.c 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中4 Compling:C:\8051\LED.CError 237:‟LedOn‟:function already has a body说明LedOn( )函数名称重复定义即有两个以上一样的函数名称解决方法修正其中的一个函数名称使得函数名称都是独立的5 ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAYX1MS?DELAY说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译6 ***WARNING 6 :XDATA SPACE MEMORY OVERLAPFROM : 0025HTO: 0025H说明外部资料ROM 的0025H 重复定义地址解决方法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它7 WARNING 206:‟DelayX1ms‟: missing function-prototypeC:\8051\INPUT.CError 267 :‟DelayX1ms …:requires ANSI-style prototype C:\8051\INPUT.C说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调用8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOLSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)ADDRESS:0018H说明程序中有调用MUSIC 函数但未将该函数的含扩档C 加入到工程档Prj 作编译和连接解决方法设MUSIC3 函数在MUSIC C 里将MUSIC C 添加到工程文件中去9 ***ERROR 107:ADDESS SPACE OVERFLOWSPACE: DATASEGMENT: _DATA_GOUP_LENGTH: 0018H***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNALSYMBOL: VOLUMEMODULE: C:\8051\OSDM.OBJ (OSDM)ADDRESS: 4036H说明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会以data 型别的空间作暂存的个数超过0x7f 时就会出现地址不够的现象解决方法将以data 型别定义的公共变量修改为idata 型别的定义说明如对编译出错感兴趣的网友能否把你们常遇到的错误信息收集起来并提出最终的解决办法加以归纳以期共享10.***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?_WRITE_GMVLX1_REG?D_GMVLX1CALLER1: ?PR?VSYNC_INTERRUPT?MAINCALLER2: ?C_C51STARTUP***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?_SPI_SEND_WORD?D_SPICALLER1: ?PR?VSYNC_INTERRUPT?MAINCALLER2: ?C_C51STARTUP***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPICALLER1: ?PR?VSYNC_INTERRUPT?MAINCALLER2: ?C_C51STARTUP该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,或者同时被多个中断服务程序调用。
PIC 器件具有几个包含配置位或熔丝的存储单元。
这些位指定基本的器件操作,例如振荡器模式、看门狗定时器、编程模式和代码保护。
未正确设置这些位可能导致代码失败或器件无法运行。
对于 PIC18 器件,这些位可以使用配置 pragma 伪指令进行设置。
(在未来版本中,也会对于其他 8 位器件引入 pragma 伪指令。
)该 pragma 伪指令具有以下形式。
#pragma config setting = state|value#pragma config register = value其中, setting 是配置设置描述符(如 WDT), state 是所需状态的文本描述(如OFF)。
value 字段是一个可以优先用于描述符的数值。
* PIC16F1x端口控制实验* 芯片型号:PIC16F1936* 主要特性:增强性中档8位CPU,8K Flash,512字节RAM,最高速度8MIPS,11通道10位 AD,2个比较器,96段LCD控制器,16通道电容触摸模块,3个增强性PWM/捕获模块*/#include/* 配置芯片的工作方式,相当于其他单片机的熔丝位 */// CONFIG1#pragma config FOSC = INTOSC // 使用内部时钟#pragma config WDTE = OFF // 禁止看门狗#pragma config PWRTE = OFF // PWRT disabled#pragma config MCLRE = ON // MCLR/VPP pin function is MCLR#pragma config CP = OFF // 禁止程序代码保护(debug时要关闭代码保护)#pragma config CPD = OFF // 禁止EEPROM的保护#pragma config BOREN = ON // 使能欠压复位#pragma config CLKOUTEN = OFF // 禁止CLKOUT功能#pragma config IESO = ON // Internal/External Switchover mode is enabled#pragma config FCMEN = ON // Fail-Safe Clock Monitor is enabled)// CONFIG2#pragma config WRT = OFF // 禁止代码自编程保护#pragma config VCAPEN = OFF // All VCAP pin functionality is disabled#pragma config PLLEN = OFF // 禁止4x PLL#pragma config STVREN = ON // Stack Overflow or Underflow will cause a // Reset)#pragma config BORV = LO // 欠压复位电压为低档位(低档位为1.9V,高档位为2.5V)#pragma config LVP = OFF // 高压编程模式/* 定义系统时钟,在延时函数中需要这个定义 */#define _XTAL_FREQ 16000000UL#define Close_LED() TB4 = 0 // RB4输出低电平#define Open_LED() TB4 = 1 // RB4输出高电平int main(void){/* 禁止4X PLL,内部16MHz时钟源 */OSCCON = 0B11111000;/* 清除PORTB数据锁存寄存器 */LATB = 0;/* 设置RB4端口为输出口,注意PIC有点特殊,1为输入0为输出 */TRISBbits.TRISB4 = 0;/* RB4输出低电平 */TB4 = 0;/* 设置RB5端口为输入 */TRISBbits.TRISB5 = 1;/* RB5设置为数字端口 */ANSELBbits.ANSB5 = 0;/* 使能RB5内部上拉,作为数字输入端口在设计时要注意并不是所有端口都有内部上拉的 */WPUBbits.WPUB5 = 1;/* 等待按键按下 */while(PORTBbits.RB5 == 1);while (1){__delay_ms(1000);Open_LED();__delay_ms(1000);Close_LED();}}器件配置位可以在Window>Pic Memory Views>Configuration Bits中查询或者直接生成代码。
PIC单片机C语言编程讲义奥科电子工作室(内部资料)2006年元月第一版第1章 PIC 单片机的C 语言编程1.1 PIC 单片机C 语言编程简介用C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此C 语言编程在单片机系统设计中已得到越来越广泛的运用。
针对PIC 单片机的软件开发,同样可以用C 语言实现。
但在单片机上用C 语言写程序和在PC 机上写程序绝对不能简单等同。
现在的PC 机资源十分丰富,运算能力强大,因此程序员在写PC 机的应用程序时几乎不用关心编译后的可执行代码在运行过程中需要占用多少系统资源,也基本不用担心运行效率有多高。
写单片机的C 程序最关键的一点是单片机内的资源非常有限,控制的实时性要求又很高,因此,如果没有对单片机体系结构和硬件资源作详尽的了解,以笔者的愚见认为是无法写出高质量实用的C 语言程序。
这就是为什么前面所有章节中的的示范代码全部用基础的汇编指令实现的原因,希望籍此能使读者对PIC 单片机的指令体系和硬件资源有深入了解,在这基础之上再来讨论C 语言编程,就有水到渠成的感觉。
本讲稿围绕中档系列PIC 单片机来展开讨论,Microchip 公司自己没有针对中低档系列PIC单片机的C 语言编译器,但很多专业的第三方公司有众多支持PIC 单片机的C 语言编译器提供,常见的有Hitech、CCS、IAR、Bytecraft 等公司。
其中笔者最常用的是Hitech 公司的PICC 编译器,它稳定可靠,编译生成的代码效率高,在用PIC 单片机进行系统设计和开发的工程师群体中得到广泛认可。
其正式完全版软件需要购置,但在其网站上有限时的试用版供用户评估。
另外,Hitech 公司针对广大PIC 的业余爱好者和初学者还提供了完全免费的学习版PICC-Lite 编译器套件,它的使用方式和完全版相同,只是支持的PIC 单片机型号限制在PIC16F84、PIC16F877 和PIC16F628 等几款。
一、装入编译器:1、启动MPLAB-IDE,如下图所示选择Project-》Install Language2、在弹出的安装语言工具对话框里“Language Suite”选项现在显示的是Microchip,点击后面的箭头来选择语言。
我使用的工具是HI-TECH PICCME,所以选择为“HI-TECH PICC”。
3、接下来在“Tool Name”里选择编译器组件的调用路径,这里有“PICC Compiler”(C编译器)、“PICC Assemble Linker”(链接器)3项都需要设置。
用“Browse”来选择调用路径,把上述3项组件的调用文件都设为PICC.EXE。
点“OK”后完成设置。
二、选用编译器:1、新建一个项目,编辑项目对话框的“Language Tool Suite”栏目默认是“Microchip”,将它改为“HI-TECHPICC”。
2、在项目文件框里点“flasha[.hex]”,这时“Node Properties”(节点属性)按钮将会亮起来。
点击进入。
3、设置节点属性。
由于FLASHA.C还有其他相关连的源程序需要加进来,所以在“Language Tool”栏里应该选择“PICC Linker”(链接器)。
通常我们可以选择:1)Generate debug info:显示debug信息;2)Create map file:选择该项后我们将看到ROM、RAM的使用情况;3)Error file:显示错误信息;4)Compile for MPLAB ICD:如果不使用ICD,就不必选择这个项目了。
4、设置完成之后点“Add Node”来添加节点。
这个项目有两个节点:fla.c和flasha.c,选择节点后点击“Node Properties”或直接双击节点来进入节点属性设置。
5、节点文件的工具这时应该选择为“PICC Compiler”(C编译器),蓝色圈子里的4项依次是:1)显示debug 信息;2)局部优化;3)全局优化;4)ICD编译配件。
C++常见的编译错误中英对应翻译对于刚学编程,刚接触C++的新手来说,编译运行报错是最头疼的一件事,爆出一堆英文,英语差一点的又不知道什么意思,所以也不知道如何去改,在此,我给大家传一份常见错误中英文对照表及简单解释,希望可以帮到大家:fatal error C1003: error count exceeds number; stoppin g compila tion中文对照:(编译错误)错误太多,停止编译分析:修改之前的错误,再次编译fatal error C1004: unexpec ted end of file found中文对照:(编译错误)文件未结束分析:一个函数或者一个结构定义缺少“}”、或者在一个函数调用或表达式中括号没有配对出现、或者注释符“/*…*/”不完整等fatal error C1083: Cannotopen include file: 'xxx': No such file or directo ry中文对照:(编译错误)无法打开头文件x xx:没有这个文件或路径分析:头文件不存在、或者头文件拼写错误、或者文件为只读fatal error C1903: unableto recover from previou s error(s); stoppin g compila tion中文对照:(编译错误)无法从之前的错误中恢复,停止编译分析:引起错误的原因很多,建议先修改之前的错误error C2001: newline in constan t中文对照:(编译错误)常量中创建新行分析:字符串常量多行书写error C2006: #include expecte d a filenam e, found 'identif ier'中文对照:(编译错误)#include命令中需要文件名分析:一般是头文件未用一对双引号或尖括号括起来,例如“#include stdio.h”error C2007: #definesyntax中文对照:(编译错误)#define语法错误分析:例如“#define”后缺少宏名,例如“#define”error C2008: 'xxx' : unexpec ted in macro definit ion中文对照:(编译错误)宏定义时出现了意外的xxx分析:宏定义时宏名与替换串之间应有空格,例如“#defineTRUE"1"”error C2009: reuse of macro formal'identif ier'中文对照:(编译错误)带参宏的形式参数重复使用分析:宏定义如有参数不能重名,例如“#defines(a,a) (a*a)”中参数a重复error C2010: 'charact er' : unexpec ted in macro formalparamet er list中文对照:(编译错误)带参宏的形式参数表中出现未知字符分析:例如“#defines(r|) r*r”中参数多了一个字符‘|’error C2014: preproc essorcommand must start as first nonwhit e space中文对照:(编译错误)预处理命令前面只允许空格分析:每一条预处理命令都应独占一行,不应出现其他非空格字符error C2015: too many charact ers in constan t中文对照:(编译错误)常量中包含多个字符分析:字符型常量的单引号中只能有一个字符,或是以“\”开始的一个转义字符,例如“char error = 'error';”error C2017: illegal escapesequenc e中文对照:(编译错误)转义字符非法分析:一般是转义字符位于' ' 或" " 之外,例如“char error = ' '\n;”error C2018: unknown charact er '0xhh'中文对照:(编译错误)未知的字符0x hh分析:一般是输入了中文标点符号,例如“char error = 'E';”中“;”为中文标点符号error C2019: expecte d preproc essordirecti ve, found 'charact er'中文对照:(编译错误)期待预处理命令,但有无效字符分析:一般是预处理命令的#号后误输入其他无效字符,例如“#!defineTRUE 1”error C2021: expecte d exponen t value, not 'charact er'中文对照:(编译错误)期待指数值,不能是字符分析:一般是浮点数的指数表示形式有误,例如123.456Eerror C2039: 'identif ier1' : is not a memberof 'identif ier2'中文对照:(编译错误)标识符1不是标识符2的成员分析:程序错误地调用或引用结构体、共用体、类的成员error C2041: illegal digit 'x' for base 'n'中文对照:(编译错误)对于n进制来说数字x非法分析:一般是八进制或十六进制数表示错误,例如“int i = 081;”语句中数字‘8’不是八进制的基数error C2048: more than one default中文对照:(编译错误)default语句多于一个分析:switch语句中只能有一个defau l t,删去多余的de faulterror C2050: switchexpress ion not integra l中文对照:(编译错误)switch表达式不是整型的分析:switch表达式必须是整型(或字符型),例如“switch("a")”中表达式为字符串,这是非法的error C2051: case express ion not constan t中文对照:(编译错误)case表达式不是常量分析:case表达式应为常量表达式,例如“case "a"”中“"a"”为字符串,这是非法的error C2052: 'type' : illegal type for case express ion中文对照:(编译错误)case表达式类型非法分析:case表达式必须是一个整型常量(包括字符型)error C2057: expecte d constan t express ion中文对照:(编译错误)期待常量表达式分析:一般是定义数组时数组长度为变量,例如“int n=10; int a[n];”中n为变量,这是非法的error C2058: constan t express ion is not integra l中文对照:(编译错误)常量表达式不是整数分析:一般是定义数组时数组长度不是整型常量error C2059: syntaxerror : 'xxx'中文对照:(编译错误)‘xxx’语法错误分析:引起错误的原因很多,可能多加或少加了符号xxxerror C2064: term does not evaluat e to a functio n中文对照:(编译错误)无法识别函数语言分析:1、函数参数有误,表达式可能不正确,例如“sqrt(s(s-a)(s-b)(s-c));”中表达式不正确2、变量与函数重名或该标识符不是函数,例如“int i,j; j=i();”中i不是函数error C2065: 'xxx' : undecla red identif ier中文对照:(编译错误)未定义的标识符x xx分析:1、如果xxx为c o ut、cin、scanf、printf、sqrt等,则程序中包含头文件有误2、未定义变量、数组、函数原型等,注意拼写错误或区分大小写。
PIC 单片机烧写程序时提示Fuse error 0x2007 错误今天在PIC 单片机烧写程序时提示Fuse error 0x2007 该错误的原因主要是因为配置位的错误没有详细的去研究,大概做个判断一应该是编译器或者编程软件的错误,有两个位不能读出来,也可能是置代码保护的原因。
当把代码保护的配置位关闭后,该错误消失。
所以目前的解决方法是:在code 中关闭代码保护功能。
//********************************************知识补充***********************************************//在PIC 系列单片机里,其芯片内部大都有设置一个特殊的程序存储单元,地址为2007,由单片机的用户自由配置,用来定义一些单片机功能电路单元的性能选项。
我们把这个单元叫做器件配置字(Configuration Bits)。
这种设计给单片机开发工程师带来了很大的灵活性,但是也给初学者带来了一些麻烦。
在编译器里怎么样对配置位编程PIC 单片机正常运行时,是无法对配置位进行存取的,只能在编程模式下存取。
可以通过对配置位编程( 读为0) 或不编程( 读为1) 来选择不同的器件配置。
对配置位编程后,是否能够更改其设置取决于器件的存储工艺和封装形式。
对于只读存储器(ROM) 器件,这些配置位在ROM 代码提交时即被确定,且一旦器件掩膜完成,即无法更改( 若要更改,则需新的掩膜代码)。
对一次可编程(OTP) 器件,一旦这些位被编程( 为0),就无法更改了,而FLASH 的单片机在每次编程下载的时候是可以更改的。
编译器一般都可以采用菜单方式设置,在编译程序时将设置字一并完成,烧写芯片同时完成CONFIG 的烧入。
用PIC 官方编译工具MPLAB IDE7.30 设在编译器里对配置位编程。
点击菜单栏Configure 下的Configuration Bits 出现的对话框)。