PIC编译错误信息
开发工具ICD2使用问题解决(PIC编程)

开发工具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 集线器不能提供电源。
请针对当前的故障线索,查看在线帮助。
指令PIC的指令详解

MOVWF REG1
MOVLW 2
SUBWF REG1,0 W=1 C=1
MOVLW 2
MOVWF REG1
MOVLW 2
SUBWF REG1,0 W=0 C=1
MOVLW 2
MOVWF REG1
MOVLW 3
SUBWF REG1,0 W=FF C=0
51.SUBTRACT W FROM F WITH BORROW
DAW REG1,0 (对F中内容进行10进制调整->F/W+F)
REG1=0XA5 C=0 DC=0->0X05 C=1 DC=0
20.DECREMENT F
DECF CNT,1(寄存器内容减1->W/F)
21.DECREMENT F,SHIP IF 0
DECFSZ CNT,1
LCALL LOW 调用子程序(指令只含低8位地址)
30.MOVE F
MOVF REG,0 ((REG)->W)
31.MOVE F TO P
MOVFP F,P (F:00H-FFH P:00H-1FH)
55.TABLE L
SUBLW K
K-(W)->W
MOVLW 01H
SUBLW 02H W=01H C=1结果为正
MOVLW 02H
SUBLW 02H W=0 C=1结果为0
MOVLW 02H
SUBLW 01H W=FF C=0结果为负
50.SUBTRACT W FROM F
SUBWF F,D
MOVLR 5 BSR=0X22->0X52 (传至高4位 低4位为0)
用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)。
PIC主板故障代码

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学习记录(自动保存的)

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 语言编程

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 等几款。
PIC单片机的C语言使用(一)——在MPLAB-IDE中使用HitechC编译器

