引 言
在当时数字信息技能和网络技能高速开展的后PC(Post-PC)年代,嵌入式体系现已广泛地渗透到科学研究、工程规划、军事技能、各类工业和商业文化艺术以及人们的日常日子等方方面面中。跟着国内外各种嵌入式产品的进一步开发和推行,嵌入式技能越来越和人们的日子紧密结合。
1970年左右呈现了嵌入式体系的概念,此刻的嵌入式体系许多都不选用操作体系,它们只是为了完结某个操控功用,运用一个简略的循环操控对外界的操控恳求进行处理。当运用体系越来越杂乱、运用的规模越来越广泛的时分,每添加一项新的功用,都或许需求从头开端规划。没有操作体系已成为一个最大的缺点了。
C言语的呈现使操作体系开发变得简略。从上世纪80年代开端,呈现了各式各样的商用嵌入式操作体系百家争鸣的局势,比较闻名的有VxWorks、pSOS和Windows CE等等,这些操作体系大部分是为专有体系而开发的。别的,源代码敞开的嵌入式Linux,由于其强壮的网络功用和低本钱,近来也得到了越来越多的运用。
1 嵌入式体系的技能特色
嵌入式体系一般包含构成软件的根本运转环境的硬件和操作体系两部分。嵌入式体系的运转环境和运用场合决议了嵌入式体系具有差异于其它操作体系的一些特色。
(1)嵌入式处理器
嵌入式处理器能够分为三类:嵌入式微处理器、嵌入式微操控器、嵌入式DSP(Digital Signal Processor)。嵌入式微处理器便是和通用核算机的微处理器对应的CPU。在运用中,一般是将微处理器装配在专门规划的电路板上,在母板上只保存和嵌入式相关的功用即可,这样能够满意嵌入式体系体积小和功耗低的要求。现在的嵌入式处理器首要包含:PowerPC、Motorola 68000、ARM系列等等。
嵌入式微操控器又称为单片机,它将CPU、存储器(少数的RAM、ROM或两者都有)和其它外设封装在同一片集成电路里。常见的有8051。
嵌入式DSP专门用来对离散时刻信号进行极快的处理核算,进步编译功率和履行速度。在数字滤波、FFT、谱剖析、图画处理的剖析等范畴,DSP正在许多进入嵌入式商场。
(2)微内核结构
大多数操作体系至少被划分为内核层和运用层两个层次。内核只供给根本的功用,如树立和办理进程、供给文件体系、办理设备等,这些功用以体系调用办法供给给用户。一些桌面操作体系,如Windows、Linux等,将许多功用引进内核,操作体系的内核变得越来越大。内核变大使得占用的资源增多,取舍起来很费事。
大多数嵌入式操作体系选用了微内核结构,内核只供给根本的功用,比方:使命的调度、使命之间的通讯与同步、内存办理、时钟办理等。其它的运用组件,比方网络功用、文件体系、GUI体系等均作业在用户态,以体系进程或函数调用的办法作业。因此体系都是可削减的,用户能够依据自己的需求选用相应的组件。
(3)使命调度
在嵌入式体系中,使命即线程。大多数的嵌入式操作体系支撑多使命。多使命运转的完结实践是靠CPU在多个使命之间切换、调度。每个使命都有其优先级,不同的使命优先级或许相同也或许不同。使命的调度有三种办法:可抢占式调度、不行抢占式调度和时刻片轮转调度。不行抢占式调度是指,一个使命一旦获得CPU就独占CPU运转,除非由于某种原因,它决议抛弃CPU的运用权;可抢占式调度是依据使命优先级的,当时正在运转的使命能够随时让位给优先级更高的处于安排妥当态的其它使命;当两个或两个以上使命有相同的优先级,不同使命轮转地运用CPU,直到体系分配的CPU时刻片用完,这便是时刻片轮转调度。
现在,大多数嵌入式操作体系对不同优先级的使命选用依据优先级的抢占式调度法,对相同优先级的使命则选用时刻片轮转调度法。
(4)硬实时和软实时
有些嵌入式体系对时刻的要求较高,称之为实时体系。有两种类型的实时体系:硬实时体系和软实时体系。软实时体系并不要求约束某一使命有必要在必定的时刻内完结,只需求各使命运转得越快越好;硬实时体系对体系呼应时刻有严格要求,一旦体系呼应时刻不能满意,就或许会引起体系溃散或丧命的过错,一般在工业操控中运用较多。
(5)内存办理
针对有内存办理单元(MMU)的处理器规划的一些桌面操作体系,如Windows、Linux,运用了虚拟存储器的概念。虚拟内存地址被送到MMU。在这里,虚拟地址被映射为物理地址,实践存储器被分割为相同巨细的页面,选用分页的办法载入进程。一个程序在运转之前,没有必要悉数装入内存,而是仅将那些当时要运转的部分页面装入内存运转。
大多数嵌入式体系针对没有MMU的处理器规划,不能运用处理器的虚拟内存办理技能,选用的是实存储器办理战略。因此关于内存的拜访是直接的,它对地址的拜访不需求经过MMU,而是直接送到地址线上输出,一切程序中拜访的地址都是实践的物理地址;并且,大多数嵌入式操作体系对内存空间没有维护,各个进程实践上同享一个运转空间。一个进程在履行前,体系有必要为它分配满足的接连地址空间,然后悉数载入主存储器的接连空间。
由此可见,嵌入式体系的开发人员不得不参加体系的内存办理。从编译内核开端,开发人员有必要告知体系这块开发板究竟具有多少内存;在开发运用程序时,有必要考虑内存的分配状况并重视运用程序需求运转空间的巨细。别的,由于选用实存储器办理战略,用户程序同内核以及其它用户程序在一个地址空间,程序开发时要保证不侵略其它程序的地址空间,以使得程序不至于损坏体系的正常作业,或导致其它程序的运转反常;因此,嵌入式体系的开发人员对软件中的一些内存操作要分外当心。
(6)内核加载办法
嵌入式操作体系内核能够在Flash上直接运转,也能够加载到内存中运转。Flash的运转办法,是把内核的可履行映像烧写到Flash上,体系发动时从Flash的某个地址开端履行。这种办法实践上是许多嵌入式体系所选用的办法。内核加载办法是把内核的压缩文件寄存在Flash上,体系发动时读取压缩文件在内存里解压,然后开端履行。这种办法相对杂乱一些,可是运转速度或许更快,由于RAM的存取速率要比Flash高。
由于嵌入式体系的内存办理机制,嵌入式操作体系对用户程序选用静态链接的办法。在嵌入式体系中,运用程序和操作体系内核代码编译、链接生成一个二进制印象文件来运转。
2 嵌入式体系开发相关技能
相关于在Windows环境下的开发运用程序,嵌入式体系开发有着许多的不同。不同的硬件渠道和操作体系带来了许多附加的开发杂乱性。
2.1 嵌入式开发进程
在嵌入式开发进程中有宿主机和方针机的人物之分:宿主机是履行编译、链接、定址进程的核算机;方针机指运转嵌入式软件的硬件渠道。首要须把运用程序转化成能够在方针机上运转的二进制代码。这一进程包含三个进程:编译、链接、定址。编译进程由穿插编译器完结。所谓穿插编译器便是运转在一个核算机渠道上并为另一个渠道产生代码的编译器。常用的穿插编译器有GNU C/C++(gcc)。编译进程产生的一切方针文件被链接成一个方针文件,称为链接进程。定址进程会把物理存储器地址指定给方针文件的每个相对偏移处。该进程生成的文件便是能够在嵌入式渠道上履行的二进制文件。
嵌入式开发进程中另一个重要的进程是调试方针机上的运用程序。嵌入式调试选用穿插调试器,一般选用宿主机-方针机的调试办法,它们之间由串行口线或以太网或BDM线相连。穿插调试有使命级、源码级和汇编级的调试,调试时需将宿主机上的运用程序和操作体系内核下载到方针机的RAM中或直接烧录到方针机的ROM中。方针监控器是调试器对方针机上运转的运用程序进行操控的署理(Debugger Agent),事前被固化在方针机的Flash、ROM中,在方针机上电后主动发动,并等候宿主机方调试器发来的指令,协作调试器完结运用程序的下载、运转和根本的调试功用,将调试信息回来给宿主机。
2.2 向嵌入式渠道移植软件
大部分嵌入式开发人员选用的软件开发形式是先在PC机上编写软件,再进行软件的移植作业。在PC机上编写软件时,要留意软件的可移植性,选用具有较高移植性的编程言语(如C言语),尽量少调用操作体系函数,留意屏蔽不同硬件渠道带来的字节次序、字节对齐等问题。以下是咱们在移植协议栈进程中的一些领会。
2.2.1 字节次序
字节次序是指占内存多于一个字节类型的数据在内存中的寄存次序,一般有小端、大端两种字节次序。小端字节序指低字节数据寄存在内存低地址处,高字节数据寄存在内存高地址处;大端字节序是高字节数据寄存在低地址处,低字节数据寄存在高地址处。依据X86渠道的PC机是小端字节序的,而有的嵌入式渠道则是大端字节序的。因此对int、uint16、uint32等多于1字节类型的数据,在这些嵌入式渠道上应该改换其存储次序。一般咱们以为,在空中传输的字节的次序即网络字节序为规范次序,考虑到与协议的共同以及与同类其它渠道产品的互通,在程序中发数据包时,将主机字节序转化为网络字节序,收数据包处将网络字节序转化为主机字节序。
2.2.2 字节对齐
有的嵌入式处理器的寻址办法决议了在内存中占2字节的int16、uint16等类型数据只能寄存在偶数内存地址处,占4字节的int32 、uint32 等类型数据只能寄存在4的整数倍的内存地址处;占8字节的类型数据只能寄存在8的整数倍的内存地址处;而在内存中只占1字节的类型数据能够寄存在恣意地址处。由于这些约束,在这些渠道上编程时有很大的不同。首要,结构体成员之间会有空泛,比方这样一个结构:
typedef struct test{
char a;
uint16 b;
}TEST
结构TEST在单字节对齐的渠道上占内存三个字节,而在以上所述的嵌入式渠道上有或许占三个或四个字节,视成员a的存储地址而定。当a存储地址为偶数时,该结构占四个字节,在a与b之间存在一个字节的空泛。关于通讯两边都是对结构成员操作的,这种状况不会犯错,但假如有一方是逐字节读取内容的(通讯协议大都如此),就会过错地读到其它字节的内容。其次,若对内存中数据以强制类型转化的办法读取,字节对齐的不同会引起数据读取的过错。由于假设指针指在基数内存地址处,咱们想获得占内存两个字节的数据寄存在uint16型的变量中,强制类型转化的结果是获得了该指针所指地址与前一地址处的数据,并没有依照咱们的希望取该指针所指地址与后一地址处的数据,这样就导致了数据读取的过错。
处理字节对齐有许多办法,比方能够在GCC的项目办理文件MakeFile中添加编译选项–pack-struct;但这种办法只能去除结构中的空泛,并不能处理强制类型转化引起的过错。为了增强软件的可移植性以及和同类其它渠道产品的互通性,咱们在收数据包处添加了拆包的函数,发数据包处添加了组包的函数。这两个函数处理了字节序的问题,也处理了字节对齐的问题。即组包时依据参数中的格局字符串将内存中的不同数据类型的某段数据放在指定地址处,组成包发给基层;拆包时,依据参数中的格局字符串将收到的内存中的数据寄存在不同类型的变量或结构成员中。在函数中针对不同的数据类型作不同的处理。
2.2.3 位 段
由于位段的空间分配方向因硬件渠道的不同而不同,对X86渠道,位段是从右向左分配的;而一些嵌入式渠道,位段是从左向右分配的。分配次序的不同导致了数据存取的过错。处理这一问题的一种办法是选用条件编译的办法,针对不同的渠道界说次序不同的位段;也能够在前面所述的两个函数中加上对位段的处理。
2.2.4 代码优化
嵌入式体系对运用软件的质量要求更高,因此在嵌入式开发中特别须留意对代码进行优化,尽或许地进步代码的功率,削减代码的巨细。尽管现代C和C++编译器都供给了必定程度的代码优化,但大部分由编译器履行的优化技能仅触及履行速度和代码巨细的平衡,不或许使程序既快又小,因此有必要在编写嵌入式软件时采纳必要的办法。
(1)进步代码的功率
①switch-case 句子。在程序中经常会运用switch-case句子,每一个由机器言语完结的测验和跳转只是是为了决议下一步要做什么,就浪费了处理器时刻。为了进步速度,能够把详细的状况依照它们产生的相对频率排序。即把最或许产生的状况放在榜首,最不或许产生的状况放在最终,这样会削减均匀的代码履行时刻。
② 大局变量。运用大局变量比向函数传递参数愈加有功率,这样做去除了函数调用前参数入栈和函数完结后参数出栈的需求。当然,运用大局变量会对程序有一些负效果。
(2)减小代码的巨细
嵌入式体系编程应防止运用规范库例程,由于许多大的库例程设法处理一切或许的状况,所以占用了巨大的内存空间,因此应尽或许地削减运用规范库例程。
(3)防止内存走漏
用户内存空间(堆)为RAM中大局数据和使命仓库空间都分配后的剩下空间,为了使程序能有满足的内存运转,有必要在请求的内存不用后及时地将其开释,以保证再次请求时能有空间。假如程序中存在内存走漏(即请求内存后没有及时开释)的状况,程序最终会由于没有满足的内存空间而无法运转。
3 嵌入式体系的广泛运用
嵌入式体系的运用远景是十分广泛的,人们将会无时无处不接触到嵌入式产品,从家里的洗衣机、电冰箱,到作为交通工具的自行车、小汽车,到作业室里的长途会议体系等等。特别是以蓝牙为代表的小规模无线接入协议的呈现,使嵌入式无线电的概念悄然兴起。当嵌入式的无线电芯片的价格可被承受时,它的运用或许会无所不在。在家中、作业室、公共场所,人们或许会运用数十片乃至更多这样的嵌入式无线电芯片,将一些电子信息设备乃至电气设备构成无线网络;在车上、旅途中,人们运用这样的嵌入式无线电芯片能够完结长途作业、长途遥控,真实完结把网络随身携带。下面介绍几种详细的运用。
(1)嵌入式移动数据库
所谓的移动数据库是支撑移动核算的数据库,有两层意义:① 用户在移动的进程中能够联机拜访数据库资源。② 用户能够带着数据库移动。典型的运用场合有在开着的救助车上查询最近的医院。该体系由前台移动终端、后台同步服务器组成,移动终端上有嵌入式实时操作体系和嵌入式数据库。中国人民大学正在开发该体系,他们和Hopen公司协作,开发了前台移动终端“小精灵”。
(2)嵌入式体系在智能家居网络中的运用
智能家居网络(E-Home)指在一个家居中树立一个通讯网络,为家庭信息供给必要的通路;在家庭网络操作体系的操控下,经过相应的硬件和履行机构,完结对一切家庭网络上家电和设备的操控和监测。其网络结构的组成必定有家庭网关。家庭网关首要完结操控网络和信息网络的信号归纳并与外界接口,以便作长途操控和信息沟通。不论是网关仍是各家电上的操控模块,都需有嵌入式操作体系。这些操作体系有必要具有内嵌式、实时性好、多用户的特色。南京东大移动互联技能有限公司研发的智能多媒体家庭网关,便是以嵌入式Linux作为该嵌入式设备的操作体系,设备之间的彼此通讯遵照蓝牙通讯协议,能够支撑多个设备一起接入到固定电话网、国际互联网等其它外部网络。
(3)嵌入式语音芯片
嵌入式语音芯片依据嵌入式操作体系,选用语音辨认和语音组成、语音学层次结构体系和文本处理模型等技能;能够运用在手持设备、智能家电等多个范畴,赋予这些设备人性化的交互办法和便当的运用办法;也可运用于玩具中,完结声控玩具、仿真宠物、与人对话的玩具;也能运用于车载通讯设备完结人机沟通。该芯片运用在移动通讯设备中,比方,手机上短消息来时,咱们不用吃力地去看,而是能够听到声响。
(4)依据小规模无线通讯协议的嵌入式产品
以蓝牙为代表的小规模无线接入协议与嵌入式体系的结合,必将推进嵌入式体系的广泛运用。近来,依据这些协议的嵌入式产品层出不穷,包含各种电话体系、无线公文包、各类数字电子设备以及在电子商务中的运用。这些产品以其微型化和低本钱的特色为它们在家庭和作业室主动化、电子商务、工业操控、智能化建筑物和各种特别场合的运用拓荒了宽广的远景。
东南大学移动通讯国家要点实验室以及依托实验室树立的南京东大移动互联技能有限公司,从1998年开端盯梢蓝牙技能,在香港特区政府立异科技基金、江苏省“十五”严重科技攻关以及国家“十五”科技攻关的赞助下,先后规划和研发了多种依据蓝牙技能的嵌入式产品。其间包含契合Bluetooth V1.1规范的嵌入式PSTN网关和语音终端。它们依据蓝牙“三合一电话”运用模型,选用了中国科学院凯思昊鹏软件技能工程有限公司供给的Hopen OS作为嵌入式开发的软件渠道,选用华邦的W90221作为硬件渠道。语音终端能经过PSTN网关以无线的办法接入到PSTN网络中,完结和PSTN网用户的互通。还有契合Bluetooth V1.1规范的嵌入式局域网接入点,它依据蓝牙“局域网接入”运用模型,选用嵌入式Linux操作体系作为软件渠道,选用Motorola公司的CodeFire 5272作为硬件渠道。经过该接入点,终端用户能够自由地接入到Internet,能够一起支撑多个终端用户连接到Internet。其它一些嵌入式产品包含智能多媒体家庭网关、长途抄表体系、信息家电等等。
结 语
以上要点介绍了嵌入式体系的特色、嵌入式产品的开发和运用。咱们在开发进程中领会到:嵌入式体系开发和曾经从事的开发作业实质上并无差异,仅有改动的是每个硬件渠道都是共同的,这一个不同点导致了许多附加的开发杂乱性,因此,在嵌入式开发进程中要分外留意软件创立进程;并且,在开发嵌入式产品之前要对选用的嵌入式硬件渠道有较多的了解,具有相应的硬件常识,和硬件工程师密切协作;在选用嵌入式操作体系和硬件渠道时要依据所要开发的运用的需求以及本钱等方面的考虑挑选适宜的体系和渠道。
在科技快速开展的今日,嵌入式产品将会越来越多地被广泛运用。咱们信任,只需遵从嵌入式产品的开发规则,习惯商场的需求,就必定能开宣布越来越多的嵌入式产品。