高效可移植程序的一些习惯

来源:本站
导读:目前正在解读《高效可移植程序的一些习惯》的相关信息,《高效可移植程序的一些习惯》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《高效可移植程序的一些习惯》的详细说明。
简介:本文主要介绍的是高效可移植程序的一些习惯。

对于一些状态的集合,尽可能使用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 Stutesenum {OFF = 0, ON = 1};//Led Stutesenum {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 P24、串口用中断驱动,要带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<<SMODX) * 1.0 / 384 / BAUD))#define T1L_VAL T1H_VAL8、延时程序赋值时写成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、串口等。

提醒:《高效可移植程序的一些习惯》最后刷新时间 2024-03-14 01:03:24,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《高效可移植程序的一些习惯》该内容的真实性请自行鉴别。