一、装入编译器: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编译配件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
66.
Error[000] : Can't find 0x26 words (0x26 withtotal) for psect text13 in segment CODE
Error[000] : Can't find 0xC words (0xC withtotal) for psect text in segment CODE
代码地址超出ROM范围,常伴随error [118]而出现。
42.
[118] Overwriting previous address contents
重复的代码地址。
43.
[120] Call or jump not allowed at this address
无效的调用或跳转地址。
44.
[121] Illegal label
10.
Illegal argument
非法参数。
11.
Illegal condition
IF语句中的条件符号出错。
12.
Illegal condition,EOF encountered before END or conditional end directive
IF、WHILE或MACRO语句中缺少相应的ENDIF、ENDW和ENDM。
13.
Illegal conditional compile
IF/ELSE/ENDIF结构书写有错。
14.
Illegal character…in label…
在标号字符中出现非法字符。合法的字符是“-”、“·”、“A”~“Z”、“a”~“z”、“0”~“9”。
15.
Illegal digit
非法数字。如在十进制数中出现十六进制符等。
超过256次循环未结束的While条件语句。
57.
[143] Illegal nesting
非法的嵌套。
58.
[145] Unmatched ENDM
未匹配的endm。
59.
[149] Directive only allowed when generating an object file
错误应用仅在目标文件生成时允许的指令。
变量buzz1未定义就使用,变量应先定义后使用。
70.
Error[000] D:\Work\standard\remo.c 80 : inappropriate 'else'
If,else语句未成对使用,缺少if条件,提示不对称的else。
71.
Error[000] : undefined symbols: Error[000] : _chipsel (D:\Work\standard\mini.obj)
未定义的标签,确认子程序chipsel()等是否可以被调用,检查是否在INCLUDE中,是否在调用前进行了函数原型声明。
72.
rror[000] D:\Work\standard\mini.c 19 : Cannot open include file "I2C.c1"
包含的文件名错误,检查包含的文件和原文件的命名是否相同。
unsigned char *ptr0; //定义指向bank0/1的指针
bank2 unsigned char buff[8]; //定义bank2中的一个缓冲区
程序语Байду номын сангаас:
ptr0 = buff; //错误!试图将bank2内的变量地址赋给指向bank0/1的指针
,如果你看到了“Fixup overflow”的错误指示,请重点检查程序中有关指针的操作。
Error [477] ; . fixup overflow in expression (location 0x1FEE (0x1FE6+8), size 2, value 0xFF5)
◆既然定义的指针有明确的bank适用区域,在对指针变量赋值时就必须实现类型匹配,
下面的指针赋值将产生一个致命错误:
缺少宏定义名称。
20.
Marco nested too deep
宏体嵌套太多。宏体中最多可嵌套8重。
21.
Missing arguments
缺少参数,如指令中缺少操作数等。
22.
Missing terminator
缺少配对符,如各种括号“)”、“〕”、“}”或“·”、空格等。
23.
Nested forward reference not allowed.
汇编的源程序文件不存在。
6.
Duplicate lable or redefininy symbol that cannot be redefined
标号或变量名重复定义。
7.
Error in parameter
参数错误。
8.
Expected…
源程序行有错。
9.
File not found
指定的文件找不到。
单片机芯片型号未定义。要么在源程序中未定义,要么在使用MPASM汇编时未定义。
27.
Processor type previously defined
单片机芯片型号重复定义。
28.
Symbol table full
符号表溢出。
29.
Temp file creation error
MPASM在汇编过程中会使用一些临时性文件。这个错一般是电脑磁盘满或读写出错引起。
16.
Illegal opcode
非法操作数。
17.
Include file not found
Include指令中的文件找不到。
18.
Include files nested too cleep
Include文件嵌套太多。Include文件嵌套最多的为5重。
19.
Macro name missing
Error[000] D:\Work\standard_\remo.c 8 : { expected
程序中大括号不完整,检查{}是否完整成对使用
68.
Error[000] D:\Work\standard\remo.c 8 : ; expected
程序代码后缺少“;”号。
69.
Error[000] D:\Work\standard\remo.c 10 : undefined identifier: buzz1
60.
[151] Operand contains unresolvable labels or is too complex
错误的操作数。
61.
[152] Executable code and data must be defined in an appropriate section
错误定位的代码和数据。
使用未定义的标号、变量、宏定义等。或者是MPASM不能确认标号的类型,一般由标号重复定义引起。
24.
Out of memory
程序空间溢出。
25.
Overwriting previous address contents
程序空间重复使用。一般由地址定义指令ORG定义不当引起。
26.
Processor type is undefined
未定义的器件选型。
53.
[132] Unknown processor
未知的器件选型。
54.
[135] Macro name missing
缺少名字的宏定义。
55.
[136] Duplicate macro name
重复名字的宏定义。
56.
[140] WHILE must terminate within 256 iterations
48.
[127] Too many arguments
太多的操作数。
49.
[128] Missing argument(s)
不足的操作数。
50.
[129] Expected
缺少操作数。
51.
[130] Processor type previously defined
错误的器件选型。
52.
[131] Processor type is undefined
While语句中没有结束的条件产生。
34.
Can't find 0x12C words for psect rbss_1 in segment BANK1
连接器告诉你总共有0x12C(300)个字节准备放到bank1中但bank1容量不够。显然,只
有把一部分原本定位在bank1中的变量改放到其它bank中才能解决此问题。
未定义的符号。 使用的符号事先未定义,检查符号的拼写和使用位置。地址可以不需要声明,但是常量和变量必须要在使用前声明。
还有INC文件中定义和程序中使用都要是大写
#include文件内部可以嵌套#include文件,当文件中包含有声明的时候,就要注意其位置是否在使用符号之前。通常都将#include文件置于程序的最前面。
38.
[114] Divide by zero
除数为0。
39.
[115] Duplicate label
重复定义标号。
40.
[116] Address label duplicated or different in second pass
重复的地址标号。
41.
[117] Address wrapped around 0
错误/警告/消息信息
MPASM汇编一个源程序后,可以产生一个.ERR文件,该文件用来存放汇编后可能产生的错误或警告信息。必须强调的是错误信息(Error)是指出源程序中出现“致命”(fatal)的错误,用户必须修改直至汇编后Errors= 0。而警告信息(Warnings)是指出源程序中可能有问题的地方,但并不一定是“致命”错误,只是提醒用户去注意这些被警告的地方。如果用户可以确认无误,便可以不理会产生的Warnings。