嵌入式系统关键技术分析与开发应
作者:夏伟伟东南大学沈连峰南京东大移动互联网技术有限公司肖毛杰于斌
基于嵌入式系统的概念,阐述了嵌入式系统的关键技术、嵌入式开发和广泛应用。首先,分析了嵌入式系统的技术特点,分别从嵌入式处理器和嵌入式操作系统两个方面进行了介绍,并着重介绍了一些不同于其他操作系统的处理方法和流程。在此基础上,阐述了嵌入式软件的开发过程,并结合作者的嵌入式软件开发实践,强调了嵌入式软件的一些开发技巧。然后,介绍了南京东大移动互联网技术有限公司开发的基于蓝牙技术的嵌入式系统和嵌入式产品的一些流行应用..最后,给出了作者的体会,并对嵌入式系统的前景进行了展望。

介绍
在后个人电脑时代,随着数字信息技术和网络技术的飞速发展,嵌入式系统已经广泛渗透到科学研究、工程设计、军事技术、各行各业、商业文化艺术和人们的日常生活中。随着国内外各种嵌入式产品的进一步发展和普及,嵌入式技术越来越紧密地融入到人们的生活中。

嵌入式系统的概念出现在1970年左右。此时,许多嵌入式系统没有使用操作系统,而只是使用简单的循环控制来处理外部控制请求,以实现一定的控制功能。当应用系统变得越来越复杂和广泛使用时,每一个新增加的功能都需要从头设计。没有操作系统已经成为最大的缺点之一。

C语言的出现使得操作系统的开发变得简单。自20世纪80年代以来,各种商业嵌入式操作系统一直在相互竞争,其中最著名的是vxworks、psos和windowsce。这些操作系统大多是为专有系统开发的。另外,开源嵌入式linux由于其强大的网络功能和低廉的成本,近年来得到了越来越多的应用。

1嵌入式系统的技术特点
嵌入式系统通常包括构成软件基本运行环境的硬件和操作系统。嵌入式系统的运行环境和应用情况决定了嵌入式系统具有不同于其他操作系统的一些特点。
(1)嵌入式处理器
嵌入式处理器可分为三类:嵌入式微处理器、嵌入式微控制器和嵌入式dsp(digitalsignalprocessor)。嵌入式微处理器是与通用计算机的微处理器相对应的中央处理器。在应用中,微处理器通常装配在专门设计的电路板上,只有嵌入式相关功能保留在主板上,可以满足嵌入式系统小尺寸、低功耗的要求。目前,嵌入式处理器主要包括powerpc、motorola68000、arm系列等。

嵌入式微控制器,也称为单片机,将cpu、内存(少量ram、rom或两者都有)和其他外设封装在同一个集成电路中。常见的是8051。
嵌入式dsp专门用于快速处理和计算离散时间信号,提高了编译效率和执行速度。在数字滤波、快速傅立叶变换、频谱分析和图像处理分析领域,dsp正大量进入嵌入式市场。
(2)微内核结构
大多数操作系统至少分为内核层和应用层。内核只提供基本功能,如建立和管理进程、提供文件系统、管理设备等。这些功能通过系统调用提供给用户。一些桌面操作系统,如windows和linux,将许多功能引入内核,操作系统的内核变得越来越大。内核的扩大使得占用的资源增加,并且对其进行裁剪非常麻烦。

大多数嵌入式操作系统采用微内核结构,内核只提供基本功能,如任务调度、任务间的通信和同步、内存管理、时钟管理等。其他应用组件,如网络功能、文件系统、图形用户界面系统等。,以用户模式工作,并以系统进程或函数调用的方式工作。因此,系统可以减少,用户可以根据自己的需要选择相应的组件。

