登陆
|
注册
|
搜索
|
最近新帖
发帖子
|
共享我的资料
|
精华帖子
|
热门话题
导航:
老古网
→
老古论坛
→
XMOS公共讨论区
→
XMOS开源项目区
→
单片机程序设计
→
嵌入式系统
→
广告区域
→
→发表看法:[fengjian99][推荐]面向硬件构件底层驱动程序设计要求
No.77181
作者:fengjian99
邮件:gj_92839@163.com
ID:109039
登陆:21次
文章数:33篇
最后登陆IP:113.97.226.101
最后登陆:2010/10/26 15:08:32
注册:2008/4/24 14:26:22
财富:296
发帖时间:2009/10/30 17:11:38
发贴者IP:116.24.56.55
标题:fengjian99:
[推荐]面向硬件构件底层驱动程序设计要求
摘要:No.77181[推荐]面向硬件构件底层驱动程序设计要求 1. 硬件构件 独立编程的实体就是硬件构件,硬件构件分为内部构件和外部构件,内部构件比如系统初始化、定时器、Flash、串口等,外部构件比如LED、开关、按钮、电机等。每个构件有独立模块。2.程序设计基本原则2.1 对每个硬件构件编写独立的驱动程序 每个构件对应一个头文件和源文件,如果构件是外部构件,则要在头文件用宏定义构件接在哪个脚上,头文件只声明供外部调用的功能函数,也就是说,其他人只要看头文件函数声明就知道如何使用此构件而无需去看源文件去阅读代码。一般函数的命名规则是:构件_功能,比如初始化LED,函数名可以为LED_Init。如果一个函数只供构件功能函数内部调用,则此函数在源文件里面声明和实现,不出现在头文件里,并声明为static 函数,因为声明为static的函数只能供定义此函数的源文件使用,其他源文件看不到此函数。如果一个全局变量只供某模块使用,则可以把此全局变量定义为static,这样此变量只能在定义它的源文件中使用,其他源文件看不到此变量,所以不会产生命名冲突。 2.2封装要完整、封装之间不能交叉 模块函数就实现此模块要实现的功能,模块内部之间不能相互调用,如果要调用则交给高端来处理,比如在Flash子程序里面不能调用串口,当然测试Flash子程序的时候例外,当测试完毕时,必须把调用串口子程序代码删除,此时Flash子程序可以通过返回值告诉高端,让高端根据返回值来决定是否调用串口子程序。2.3 返回值问题 如果只返回一个基本类型的返回值,则用返回值返回此值也可,如果返回一个复杂类型的返回值,比如一个struct结构体,则用返回值返回的话要进行复制,开销很大,此时用传址方式返回,如果返回的值很多,可以把这些值定义在一个struct里面,通过指针形式返回。2.4 函数编写 函数第一要命名合理,一看函数名就知道此函数的功能、操作的构件。函数的层次最好不要多于5级,一个是效率降低,再一个阅读性也变差,对每个函数注释清楚,所有的函数代码编写方式有一个统一的风格,注意对齐。函数中的堆栈变量使用前一定要负初值,在一个嵌入式的RAM一般比较少,注意不要堆栈溢出。尽量用效率高的方式编码,比如乘除可以用移位来实现。如果编写的程序在16位控制器上运行,函数整型参数和局部整型变量要用16位,因为如果用8位的整型变量,系统要做多余的工作来防止8位溢出之类的事情,不仅不节省空间,还会降低效率,通过反汇编对比可以看出此现象。3. 测试 测试是当模块编写完成后对其功能性的测试,先进行白盒测试,然后进行黑盒测试,测试要测试模块所有可能的输入,对非法的输入进行检测,一定测试全面。4. 调用驱动程序 一般会在两个地 ......
>>返回讨论的主题
发表回复
用户名
*
您没有注册?
密码
*
验证码
*
.
标题
选择话题
[原创]
[转帖]
[灌水]
[讨论]
[求助]
[推荐]
[公告]
[注意]
[贴图]
[建议]
[下载]
[分享]
*
心情
随便说说
我回答你
最新发现
得意的笑
气死我了
真是没劲
坚决同意
表示反对
大家过来
好奇怪哟
懒得理它
大家小心
文件上传
允许类型
gif
jpg
jpeg
bmp
png
rar
txt
zip
mid
sch
pcb
ddb
iso
rtf
pdf
doc
ini
swf
内容
字体:
宋体
楷体
新宋体
黑体
隶书
Andale Mono
Arial
Arial Black
Book Antiqua
Century Gothic
Comic Sans MS
Courier New
Georgia
Impact
Tahoma
Times New Roman
Trebuchet MS
Script MT Bold
Stencil
Verdana
Lucida Console
字体大小:
1
2
3
4
颜色:
#F0F8FF
#FAEBD7
#00FFFF
#7FFFD4
#F0FFFF
#F5F5DC
#FFE4C4
#000000
#FFEBCD
#0000FF
#8A2BE2
#A52A2A
#DEB887
#5F9EA0
#7FFF00
#D2691E
#FF7F50
#6495ED
#FFF8DC
#DC143C
#00FFFF
#00008B
#008B8B
#B8860B
#A9A9A9
#006400
#BDB76B
#8B008B
#556B2F
#FF8C00
#9932CC
#8B0000
#E9967A
#8FBC8F
#483D8B
#2F4F4F
#00CED1
#9400D3
#FF1493
#00BFFF
#696969
#1E90FF
#B22222
#FFFAF0
#228B22
#FF00FF
#DCDCDC
#F8F8FF
#FFD700
#DAA520
#808080
#008000
#ADFF2F
#F0FFF0
#FF69B4
#CD5C5C
#4B0082
#FFFFF0
#F0E68C
#E6E6FA
#FFF0F5
#7CFC00
#FFFACD
#ADD8E6
#F08080
#E0FFFF
#FAFAD2
#90EE90
#D3D3D3
#FFB6C1
#FFA07A
#20B2AA
#87CEFA
#778899
#B0C4DE
#FFFFE0
#00FF00
#32CD32
#FAF0E6
#FF00FF
#800000
#66CDAA
#0000CD
#BA55D3
#9370DB
#3CB371
#7B68EE
#00FA9A
#48D1CC
#C71585
#191970
#F5FFFA
#FFE4E1
#FFE4B5
#FFDEAD
#000080
#FDF5E6
#808000
#6B8E23
#FFA500
#FF4500
#DA70D6
#EEE8AA
#98FB98
#AFEEEE
#DB7093
#FFEFD5
#FFDAB9
#CD853F
#FFC0CB
#DDA0DD
#B0E0E6
#800080
#FF0000
#BC8F8F
#4169E1
#8B4513
#FA8072
#F4A460
#2E8B57
#FFF5EE
#A0522D
#C0C0C0
#87CEEB
#6A5ACD
#708090
#FFFAFA
#00FF7F
#4682B4
#D2B48C
#008080
#D8BFD8
#FF6347
#40E0D0
#EE82EE
#F5DEB3
#FFFFFF
#F5F5F5
#FFFF00
#9ACD32
点击加入表情
选项
有回复时用短消息通知您?
老古网
执行:16毫秒 最大:7276毫秒 查询6次