专栏中心

EEPW首页 > 专栏 > 高效可移植程序的一些习惯(转)

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

发布人:chen_yuangui 时间:2009-08-18 来源:工程师 发布文章
高效可移植程序的一些习惯(转)

对于一些状态的集合,尽可能使用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<<SMODX) * 1.0 / 384 / BAUD))

#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、串口等。

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

在低功耗MCU上实现人工智能和机器学习

瑞萨单片机技术概述

视频 2011-06-13

DSP网址推荐

hpnet 2003-03-24

Gartner预测到2027年,跨境GenAI滥用引起的AI数据泄露比例将达到40%

基于uClinux的GPSOne/GPS双定位信息接收

资源下载 2007-03-21

从闪存到MRAM:满足现代FPGA配置的需求

μC/OS-ll中任务调度算法的改进

瑞萨16位单片机讲座

视频 2011-06-14

是德科技将在2025年世界移动通信大会上展示无线创新技术

VxWorks体系下PowerPC860处理器串行总线设计

意法半导体新推出的NFC读取器芯片和全套模块化开发工具加快非接产品设计

先进汽车GPU的高速和高效开发将加速智能驾驶的更广泛普及

Microwindows在远程红外抄表器中的应用

Microchip扩展maXTouch M1系列器件,支持汽车大尺寸、曲面及异形显示屏

Easy MCU Easy RF

视频 2011-06-14

Arm推出GitHub Copilot新扩展程序,助力快速迁移至Arm架构服务器

ARM微处理器系统开发(S3C4510B)

FPGA和数据溯源保障AI安全

贸泽开售采用先进AI实现环境检测的Bosch BME690空气质量传感器

2009大赛B题MMC-1模块介绍

视频 2011-06-14
更多 培训课堂
更多 焦点
更多 视频

技术专区