(3)任务调度
在嵌入式系统中,任务就是线程。大多数嵌入式操作系统支持多任务处理。多任务操作的实现实际上依赖于多个任务之间的cpu切换和调度。每个任务都有自己的优先级,不同任务的优先级可能相同,也可能不同。调度任务有三种方式:抢先调度、非抢先调度和时间片轮换调度。非抢占式调度意味着一旦一个任务获得了中央处理器,它就以独占方式运行,除非它出于某种原因决定放弃使用中央处理器的权利;抢占式调度是基于任务优先级的,当前运行的任务可以随时让位于就绪状态下优先级较高的其他任务;当两个或多个任务具有相同的优先级时,不同的任务轮流使用cpu,直到系统分配的cpu时间片用完,这称为时间片循环调度。

目前,大多数嵌入式操作系统对不同优先级的任务采用基于优先级的抢占调度方法,对相同优先级的任务采用时间片轮换调度方法。
(4)硬实时和软实时
一些嵌入式系统对时间有更高的要求,称为实时系统。实时系统有两种类型:硬实时系统和软实时系统。软实时系统不要求某项任务在一定时间内完成,只要求每项任务尽可能快地运行;硬实时系统对系统响应时间有严格的要求。一旦不能满足系统响应时间,就可能导致系统崩溃或致命错误,这通常在工业控制中使用。

(5)内存管理
一些为带有内存管理单元(mmu)的处理器设计的桌面操作系统,如windows和linux,使用虚拟内存的概念。虚拟内存地址被发送到mmu。在这里,虚拟地址被映射到物理地址,实际的存储器被分成相同大小的页面,并且进程通过分页来加载。在一个程序运行之前,没有必要把所有的页面都加载到内存中,只需要加载一些要运行的页面到内存中就可以了。

大多数嵌入式系统是为没有内存管理单元的处理器设计的,内存管理单元不能使用处理器的虚拟内存管理技术,而是采用真正的内存管理策略。因此,对存储器的访问是直接的,它对地址的访问不需要通过mmu,而是直接发送到地址线进行输出。所有程序中访问的地址都是实际的物理地址;此外,大多数嵌入式操作系统不保护内存空,每个进程实际上共享一个运行的空.在执行一个进程之前,系统必须分配足够的连续地址空,然后将它们全部装入主存储器的连续空。

因此,嵌入式系统的开发人员必须参与系统的内存管理。从编译内核开始,开发人员必须告诉系统开发板有多少内存;开发应用程序时,我们必须考虑内存的分配,并注意应用程序需要运行的空大小。此外,由于采用了真正的内存管理策略,用户程序与内核和其他用户程序处于相同的地址空,因此在开发程序时,程序不会破坏系统的正常运行,也不会导致其他程序的异常运行。因此,嵌入式系统的开发人员应该格外小心软件中的一些内存操作。

(6)内核加载模式
嵌入式操作系统内核可以直接在闪存上运行,也可以加载到内存中运行。闪存的运行模式是将内核的可执行映像烧录到闪存中,系统启动时从闪存的某个地址开始执行。这种方法实际上被许多嵌入式系统所采用。内核的加载模式是将内核的压缩文件存储在闪存中。当系统启动时,读取压缩文件并在内存中解压缩,然后开始执行。这种方法相对比较复杂,但运行速度可能会更快,因为ram的访问速度比闪存快。

由于嵌入式系统的内存管理机制,嵌入式操作系统采用静态链接用户程序的形式。在嵌入式系统中,应用程序和操作系统内核代码被编译和链接,以生成二进制映像文件来运行。
2嵌入式系统开发相关技术
与在windows环境下开发应用程序相比,嵌入式系统的开发有很多不同之处。不同的硬件平台和操作系统带来了许多额外的开发复杂性。
2.1嵌入式开发流程
在嵌入式开发过程中,有两个角色:主机和目标计算机:主机是执行编译、链接和寻址过程的计算机;目标机是指运行嵌入式软件的硬件平台。首先,应用程序必须被转换成可以在目标机器上运行的二进制代码。这个过程包括三个步骤:编译、链接和寻址。编译过程由交叉编译器实现。交叉编译器是在一个计算机平台上运行并为另一个平台生成代码的编译器。最常用的交叉编译器是gnuc/c++(gcc)。编译过程中生成的所有目标文件都被链接到一个目标文件中,这称为链接过程。寻址过程将物理内存地址分配给目标文件的每个相对偏移量。这个过程生成的文件是可以在嵌入式平台上执行的二进制文件。

