您的位置 首页 软件

可移植程序的讨论

对于一些状态的集合,尽可能使用enum而不是#define来定义。如:enum{OFF=0,ON=1};远比#defineOFF0#defineON1好。两…

关于一些情况的调集,尽可能运用enum而不是#define 来界说。

如:

enum {OFF = 0, ON = 1};

远比

#define OFF 0

#define ON 1

好。

两种写法编译的作用是相同的,可是写程序及看程序的人员来说感觉就不相同了。用enum界说时,能够觉得OFF与ON是一个调集,有相关性(且可削减程序中#define的界说)。但用#define界说时,彻底能够为OFF与ON不相干。特别是在程序中#define界说过多时,查找并了解它的意思都是一个苦楚。(如:uc/os,看见它的一大堆#define都头大,要彻底理解那一堆界说都得花不少时刻)

第二,程序中少用

#if

#ifdef

等条件编译。不符合条件的程序段是不被编译的,都不查看语法过错,当在某些情况下打开了条件开关时,或许一堆过错就呈现了。并且程序并不利于阅览,当读程序时忽然得去查找某东东是否#define真是苦楚。

好了,下面是我的习气

1、I/O口输出电平界说一下,今后假如I/O电平驱动取反,一改就好。

//I/O Port Stutes

enum {OFF = 0, ON = 1};

//Led Stutes

enum {LED_ON = 0, LED_OFF = 1};

eg. LED = LED _ON; //低电平驱动LED亮。

2、I/O口与任何的其它IC接口,I/O口都要界说,不能直接运用I/O口。(便利今后用于其它的运用中)

如93C46:

#define CS93C46 P1_0 //片选信号

#define SK93C46 P1_1 //时钟信号

#define DI93C46 P1_2 //数据输入,相对93C46而言 (即93C46的数据输入)

#define DO93C46 P1_3 //数据输出

如字符型LCD:

#define LCDPORT P0 //lcd数据口

#define RS P1_7 //数据指令挑选。低–ins ; 高–data

#define RW P1_6 //读写挑选。 低–w ; 高–r

#define EN P1_5 //使能。 高到低–使能。

3、键盘口要界说输进口及屏蔽字

如:

#define KEYMASK 0x0f

#define KEYPORT P2

4、串口用中止驱动,要带Buf。

5、取按键的程序及串口的程序编2个,一个为非堵塞式,一个为堵塞式(不按键或不收到数据不回来)。

6、晶振频率要界说

#define FOSC 11059200ul //频率

7、波特律界说

#define BAUD 4800 //波特率4800

#define SMODX 0 //是否倍频 0-NO or 1-YES

#define T1H_VAL (256 – (UINT8)(FOSC * (1<

#define T1L_VAL T1H_VAL

8、延时程序赋值时写成FOSC函数,编译器会预先算,不占用MCU资源

今后移植便利

9、液晶程序一定要界说长宽

如点阵型:

#define ROW 64

#define CLUM 128 /*128*64*/

字符型:

#define ROW 4

#define CLUM 20 /*128*64*/

#define ROW1_ADDR (0x80 + 0) //榜首行地址

#define ROW2_ADDR (ROW1_ADDR + 0x40) //第二行地址

#define ROW3_ADDR (ROW1_ADDR + CLUM) //第三行地址

#define ROW4_ADDR (ROW2_ADDR + CLUM) //第四行地址

然后一切的和液晶地址有关的核算悉数引证这2个量。

换用任何屏直接一改,高层不变

10、驱动层与运用接口层分在不同的文件,移植便利。

如:键盘、LCD、串口等。

再说下功率问题:

switch与if的功率

switch与if的差异

假如朴实比较数字或字符,主张运用switch,因为它只会在一开始的switch括号中取出变量值一次,然后将这个值与下面所设定的case比较,但假如运用if,每次遇到条件式时,都要取出变量值,功率的差异就在这儿。例如:

if(a==1)

//…

elseif(a==2)

//…

elseif(a==3)

//…

这个程序片段在最差的情况下,也便是a=3时,共需3次比较,而每次比较都必须取出变量a的值一次。假如换成switch:

switch(a)

{

case1:

//…

break;

case2:

//…

break;

case3:

//…

break;

}

在这个程序片段中,只在最初switch的括号中取出变量a的值,然后逐个比较下面的case,功率的不同就在这儿。当然并不是运用if就欠好,遇到复合条件时,switch就帮不上忙了,因为无法在switch中组合杂乱的条件句子,这时就得运用if了。简略地说,if与switch两者能够搭配着灵敏运用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/268360.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部