面向硬件对象底层驱动设计_第1页
面向硬件对象底层驱动设计_第2页
面向硬件对象底层驱动设计_第3页
面向硬件对象底层驱动设计_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 面向硬件对象底层驱动程序设计要求1. 硬件对象独立编程的实体就是硬件对象,硬件对象分为内部对象和外部对象,内部对象比如系统初始化、定时器、Flash、串口等,外部对象比如LED、开关、按钮、电机等。每个对象有独立模块。2.程序设计基本原则2.1 对每个硬件对象编写独立的驱动程序每个对象对应一个头文件和源文件,如果对象是外部对象,则要在头文件用宏定义对象接在哪个脚上,头文件只声明供外部调用的功能函数,也就是说,其他人只要看头文件函数声明就知道如何使用此对象而无需去看源文件去阅读代码。一般函数的命名规则是:对象_功能,比如初始化LED,函数名可以为LED_Ini t。如果一个函数只供对象功能函数

2、内部调用,则此函数在源文件里面声明和实现,不出现在头文件里,并声明为static 函数,因为声明为static的函数只能供定义此函数的源文件使用,其他源文件看不到此函数。如果一个全局变量只供某模块使用,则可以把此全局变量定义为static,这样此变量只能在定义它的源文件中使用,其他源文件看不到此变量,所以不会产生命名冲突。2.2封装要完整、封装之间不能交叉模块函数就实现此模块要实现的功能,模块内部之间不能相互调用,如果要调用则交给高端来处理,比如在Flash子程序里面不能调用串口,当然测试Flash子程序的时候例外,当测试完毕时,必须把调用串口子程序代码删除,此时Flash子程序可以通过返回值

3、告诉高端,让高端根据返回值来决定是否调用串口子程序。2.3 返回值问题如果只返回一个基本类型的返回值,则用返回值返回此值也可,如果返回一个复杂类型的返回值,比如一个struct结构体,则用返回值返回的话要进行复制,开销很大,此时用传址方式返回,如果返回的值很多,可以把这些值定义在一个struct里面,通过指针形式返回。2.4 函数编写函数第一要命名合理,一看函数名就知道此函数的功能、操作的对象。函数的层次最好不要多于5级,一个是效率降低,再一个阅读性也变差,对每个函数注释清楚,所有的函数代码编写方式有一个统一的风格,注意对齐。函数中的堆栈变量使用前一定要负初值,在一个嵌入式的RAM一般比较少,

4、注意不要堆栈溢出。尽量用效率高的方式编码,比如乘除可以用移位来实现。如果编写的程序在16位控制器上运行,函数整型参数和局部整型变量要用16位,因为如果用8位的整型变量,系统要做多余的工作来防止8位溢出之类的事情,不仅不节省空间,还会降低效率,通过反汇编对比可以看出此现象。3. 测试测试是当模块编写完成后对其功能性的测试,先进行白盒测试,然后进行黑盒测试,测试要测试模块所有可能的输入,对非法的输入进行检测,一定测试全面。4. 调用驱动程序一般会在两个地方调用驱动程序,一个是main函数,一个是中断处理函数,可能有多个源文件包含相同的头文件。设计头文件的时候要避免重复定义问题,方法是:以定义LED

5、模块为例,头文件如下编写:#ifndef _LED_H#define _LED_H/*函数声明*/#endif5. 变量变量分为全局变量、堆栈变量、函数内静态变量、文件内静态变量、寄存器变量。寄存器变量是当某个变量频繁使用很多次的时候为了避免每次从内存中读它,而把它放在寄存器中来改变性能。如果一个变量只在函数中使用,并且要一直存在,则命名为函数内静态变量,如果一个函数只在某个源文件中使用,此源文件各个函数通过此变量来通信,则此变量命名为文件内静态变量。所有的变量要有一定的命名规范,全局变量前面加前缀g_,静态变量前面加前缀s_,寄存器变量前面加前缀r_,如果一个变量名由多个单词组成,单词之间可以用下划线分开,也可以是第一个单词字母大写,不管使用何种命名写法,全局要统一一致,不能两种混合使用。6. 总体设计每个系统编码之前一定要先设计,思路要弄清晰,之后才编码。大任务调用小任务,小任务如果全部正确,则大任务一定正确,知道某个小任务一定正确,但是大任务不正确,调试的时候就可以把此小任务

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论