嵌入式开发过程中的另一个重要步骤是在目标计算机上调试应用程序。嵌入式调试采用交叉调试器,一般采用主机和目标机的调试方式,通过串口线、以太网线或bdm线连接。交叉调试包括任务级、源代码级和程序集级调试。调试时,主机上的应用程序和操作系统内核应该下载到目标机器的ram中,或者直接刻录到目标机器的rom中。目标监视器是调试器控制目标机上运行的应用程序的调试器代理,它预先固化在目标机的flash和rom中,目标机开机后自动启动,等待主机端调试器发送的命令,与调试器配合完成应用程序的下载、运行和基本调试功能,并将调试信息返回给主机。

2.2将软件移植到嵌入式平台
大多数嵌入式开发人员选择的软件开发模式是先在pc机上编写软件,然后移植软件。在pc机上编写软件时,应注意软件的可移植性,选择可移植性高的编程语言(如C语言),尽量少调用操作系统功能,注意屏蔽不同硬件平台造成的字节顺序和字节对齐。下面是移植协议栈过程中的一些经验。

2.2.1字节顺序
字节顺序是指内存中一个以上字节类型数据的存储顺序,通常有两个字节顺序:小端和大端。小端字节顺序意味着低字节数据存储在内存的低地址,高字节数据存储在内存的高地址;大端意味着高字节数据存储在低地址,低字节数据存储在高地址。基于x86平台的Pc是小端,而一些嵌入式平台是大端。因此,在这些嵌入式平台上,大于1字节的数据(如int、uint16和uint32)的存储顺序应该改变。通常,我们认为在空传输的字节顺序是标准顺序。考虑到与协议的一致性和与其他同类平台产品的互操作性,在程序中发送数据包时,主机字节顺序转换为网络字节顺序,在接收数据包时,网络字节顺序转换为主机字节顺序。

2.2.2字节对齐
一些嵌入式处理器的寻址模式决定了占用2字节内存的int16和uint16的数据只能存储在偶数内存地址,而占用4字节的int32和uint32的数据只能存储在4的整数倍的内存地址。占用8个字节的类型数据只能存储在8的整数倍的内存地址;然而,在内存中只占1字节的类型数据可以存储在任何地址。由于这些限制,在这些平台上编程是非常不同的。首先,在结构的成员之间会有空洞,比如这样一个结构:

typedef structure test {
chara;
ui nt16b;
}测试
结构测试在单字节对齐的平台上占用三个字节的存储器,而在上面提到的嵌入式平台上可能占用三个或四个字节,这取决于成员a的存储器地址。当a的存储地址为偶数时,结构占用四个字节,并且在a和b之间存在一个一字节的空孔。对于通信的两端,它们对结构的成员进行操作, 所以在这种情况下没有错误,但是如果一方一个字节一个字节地读取内容(这是大多数通信协议的情况),它将会错误地读取其他字节的内容。 其次,如果通过强制类型转换读取内存中的数据,字节对齐的差异将导致数据读取错误。因为如果指针在主内存地址,我们希望得到占用两个字节内存的数据,并将其存储在uint16类型的变量中。作为强制类型转换的结果,我们在指针所指向的地址和前一个地址处获取数据,但是没有按照我们的意愿在指针所指向的地址和下一个地址处获取数据,这导致了数据读取的错误。

解决字节对齐的方法有很多,比如在gcc项目管理文件makefile中增加编译选项-pack-struct;然而,这种方法只能去除结构中的空孔,但不能解决强制类型转换引起的误差。为了增强软件的可移植性和与其他同类平台产品的互操作性,我们在数据包接收端增加了解包功能,在数据包发送端增加了包组装功能。这两个函数解决了字节顺序和字节对齐的问题。也就是说,根据参数中的格式字符串,将内存中不同数据类型的某一段数据放在指定的地址,形成一个包,并发送给下层;解包时,根据参数中的格式字符串,内存中接收到的数据存储在不同类型的变量或结构成员中。不同的数据类型在函数中有不同的处理方式。

