PIC初学者常犯的错误

PICC使用中初学者容易犯得两个错误

我是初次使用PIC单片机,对PICC的编程规范不了解,在编译程序时老是出问题。现在介绍两个最常见的问题给大家,看看有没有和我遇到一样问题的。

错误1:变量定义赋值先后顺序问题很重要

开发环境为MPLAB IDE V7.43 + PICC 。如下两种代码书写方式,在补充完整之后,哪一个会编译出错?( flag_sendKeyByte 为全局位变量,已定义过)

A:

flag_sendKeyByte = 0;
unsign char mbit = 0;

B:
unsign char mbit = 0;
flag_sendKeyByte = 0;

使用正常的C语言习惯来看,似乎都没问题,都是赋值,仅仅是先后位置不一样。但是在PIC单片机的编译环境下,A是错误的,B是正确的。

在出现这一编译错误时,我查找了很久。由于初次接触PIC,了解不多,导致走了很多弯路。最后逐行删除代码,逐行修改,最后才发现是次序错了。

PIC 单片机的编译环境要求变量赋值必须在变量定义之后。而不允许在给一个变量赋值后再去定义另一个变量并赋值。似乎是因为编译环境在赋值之前会先处理所有的变量定义。如果检测到一个变量赋值语句则该函数或子程序后面的定义它将不再检查,导致最后编译的时候出现某些变量未定义。

(注:以上这些分析是我自己揣摩的,可能分析的不对,还请高手指正)

可笑的是,编译出错的提示信息却是乱七八糟的,而不是说存在未定义的变量。下面的提示就是我编译时提示的,对一个初学者来说,根据这些提示能找到错误源吗?

Error[000] D:\documents\PIC\test\keyboard\ps2.c 387 : probable missing '}' in previous block
Error[000] D:\documents\PIC\test\keyboard\ps2.c 388 : undefined identifier: ch
Error[000] D:\documents\PIC\test\keyboard\ps2.c 388 : constant expression required
Warning[000] D:\documents\PIC\test\keyboard\ps2.c 390 : missing basic type: int assumed
Error[000] D:\documents\PIC\test\keyboard\ps2.c 390 : type redeclared
Error[000] D:\documents\PIC\test\keyboard\ps2.c 390 : identifier redefined: calc_parity (from line 64)
Error[000] D:\documents\PIC\test\keyboard\ps2.c 390 : constant expression required

....

后面还有很多,一直到程序的最后都会提示出错。把A中的写法换成B的写法,编译就成功了。

感觉这个编译环境太不好用了。以前用过C8051F系列的开发工具,那个就好用多了。把这个问题提出来,提醒初学者别犯我这样的错误。

错误2,could not find file 'c018i.o'

在使用MPIDE +MCC18 编译时经常出现下列提示: “could not find file 'c018i.o'”

解决办法:是因为没有指定库的默认路径。点project->build option->project.在Directories选项卡里,点击show directories for:右侧的下拉菜单,找到library search path项,选择new,在新建的项目里指定路径为c:\mcc18\lib。点击确定。再次编译即可成功。

 

————————————————————————————————

C语言中变量的声明必须在一个block的开头
一个block就是指一对{}大括号包起来的部分
变量的声明必须紧跟在"{"之后,中间不能夹其它代码。

还有比如for(char i=0; i< 20 ; i++){ do something...},这在有的编译器可以用,有的不行
这样的写法也是不正确的,会报一个语法错误,一个变量未声明的错误
如果想用,但是又不想在block的开头去声明这个临时变量i,可以这样做:
{ //注意这个大括号
    char i;
    for(i=0; i< 20 ; i++){ /*do something...*/}
} //注意这个大括号
这样保证了声明在block开头的同时,又能使用局部变量而不用到前面去声明

