基于嵌入式硬件构件模型的底层软件开发方法的研究.pdf
《基于嵌入式硬件构件模型的底层软件开发方法的研究.pdf》由会员分享,可在线阅读,更多相关《基于嵌入式硬件构件模型的底层软件开发方法的研究.pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、国家自然科学基金(60871086)资助 Supported by National Natural Science Foundation of China(60871086)1.苏州大学计算机科学与技术学院,苏州 215006 2.苏州大学电子信息学院,苏州 215021 1.Computer Science and Technology School of Soochow University,Suzhou 215006 2.Electronics and Information School of Soochow University,Suzhou 215021 基于嵌入式硬件构件模型的
2、底层软件构件开发方法研究 基于嵌入式硬件构件模型的底层软件构件开发方法研究 蒋银珍1 王宜怀1 王加俊2 摘 要 摘 要 为了提高嵌入式系统的硬件和底层软件的可移植性,本文对基于嵌入式硬件构件模型的底层硬件驱动程序(即底层构件)的开发方法进行了研究,给出了硬件构件与软件构件的层次关系图以及底层构件的封装原则,通过实例分别阐述了 GPIO 构件、功能构件和外设构件的程序编制方法以及移植性问题.关键字 关键字 构件,驱动程序,软件构件,底层构件,移植性 图分类号图分类号 TP311,18 Development Method Research for Bottom Driver Based on
3、EHC JIANG Yin-Zhen1 WANG Yi-Huai1 WANG Jia-Jun2 Abstract In order to increase the transplantable ability of the hardware and bottom software,this paper studies the development method of the driver(bottom component)based on hardware component,presents the hierarchy between hardware component and soft
4、ware component.The thesis also introduces the package rule for bottom component,expatiates on how to program and transplant GPIO component、inner-function component and outer-function component via example.Key words Component,Driver,Software component,Bottom component,Transplantable ability 1 前言前言 嵌入
5、式软件复杂度的增长对嵌入式软件开发技术的提高提出了迫切的要求。虽然软件工程在嵌入式领域的发展远远落后于其他领域,但近几年不少学者试图将软件工程中的基于构件的开发思想引入到嵌入式领域,为嵌入式软件开发提供理论支撑。但是,这方面的研究还刚刚起步,有关嵌入式软件设计建模及规范的理论与应用研究将成为嵌入式软件工程的研究热点。嵌入式软件工程的研究目标是建立起一套规则,规范程序的编写,减少工作的重复,提高软件的可移植性和可维护性,减少系统开发时间。目前,人们研究的嵌入式软件开发方法大多建立在嵌入式操作系统基础上,而对于很多专用领域的嵌入式系统而言,由于 Flash 容量较小,结构和功能相对比较单一,无需操
6、作系统的支持,因此与硬件打交道的底层驱动程序往往需要设计人员自己编写。目前有关底层驱动程序编写规范的研究很少。对于嵌入式系统工程师而言,开发出稳定、完备的驱动程序不仅需要有丰富的开发经验和熟练的开发技能,更需要一个具有指导作用的驱动程序开发模型。为了解决这个问题,本文在基于嵌入式硬件和软件协同设计思想的基础上,将与硬件密切相关的底层驱动程序抽象并封装起来,定义为底层构件,努力做到:对于以单 MCU 为核心的嵌入式系统而言,当 MCU 的型号发生改变或系统外围设备(如键盘、LCD 等)接口发生改变时,相应的驱动程序要改动很小甚至无需修改,而上层调用程序不必作任何改动,从而提高了系统软件的可重用性
7、和可移植性。2 嵌入式系统硬件设备驱动程序的特点和要求嵌入式系统硬件设备驱动程序的特点和要求 众所周知,嵌入式系统是软件和硬件的综合体,是以应用为中心,以计算机技术为基础,软件、硬件可裁剪,并能适应应用系统对功能、可靠性、成本、体积和功耗等方面的严格要求的专用计算机系统。嵌入式系统与硬件紧密相关,是软件与硬件的综合体,硬件设计和软件设计相辅相成。嵌入式系统中的驱动程序是直接工作在各种硬件设备上的软件,是硬件和高层软件之间的桥梁。正是通过驱动程序,各种硬件设备才能正常运行,达到既定的工作效果。驱动程序的开发在嵌入式系统的开发中具有举足轻重的地位。驱动程序的好坏直接关系着整个嵌入式系统的稳定性和可
8、靠性。然而,开发出完备、稳定的驱动程序并非易事。长期以来,开发人员在编写驱动程序时缺少软件工程思想的支撑,软、硬件设计过程孤立,造成与硬件密切相关的底层软件缺乏通用性,导致可移植性和可复用性较差,开发过程中缺少标准化、文档化的管理,给开发人员之间的交流以及日后系统的维护带来很大的困难。下文提出的基于嵌入式硬件构件模型的底层驱动软件开发方法将硬件设计和底层软件设计这两个过程有机地联系起来,可以在一定程度上解决上述问题。3 嵌入式硬件构件和软件构件的层次模型嵌入式硬件构件和软件构件的层次模型 嵌入式硬件构件是将一个或多个硬件功能模块、支撑电路及其功能描述封装成一个可重用的硬件实体,并提供一系列规范
9、的输入/输出接口。按地位来分,硬件构件可分为核心构件、中间构件和终端构件。核心构件为MCU的最小系统,中间构件是核心构件与终端构件进行连接的桥梁。该文中提出的面向硬件构件的原理图绘制规则的应用不仅增强了硬件的可移植性,同时它也为编写底层驱动程序作好了充分的准备。嵌入式系统是硬件和软件的综合体。硬件系统可看作是由若干个硬件构件“组装”而成,同样,软件系统也可看作是由若干个软件构件“组装”而成。嵌入式软件构件(Embedded Software Component,ESC)是实现一定嵌入式系统功能的一组封装的、规范的、可重用的、具有嵌入特性的软件单元,是组织嵌入式系统的功能单位。嵌入式硬件构件与软
10、件构件的层次模型如图1所示。图1 嵌入式硬件构件与软件构件的层次模型 根据和硬件相关与否,嵌入式软件构件分为高层构件和底层构件。高层构件与硬件无关。而底层构件与硬件密不可分,是硬件的驱动程序。如何合理封装底层构件是本文研究的重点。上文提到,核心构件为MCU的最小系统。通常,MCU内部包含有通用IO口和一些内置底层内部构件 核心 构件硬件构件层 底层构件层 功能构件底层外设构件 中间构件 终端构件 高层构件 高层构件层 GPIO 构件MCU 头文件 功能模块,不同型号MCU可能存在名称相同或功能相似的内置模块,例如Freescale HC08系列芯片MC68HC908GP32(以下简称GP32)
11、、MC68HC908GZ60(以下简称GZ60)、HCS12系列芯片MC9S12DG128(以下简称DG128)内的串行通信模块称为SCI模块,而ColdFire系列芯片MCF52233芯片内的串行通信模块称为UART模块。通过对不同MCU的相同或相似的内置模块的共性和个性分析,抽取出属性和操作并封装成软件构件,本文将这种软件构件称为底层内部构件。其中,通用IO口封装成GPIO构件,其它内置模块封装成功能构件。相对于核心构件而言,中间构件和终端构件是核心构件的“外设”。由这些“外设”的驱动程序封装而成的软件构件称为底层外设构件。注意,并不是所有的中间构件和终端构件都可以作为编程对象。例如:键盘
12、、LED、LCD等硬件构件与编程有关,而电平转换硬件构件就与编程无关,因而不存在相应的底层驱动程序,当然也就没有相应的软件构件。由图1可看出,底层外设构件可以调用底层内部构件,如LCD构件可以调用GPIO构件、PCF8563构件(时钟构件)可以调用IIC构件等。而高层构件可以调用底层外设构件和底层内部构件中的功能构件,而不能直接调用GPIO构件。4 底层构件底层构件 4.1 底层构件封装的通用原则底层构件封装的通用原则 与高层构件一样,底层构件也有两个基本元素:描述和实体.其中,描述可看作是底层构件的使用说明,详细介绍构件的功能、移植时需修改的关键参数以及注意事项等。底层构件的实体可看作是属性
13、和操作的集合。属性用来描述底层构件的特性,如端口属性、硬件接口属性等。操作是构件可以执行的动作,如硬件的初始化、发送数据、接收数据等。对底层构件封装时需遵循下列通用原则:(1)属性和操作的命名统一以构件名开头。这样做的好处是:当使用底层构件组装软件系统时,避免构件之间出现同名现象。同时,名称要使人有“顾名思义”的效果。(2)对 MCU 内的模块寄存器名和端口名进行重定义,在其它的代码里面都将使用宏名对模块寄存器和端口进行操作。这样,当底层驱动程序移植到其它 MCU 时,只要修改重定义语句就可以了。(3)内部函数与外部函数要设计合理,函数参数个数及类型要考虑全面。内部函数仅提供给同一构件中的其它
14、内部函数或外部函数调用,作用域仅限于定义该函数的文件。外部函数是对外接口函数,供上层应用程序调用。在定义外部函数时,应该对函数名、函数功能、入口参数、函数返回值、使用说明、函数适用范围等进行详细描述,以增强程序的可读性。上层应用程序不能直接对构件的属性进行读取或设置,必须借助于该构件提供的接口操作函数来实现。(4)禁止通过全局变量来传递参数.应用程序在使用底层构件时,严格禁止通过全局变量来传递参数,所有的数据传递都要通过函数的形式参数来接收。这样做不但使得接口简洁,更加避免了全局变量可能引发的安全隐患。(5)头文件和程序文件的主文件名一致,且为构件名。头文件保存构件的属性定义和对外接口函数原型
15、说明;程序文件存放内部函数和外部函数的实现过程.C 语言具有较好的可移植性。由于不同系列 MCU 的 C 语言略有差异,为了达到通用的目的,本文采用标准 C语言进行设计。头文件为.h 文件,程序文件为.c 文件。4.2 MCU 头文件头文件 严格来讲,图 1 中的“MCU 头文件”不属于一个完整的构件。但考虑到几乎所有的底层内部构件都涉及到 MCU 各种寄存器的使用,因此将 MCU 的所有寄存器定义组织在一起,形成 MCU 头文件,以便其它构件头文件中包含 MCU 头文件。MCU 头文件的主文件名一般为 MCU 的名称,如 GP32.h、MCF52233.h 等。定义寄存器的语句形式为:#de
16、fine 寄存器名称 映像地址,例如 GP32.h 的文件内容为:#define SCC1 *(volatile unsigned char*)0 x13 /SCI 控制寄存器 1#define SCC2 *(volatile unsigned char*)0 x14 /SCI 控制寄存器 2#define SCC3 *(volatile unsigned char*)0 x15 /SCI 控制寄存器 3#define SCDR *(volatile unsigned char*)0 x18 /SCI 数据寄存器#define SCBR *(volatile unsigned char*)0
17、x19 /SCI 波特率寄存器 4.3 底层内部构件底层内部构件 4.3.1 GPIO 构件构件 所谓 GPIO,是指基本的输入/输出接口,是 MCU 与外界进行交互的重要通道。不同MCU 具有的 GPIO 口数目不同、名称不同、端口地址也不同.例如 GP32 具有 5 个 GPIO 口,分别为 A 口、B 口、C 口、D 口、E 口。DG128 具有 10 个 GPIO 口,分别为 A 口、B 口、E 口、H 口、J 口、K 口、M 口、P 口、S 口、T 口。而 MCF52233 具有 13 个 GPIO 口,分别为 AN 口、DD 口、GP 口、AS 口、TA 口、TC 口、TD 口、U
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 嵌入式 硬件 构件 模型 底层 软件 开发 方法 研究
限制150内