查看: 3233|回复: 9

【高效c语言】(五)--高效可移植程序的一些习惯

  [复制链接]
  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2012-11-5 00:07:58 | 显示全部楼层 |阅读模式
    分享到:
    对于一些状态的集合,尽可能使用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、串口等。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-14 03:09
  • 签到天数: 28 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2012-11-23 22:12:43 | 显示全部楼层
    谢谢分享!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2012-11-29 12:00:23 | 显示全部楼层
    kuzni 发表于 2012-11-29 10:59
    楼主是哪的人?

    福建的,现在在武汉读书
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2013-1-2 00:30
  • 签到天数: 24 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2012-12-4 21:48:16 | 显示全部楼层
    好好学习!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-2-22 15:40
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-2-22 17:08:43 | 显示全部楼层
    没有学过的知识,有用!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2014-5-12 15:17
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2013-3-9 16:35:23 | 显示全部楼层
    这些技巧真的很有用,以前都不知道。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-7-20 11:45
  • 签到天数: 1650 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2014-2-10 16:34:18 | 显示全部楼层
    很有用,谢谢分享!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-27 11:54
  • 签到天数: 309 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2014-2-10 20:09:27 | 显示全部楼层
    多谢分享,楼主好人啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-11-30 10:07
  • 签到天数: 170 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-5-23 18:46:52 | 显示全部楼层
    ming1006 发表于 2012-11-29 12:00
    福建的,现在在武汉读书

    老乡了,现在在哈尔滨念书。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-11-30 10:07
  • 签到天数: 170 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-5-23 18:51:50 | 显示全部楼层
    可以上网找一些可移植的函数库,阅读下源码,可以学到很多技巧
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 20:52 , Processed in 0.193743 second(s), 32 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.