转载于:https://www.cnblogs.com/wangh0802PositiveANDupward/archive/2012/07/29/2614171.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高性能RISC CPU: • 仅需学习49 条指令: - 除了跳转指令以外,所有指令都是单周期的 • 工作速度: - DC- 32 MHz 振荡器/ 时钟输入 - DC- 125 ns 指令周期 • 可寻址最大4 KB 的线性程序存储空间 • 可寻址最大256 字节的线性数据存储空间 • 带有自动现场保护的中断功能 • 带有可选上溢/ 下溢复位的16 级深硬件堆栈 • 直接、间接和相对寻址模式: - 两个完全16 位文件选择寄存器(File Select Register, FSR) - FSR可以读取程序和数据存储器 灵活的振荡器结构: • 精确的32 MHz 内部振荡器模块: - 出厂时精度已校准到±1%,典型值 - 可通过软件选择频率范围:31 kHz 至32 MHz • 31 kHz 低功耗内部振荡器 • 4 种晶振模式,频率最高为32 MHz • 三种外部时钟模式,频率最高为32 MHz • 4 倍频锁相环(Phase Lock Loop, PLL) • 故障保护时钟监视器(Fail-Safe Clock Monitor, FSCM): - 当外设时钟停止时可使器件安全关闭 • 双速振荡器启动 • 参考时钟模块: - 可编程时钟输出频率和占空比 单片机特性: • 1.8V-5.5V 工作电压——PIC16F1824/1828 • 1.8V-3.6V 工作电压——PIC16LF1824/1828 • 可在软件控制下自编程 • 上电复位(Power-on Reset,POR)、上电延时定 时器(Power-up Timer,PWRT)和振荡器起振定 时器(Oscillator Start-up Timer, OST) • 可编程欠压复位(Brown-out Reset, BOR) • 扩展型看门狗定时器(Watchdog Timer, WDT) • 通过两个引脚进行在线串行编程(In-Circuit Serial Programming™, ICSP™) • 通过两个引脚进行在线调试(In-Circuit Debug,ICD) • 增强型低电压编程(Low-Voltage Programming, LVP) • 工作电压范围: - 1.8V-5.5V (PIC16F1824/1828) - 1.8V-3.6V (PIC16LF1824/1828) • 可编程代码保护 • 节能休眠模式 采用nanoWatt XLP 的超低功耗管理 PIC16LF1824/1828: • 休眠模式:20 nA • 看门狗定时器:500 nA • Timer1 振荡器:32 kHz 时为600 nA 模拟特性: • 模数转换器(Analog-to-Digital Converter,ADC) 模块: - 10位分辨率,最多12 路通道 - 自动采集功能 - 可在休眠模式下进行转换 • 模拟比较器模块: - 两个轨到轨模拟比较器 - 功耗模式控制 - 可通过软件控制滞后 • 参考电压模块: - 具有1.024V、2.048V 和4.096V 输出电压的固 定参考电压(Fixed Voltage Reference,FVR) - 带有正负参考电压选择的5位轨到轨电阻式DAC 外设特性: • 最多17 个I/O 引脚和1 个仅用作输入的引脚: - 高灌/ 拉电流:25 mA/25 mA - 可编程弱上拉 - 可编程电平变化中断引脚 • Timer0:带有8 位预分频器的8 位定时器/ 计数器 • 增强型Timer1: - 带有预分频器的16 位定时器/ 计数器 - 外部门控输入模式 - 专用的低功耗32 kHz 振荡器驱动器 • 3 个Timer2 型模块:带有8 位周期寄存器、预分频 器和后分频器的8 位定时器/ 计数器 • 两个捕捉/ 比较/PWM (Capture/Compare/PWM, CCP)模块 • 两个增强型CCP (ECCP)模块: - 可通过软件选择时基 - 自动关闭和自动重启 - PWM转向 • 带有SPI 和I2CTM 的主同步串行端口(Master Synchronous Serial Port, MSSP): - 7位地址掩码 - SMBus/PMBusTM 兼容 • 增强型通用同步/ 异步收发器(Enhanced Universal Synchronous Asynchronous Receiver Transmitter, EUSART)模块 • mTouch™ 传感振荡器模块: - 最多12 路输入通道 • 数据信号调制器模块: - 可选择调制器和载波源

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值