2.2.3位段
由于空之间的位段分配方向因硬件平台不同而不同,因此x86平台的位段从右向左分配;在一些嵌入式平台上,位段是从左到右分配的。分配顺序的不同导致数据访问的错误。解决这个问题的一种方法是使用条件编译为不同的平台定义不同顺序的位段。也可以将位段处理添加到上述两个功能中。

2.2.4代码优化
嵌入式系统对应用软件的质量要求更高,因此在嵌入式开发中,应特别注意优化代码,提高代码效率,尽可能减少代码量。虽然现代C和c++编译器都提供了一定程度的代码优化,但是编译器执行的大多数优化技术只涉及执行速度和代码大小之间的平衡,不可能使程序变得又快又小,因此在编写嵌入式软件时必须采取必要的措施。

(1)提高代码的效率
①交换案例陈述。程序中经常使用交换语句,机器语言实现的每一次测试和跳转都只是为了决定下一步该做什么,这浪费了处理器时间。为了提高速度,可以根据具体情况的相对频率对其进行分类。也就是说,将最有可能的情况放在第一位,将最不可能的情况放在最后,将减少平均代码执行时间。

②全局变量。使用全局变量比将参数传递给函数更有效,这消除了在函数调用之前堆栈参数和在函数完成之后堆栈参数的需要。当然,使用全局变量会对程序产生一些负面影响。
(2)减少代码的大小
嵌入式系统编程应该避免使用标准的库例程。因为许多大型库例程试图处理所有可能的情况,它们占用了巨大的内存空,所以应该尽可能减少标准库例程的使用。
(3)避免内存泄漏
用户内存空 (heap)是在ram中分配全局数据和任务堆栈空之后剩余的空。为了使程序有足够的内存来运行,它必须存储在如果程序内存有泄漏(也就是说,它在申请内存后没有及时释放),程序最终将无法运行,因为没有足够的内存空.

3嵌入式系统的广泛应用
嵌入式系统的应用前景非常广阔,人们将会一直接触到嵌入式产品,从家里的洗衣机和冰箱,到作为交通工具的自行车和汽车,到办公室的电话会议系统等等。尤其是以蓝牙为代表的小范围无线接入协议的出现,使得嵌入式无线电的概念悄然兴起。当嵌入式无线电芯片的价格可以接受时,它的应用可能无处不在。在家庭、办公室和公共场所,人们可能会使用几十个甚至更多的这种嵌入式无线电芯片来形成一些电子信息设备,甚至电子设备进入无线网络;无论是在汽车上还是在路上,人们都可以利用这种嵌入式无线芯片实现远程办公和远程控制,真正实现随身携带网络。以下是一些具体的应用。

(1)嵌入式移动数据库
所谓移动数据库是支持移动计算的数据库,它有两层含义:①用户在移动过程中可以在线访问数据库资源。②用户可以随数据库移动。典型的应用包括在开放的救护车上查询最近的医院。该系统由前台移动终端和后台同步服务器组成,移动终端具有嵌入式实时操作系统和嵌入式数据库。中国人民大学正在开发该系统,他们与合和公司合作开发了前端移动终端elf。

(2)嵌入式系统在智能家庭网络中的应用
智能家居网络(e-home)是指在家中建立通信网络,为家庭信息提供必要的渠道;在家庭网络操作系统的控制下,可以通过相应的硬件和执行机制来控制和监控家庭网络上的所有家用电器和设备。其网络结构的组成必须有一个家庭网关。家庭网关主要实现控制网络和信息网络的信号合成,并与外界接口进行远程控制和信息交换。无论是网关还是每个家用电器上的控制模块,都需要嵌入式操作系统。这些操作系统必须是嵌入式、实时和多用户的。南京东大移动互联网技术有限公司开发的智能多媒体家庭网关,采用嵌入式linux作为嵌入式设备的操作系统,设备间的通信遵循蓝牙通信协议,支持多台设备同时接入其他外部网络,如固定电话网和互联网。

