原创 一线研发之声:嵌入式C编程经验 之 请写可移植性高的模块

2012-1-17 01:19 5280 23 44 分类: 消费电子

/********************************************************************

* Filename:一线研发之声:嵌入式C编程经验 之 请写可移植性高的模块

* Author:SedateFire E-mail:SedateFire@126.com

* Version:1.000 Time: 2012-01-05

* key: 嵌入式  可移植性  模块化  依赖

********************************************************************/

 

       我想你或许有这样的经验,你要实现的一个模块同事已经实现了。老板发话说:你复用他的代码啊,半天给我搞定。于是你拷过来编译一下,几乎是必然的,会有error有warning,一看,哇,原来依赖了这么多外部的东东。于是你开始着手修改它,如果模块小,自然三两下搞定。如果是个大的模块要复用,一下弹出几百个编译错误报警,我想你边修改心里也边骂娘。

 

我靠,这个蜂鸣器控制函数为何要去判断当前在作什么应用?!

 

我靠,这么多缺失的include文件,没有拷过来吗?

 

我靠,这个函数是什么东东,注释明显对不上,还判断赋值了一堆全局变量。

 

我靠,这个if处理了,那else呢,哪里去了?这是什么跟什么啊。

 

我靠,通通删掉干掉,自己加班偷偷重写好了。

 

什么!老板在催了,我靠靠靠啊…

 

想必你有共鸣了......

 

        那么如何实现可移植性高的代码呢,我就先写几点吧,有些晚了,准备睡觉了

 

1.擅用define。请把“裸露”的常量,用短小又信息准确的宏定义起来,务必全大写。常量的宏定义要大写,我会在后期关于代码规范的主题文章分析。请把设备驱动的io,用define定义分离出来。当然,还有许多妙用,宏定义简直是移植旅行必备佳品。待我后期再整理下思路吧。

 

2.抽像出平台依赖严重的代码。比如访问一个特定mcu寄存器,开关中断,清狗指令,中断写法等等。

 

3.如果可以,我希望你的.c档中包含的.h档尽可能的少。这样在移植的时候,你只要看包含了那些.h档,你就知道该模块大概依赖了其他哪些模块。我知道,大多数的程序员都喜欢在.c档的文件头仅有一个

#include "includes.h"

而在includes.h 中包罗万象,这是原罪!当然,要一个萝卜一个坑地梳理清楚.c与.h档的关系,需要长期的工作经验,尤其在编译条件错综复杂时,操作起来的确痛苦且容易出错,但其实这已经预示了你系统架构的某种不合理。

 

如果没有足够的经验,那么我建议你,先在设备层的.c档尽量包含尽可能少的.h档。然后把设备层的.h档放在includes.h中,给应用层使用。

 

3. 打造自定义库,这个准备设专题讲解。

 

4. 通信数据统一是大端的,内部应用代码统一用数值说话,和大小端无关,不要乱糟糟的一片胡写蛮缠。少用union,发送数据时统一用单字节移位发出去,接收时用移位收进来。牺牲了效率,但提高了可移植性。在51中也许不大现实,但在未来M3的大趋势下,效率是可以牺牲的。

 

5.欲知后事如何,请听下回分解....

 

文章评论21条评论)

登录后参与讨论

用户1652412 2012-5-12 09:59

感谢博主分享

用户1612414 2012-4-29 21:59

学习了。谢谢楼主

gflin_846028555 2012-4-6 09:52

多谢分享

用户1190942 2012-4-2 21:15

hao

用户1549494 2012-4-2 13:44

学习中

用户1404309 2012-4-2 09:19

看看先

用户1595216 2012-4-2 08:44

多谢LZ分享

用户1602177 2012-3-31 16:15

多谢博主分享~~

用户1421223 2012-1-29 15:59

话说我也一直用include.h,以前从没意识到有什么不对。受教了。代码的可移植性确实是个大问题。

用户1569686 2012-1-16 09:10

精辟,深入,易懂。。。。。期待后续。。。。。
相关推荐阅读
用户1639872 2014-03-16 12:07
营销自己,实名还是“艺名”好?
积累了一些技术心得,想在网上发点文章博点人气,本着先有名后有利的想法。多数人都是用个“艺名”,用马甲在混。问题在于:马甲这个东西,优点就是好记,而且有一种神秘感,也许自己就是个屌丝,但文章过硬,也...
用户1639872 2014-03-11 23:55
当心中有了牵挂
       上个周末,回老家看2周多的女儿。离别的时候,我不敢扭头就上了车,眼泪就不可遏地直流下来...         以前看宝宝时,离开时只要说句bye,她就呵呵地和你bye,甚至头也不...
用户1639872 2014-01-19 01:29
不知幸亦或不幸,路在何方?
晚上公司尾牙,鉴于往年素餐尾牙吃不饱的经验。部门内部几天前就发起了一场尾牙结束后的k歌聚会。当时没有报名,感觉k歌确实没什么吸引我的。尾牙结束回家的路上,搭乘同事的车,耐不住满车同事的煽动,想想还...
用户1639872 2013-12-25 00:27
一线研发之声 之 完美主义者的程序员特征 <二>
3.空格、换行、常量替换、{}保护、还有效率。 if((long_state_var==1)||(long_state_var==2)||((ch>0x2F)&...
用户1639872 2013-12-24 10:46
一线研发之声 之 完美主义者的程序员特征 <一>
    观文识人,代码无疑是了解一个程序员的最佳途径。     且不论算法思路,单就代码的界面风格,便可知一二。     1. 追求精美的对齐。 尽可能精确到每一个"断点",是他的...
用户1639872 2013-12-23 16:23
一线研发之声 之 C代码注释引发的“血案” (二)
上接:一线研发之声 之 C代码注释引发的“血案 (一)       我开始思考,还有什么强劲有力的理由,来支持我恪守的真理:c语言代码注释必须使用/**/. 有的!      倘若...
我要评论
21
23
关闭 站长推荐上一条 /2 下一条