简述嵌入式软件可移植性设计技术

(整期优先)网络出版时间:2018-08-18
/ 2

简述嵌入式软件可移植性设计技术

李丽平

佛山市顺德区美的洗涤电器制造有限公司528311

摘要:嵌入式系统是建立在一个特定的硬件及软件平台上,为特定功能需求而开发的专用、高效的系统,因此嵌入式软件通常与硬件及系统软件平台密切关联,耦合度大。随着嵌入式系统的发展,以嵌入式操作系统及CPU为主要技术指标的嵌入式技术向着多元化方向发展,升级换代速度加快。嵌入式系统的平台变更可能性增大、频率加快。为适应这种变化,嵌入式应用软件应具备较强的可移植性。

关键词:嵌入式;软件设计;可移植

1.嵌入式软件中可移植的实现

1.1引入虚拟设备的概念

虚拟设备时操作系统和驱动程序的中间层,其存在使驱动程序避免了和操作系统的直接连接。虚拟设备的概念使驱动程序和操作系统之间的耦合松开,使操作系统的驱动程序接口的问题集中在操作系统和虚拟设备层之间,在软件移植时,只需要将操作系统和虚拟设备层之间的代码修改即可。虚拟设备层的引入以设计时代码的增加,实现驱动程度的移植。

1.2嵌入式软件的模块化

嵌入式软件的严格分层,模块封装,就是将嵌入式软件根据功能和可移植性的特点,封装在各个相对独立的模块之内,在移植时,可以根据嵌入式操作系统的特点,将各模块置于操作系统响应的空间之内。嵌入式软件的严格分层和模块封装使嵌入式软件针对拥有不同程序空间的操作系统的移植成为可能。

2.嵌入式软件可移植性的必要性

2.1适应系统平台的变化

嵌入式软件系统平台,包括CPU、硬件接口、操作系统、图形库等,随着系统平台的软硬件升级换代以及嵌入式系统功能需求的变化都可能发生变化。系统平台的变化,促使嵌入式软件能适应平台的变化,这就需要软件有良好的可移植性。

2.2增强软件可维护性

软件维护主要工作就是增加或修改软件功能,软件平台化能复用大量已有的功能逻辑代码,针对不同平台维护同一份软件代码,减少软件代码的编写及测试时间。

2.3通过移植到PC上以增强调试手段

通常嵌入式软件调试比较困难,对硬件依赖比较大,通过移植嵌入式软件到PC平台,能方便地对软件进行测试及系统仿真,这对大型嵌入式软件很有意义。在软件平台化设计后,可移植性大大提高,只需编写底层模拟接口,就能很方便地移植到Windows平台,用VC6.0进行编写、开发、测试嵌入式软件,大大提高软件开发效率以及调试手段。

3.提高嵌入式软件可移植性的方法

在移植DOS/X86平台的GUI软件时发现:DOS与LINUX系统差别比较大、图形库不具备移植性、软件结构复杂,这给软件移植带来了很多的困难。因此,在软件设计、开发阶段就需要考虑减少软件与系统平台耦合,为保证以后软件的可移植性提供方便。

3.1技术选择考虑

3.1.1编程语言

编程语言包括语言规则以及标准库函数,软件的可移植性,最重要的就是编程语言的可移植性。计算机编程语言有几十种,嵌入式系统一般采用汇编、C、C++、Ada等,汇编语言移植性最差,不同的CPU指令集不同;C语言移植性最强,不同平台上都有支持ISO/IEC9899-1:1994标准(一般简称C89)的各种编译器;C++移植性也比较好,但由于C++语言比较复杂,目前各编译器并不能完全支持C++99-ISO标准;Ada一般用于防务及航空领域,应用范围小。

3.1.2操作系统

在嵌入式系统中采用操作系统时,需要考虑操作系统的移植性以及系统中各硬件支持能力,操作系统能否移植到各种类型的CPU,是否有各种硬件的驱动程序。根据系统的复杂性选择合适的操作系统,比如,要求支持文件系统、图形系统以及各种硬件的,可以选择LINUX、WindowCE,实时调度可以考虑VxWorks,小型嵌入式系统可选择uC/OS等。

3.1.3图形库

图形库对于GUI软件比较重要,直接关系到嵌入式软件的可移植性。选择一种图形库时,除了了解功能外,还需了解它的可移植性以及是否开源等。在同等的情况下,优先采用可移植性好的、开源的图形库。对于大型及长期需要维护的软件,技术可行情况下,可以考虑自己开发图形库接口。

3.2软件设计考虑

软件需分离与系统平台相关的代码,通过简洁的接口与平台交互,减少与系统平台的耦合度,理想情况下,当移植到新的平台时,只需修改与平台相关代码。隔离平台相关的代码,最常用的方法是采用分层的软件设计技术,最典型的例子有TCP/IP协议族的实现及LINUX内核。

3.2.1软件的分层结构模型

通过分析TCP/IP协议族及LINUX内核的实现,不难发现,它们都是通过层层封装细节,层与层之间通过简单的函数接口进行调用,各层采用模块化编写。良好的设计使TCP/IP协议族能方便移植到各种CPU,适应各种通信介质。LINUX内核是支持最多CPU种类的操作系统。移植基于DOS/X86系统的嵌入式GUI软件到基于Linux/ARM平台上的过程中,将软件分为3层:显示层、逻辑层、平台接口层,同时增加薄胶合逻辑层用来匹配逻辑层与各种平台接口层。分层软件结构图如图1所示。

图1分层的软件结构图

3.2.2模块划分原则选择了分层结构模型后,还需要进行模块划分,模块划分需遵循2个原则。

①分离原则

划分平台接口层与逻辑层时,采取“策略同机制分离”的原则。平台接口层只提供机制,由逻辑层通过简单的接口访问平台,具体的处理逻辑交由上层。例如,处理CAN接口数据时,CAN接口只提供初始化、发送帧数据、接收中断触发回调函数指针,至于如何处理接收到的数据或发送什么格式的数据则交由逻辑层处理。尽可能地让平台层简单,是软件可移植性的关键。

在划分逻辑层与显示层或其他上层时,考虑代码的可移植性与复用性,分离移植性差与复用性低的代码。

②紧凑性与正交性

紧凑性:表示模块是个单一完整的功能代码。

正交性:表示此模块是无副作用的;一个模块就只改变一件事,不会影响其他模块;改变一件事的方法有且只有一个。

结束语:本文从嵌入式软件可移植性的必要性以及如何提高软件可移植性对软件的可移植性设计进行进行了详细的分析和探讨。文中分析的提高软件的可移植性设计节省了软件开发时间,降低了软件开发、维护的工作量,同时对于提高嵌入式软件的可移植设计和重用性,都有参考和借鉴意义。

参考文献

[1]李忠民,刘振兴.可移植的嵌入式WEB服务器软件设计[J].微计算机信息.2007.

[2]周媛.嵌入式软件设计方法探析[J].网友世界·云教育.2014.

[3]张喜俊.嵌入式软件设计中编写可移植的C代码[J].单片机与嵌入式系统应用.2010.