3942|0

6892

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

picc中几个容易被疏忽的关键点 [复制链接]

一、关键字static 可能会有很多人还在问什么时候才要用到static这个关键字,我们先来说一下什么是static,static是相对auto而言的,它是用来声明一个局部变量为静态变量。我们很经常会希望一个局部变量在在函数调用结束后还保留原来的值作为下次调用该函数局部变量的初始值,这个时候我们就要将这个变量声明为static。举个反面例子来说吧,在函数A定义一个局部变量unsigned char i,这时候i是个动态的局部变量,只有在调用函数A时,才给i分配一个内存单元,而此时分配的内存单元是由编译器决定的,这样可能会导致下次再调用到函数A时,i是一个不确定的值,这样就有可能导致无法得到你事先想要的结果。我们只要将unsigned char i声明为static unsigned char i结果一定如你所愿,不相信马上回去试一下^_^! 当然还可以将i定义为全局变量也是可以解决这个问题的,试想一下我们会把所有的变量都定义这全局变量吗?答案是否定的。


二、关键字volatile volatile的本意是“易变的” (这里引用了海涛的笔记)
 volatile常用在如下的几个地方:   
  1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
  2、多任务环境下各任务间共享的标志应该加volatile;   
  3、存储器映射的硬件寄存器通常也要加volatile说明。


三、绝对定位static unsigned char i @ 0x30;这里将变量i定位在地址为bank0 0x30的地址上,但是你要是仔细读过张明锋的《pic C语言》具体的文章名字记得不清楚了,可以到网上搜一下。你就会对这个问题会造成的后果有所了解。在这里我也说一下,这里的绝对定位并不等同于将0x30这个地址空间分配给变量i ,即便你已经用static声明了。也就是说编译器可能在后续的操作中将ox30这个地址空间分配给别的变量j,这样就会造成i和j 的数据紊乱,得不到我们想要的结果。这个问题我可是花了三天时间看了编译后反汇编才发现的,所以我个人是不提倡用绝对定位。


四、config宏指令应用,个人认为这条宏指令相当好用,可以省去在烧片是的很多烦琐的设置。具体的使用方法可以去看一下《MPLAB伪指令总表》,在这里贴上偶在程序上的应用
   __CONFIG(INT_OSCIO & WDT_ON & BOD_ON & CP_OFF & CPD_OFF & MCLR_OFF & PWRT_ON);在这里设置了使用内部时钟,看门狗打开,掉电复位打开,EEPROM的程序存储器保护关闭,EEPROM数据存储器保护关闭,复位引脚复位功能关闭,上电复位打开。


五、内部EEPROM操作 网上流传的都是不加修改的从数据手册copy。如果你实际操作它时,你会发现读写一两个字节是不会有什么问题的。但是你要是多字节读写,就会发现结果不是你想要的,这里关键是看门狗已经溢出了,所以最好在读写里程序里面加个清看门狗指令。

此帖出自单片机论坛
点赞 关注
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表