当前位置:首页 > 单片机 > 单片机
[导读]我是初次使用PIC单片机,对PICC的编程规范不了解,在编译程序时老是出问题。现在介绍两个最常见的问题给大家,看看有没有和我遇到一样问题的。错误1:变量定义赋值先后顺序问题很重要开发环境为MPLAB IDE V7.43 + PI

我是初次使用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:documentsPICtestkeyboardps2.c 387 : probable missing '}' in previous block
Error[000] D:documentsPICtestkeyboardps2.c 388 : undefined identifier: ch
Error[000] D:documentsPICtestkeyboardps2.c 388 : constant expression required
Warning[000] D:documentsPICtestkeyboardps2.c 390 : missing basic type: int assumed
Error[000] D:documentsPICtestkeyboardps2.c 390 : type redeclared
Error[000] D:documentsPICtestkeyboardps2.c 390 : identifier redefined: calc_parity (from line 64)
Error[000] D:documentsPICtestkeyboardps2.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:mcc18lib。点击确定。再次编译即可成功。

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

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开头的同时,又能使用局部变量而不用到前面去声明


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

pic单片机应用很多,生活中到处都有pic单片机的身影。小编个人也是从事pic单片机开发的人员之一,对于pic单片机有一定的理解。今天,小编将带领大家一起看一下pic单片所具备的8大优势。

关键字: pic 单片机 寄存器

如何记录呢?此次福建行,就来和大家分享一下记录的技巧。摄影初学者都有一个惯性思维,就是认为看到好的风景按下快门即可,于是导致每到一处地方就猛按快门,但是最后能拿出手的几乎没有,拍了一年半载甚至更长时间,摄影水平还是停留在...

关键字: 记录 摄影 初学者

众所周知,早些年,高等院校确确实实培养了一大批嵌入式系统师资队伍,但其中不少教师长期脱离一线科研,而从事嵌入式科研工作的教师,常常忙于繁重的科研工作,难以深入到嵌入式系统基础课程的教学改革之中。

关键字: 嵌入式 科研 初学者

SpiceJet 成为首家借力Q400客机提升盈利潜力的航空公司 加拿大多伦多, Sept. 24, 2018 (GLOBE NEWSWIRE) -- Bombardier Commercial

关键字: pic ce

什么是PIC单片机?你知道多少?时代的变迁,PIC单片机是这个时代的新宠。之前我们对pic单片机的I/O接口进行过阐述,不是很详细。本期对关于PIC单片机的各种内部硬件资源加以介绍,以帮助大家全面掌握pic单片机打下夯实...

关键字: pic 单片机 电路

pic单片机具备很多应用,对于pic单片机,想必大家并不陌生。往期文章中,小编对pic单片机做过诸多介绍。本文中,小编将为大家带来6个pic单片机问题,并予以解答。而在之后的pic单片机文章中,小编将带来另外6个问题。如...

关键字: pic pic单片机 单片机 指数

对于c编译器,大家应早已熟悉。往期文章中,小编带来诸多c编译器相关文章,尤其是gcc c编译器。本文中,小编将对gcc c编译器如何编译c程序予以介绍,并在文章的后半部分向大家讲解如果选择pic单片机的c编译器。如果你对...

关键字: c编译器 gcc pic 指数

​2020年2月13日,北京——是德科技宣布,该公司即将与国家信息光电子创新中心(NOEIC)和CompoundTek展开合作,三方携手建立光子集成电路(PIC)自动化测试的布局设计标准。

关键字: pic 自动化测试 fdr

​Microchip PIC18-Q43系列产品将更多的独立于内核的外设(CIP)及功能丰富的开发工具生态系统相结合,可改善实时控制和互联应用的设计

关键字: MCU pic cip

还有一个问题也是值得注意的,就是在中断服务程序中避免打开全局中断允许位,因为PIC单片机不支持中断嵌套,否则在执行一个中断服务程序还未结束就进入另一个中断服务程序后,上一个中断的现场参数将遭到破坏,从而导致程序产生不可预...

关键字: pic 单片机 电源技术解析
关闭
关闭