(3)嵌入式语音芯片
嵌入式语音芯片基于嵌入式操作系统,采用语音识别和语音合成、语音分级结构系统和文本处理模型。它可以应用到手持设备、智能家电等领域,赋予这些设备人性化的交互方式和便捷的使用方法;也可用于玩具中实现声控玩具、模拟宠物和与人交谈的玩具;也可应用于车载通信设备,实现人机通信。该芯片用于移动通信设备。例如,当一条短信出现在手机上时,我们不必费力地看它,但我们可以听到声音。

(4)基于小规模无线通信协议的嵌入式产品
以蓝牙为代表的小规模无线接入协议与嵌入式系统的结合将促进嵌入式系统的广泛应用。近年来,基于这些协议的嵌入式产品层出不穷,包括各种电话系统、无线公文包、各种数字电子设备及其在电子商务中的应用。这些产品因其小型化和低成本而在家庭和办公自动化、电子商务、工业控制、智能建筑和各种特殊场合中开辟了广阔的应用前景。

该实验室成立的东南大学移动通信国家重点实验室和南京东大移动互联网技术有限公司自1998年开始跟踪蓝牙技术,在香港特区政府创新科技基金、江苏省重大科技攻关和国家“十五”科技攻关的支持下,设计开发了多种基于蓝牙技术的嵌入式产品。包括符合bluetoothv1.1标准的嵌入式pstn网关和语音终端。它们基于蓝牙三合一电话应用模型,选择中科院凯斯彭浩软件技术工程有限公司提供的hopenos作为嵌入式开发的软件平台,Winbond的w90221作为硬件平台。语音终端可以通过pstn网关无线接入pstn网络,实现与pstn网络用户的互通。还有符合bluetoothv1.1标准的嵌入式局域网接入点,基于蓝牙局域网接入应用模型,选择嵌入式linux操作系统作为软件平台,摩托罗拉的codefire5272作为硬件平台。通过此接入点,最终用户可以自由访问互联网,并支持多个最终用户同时连接到互联网。其他嵌入式产品包括智能多媒体家庭网关、远程抄表系统、信息家电等。

结论
以上,主要介绍了嵌入式系统的特点以及嵌入式产品的开发和应用。在开发过程中,我们意识到嵌入式系统开发与以往的开发工作没有区别,唯一的变化是每个硬件平台都是独一无二的,这就导致了许多额外的开发复杂性,所以我们在嵌入式开发过程中要特别注意软件的创建过程;此外,在开发嵌入式产品之前,我们应该对所选择的嵌入式硬件平台有更好的了解,具备相应的硬件知识,并与硬件工程师密切合作;在选择嵌入式操作系统和硬件平台时,应该根据开发应用的需要和成本选择合适的系统和平台。

随着科学技术的飞速发展,嵌入式产品将会得到越来越广泛的应用。我们相信,只要我们遵循嵌入式产品的发展规律,满足市场需求,就会开发出越来越多的嵌入式产品。
参考
1 labrossejean j .μc/OS-ii-一个实时嵌入式操作系统,具有开放源代码。Trans。邵贝贝。北京:中国电力出版社,2001。嵌入式系统的c编程。Trans。艾克武等。北京:机械工业出版社,2001
3。伍德霍尔伯茨。操作系统:设计和实现。第二版。王鹏等译。北京:电子工业出版社,1998
4 embedded
5 bsig。蓝牙系统规范(核心)版本1.1。蓝牙,2000

来源“单片机与嵌入式系统应用”
上一篇:国内第一个仿人机器人灵巧手研制
标题:嵌入式系统关键技术分析与开发应 地址:http://www.zgshouguang.cn/article/6643.html
