学习或从事嵌入式开发,首先要了解一下嵌入式开发技术的发展现状,本文搜集了一些嵌入式开发技术相关的资料,希望对大家有用。
嵌入式系统的概念
嵌入式系统在术语上被定义为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适用于应用系统,对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。它的特点在于两方面:嵌入、专用。
从20世纪70年代起,微型机以小型、价廉、高速数值计算等特点迅速走向市场,它所具备的智能化水平在工业控制领域发挥了作用,常被组装成各种形状,“嵌入”到一个对象体系中,进行某类智能化的控制。这样一来,计算机便失去了原来的形态与“通用”的功能,为区别于通用计算机系统,将这类为了某个“专用”的目的,而“嵌入”到对象体系中的计算机机系统,称为嵌入式计算机系统,简称嵌入式系统。
含有嵌入式系统的设备就被称为嵌入式设备,这在生活中随处可见:电子表、手机、MP3播放器、摇控器等等,涵盖了生产、工业控制、通信、网络、消费电子、汽车电子、军工等领域。从通俗、广义的角度来说,除电脑、超级计算机等具备比较强大计算能力及系统资源(比如内存、存储器等)的电子系统之外,凡具备计算能力的设备都可称之为嵌入式设备。并且随着技术的进步,嵌入式设备的性能越来越高,一个相对高级的PDA的价格、性能并不弱于一般的电脑。
嵌入式设备常应用于“特定”场合,与“通用的”个人电脑相比,具备了上面的术语中定义的各种特点:
1.软件硬件可裁剪
如果能够将市面上的手机拆开,会发现虽然它们的功能是相似的,但是所用芯片多种多样,所用的操作系统也有多种,操作界面更是千变万化,操作的便利性各有千秋。这不同于个人电脑:CPU除了INTEL就是AMD,操作系统多用Windows。功能、成本、开发效率等条件决定了嵌入式设备的选材多样化,软件硬件可裁剪:当不需要某项功能时,可以去除相关的软硬件。
2.对功能、可靠性、成本、体积、功耗严格要求
其中功能、可靠性、功耗这三点对于软件开发人员来说是最值得关注的地方。仍以手机为例,当选定硬件平台之后,处理器的性能已经被限定了,怎样使得手机的操作更人性化、菜单响应更快捷、具备更多更好的功能,这完全取决于软件了。需要驱动程序和应用程序配合,最大程序地发挥硬件的性能。也许读者见过这类手机,它的屏幕总是经过很长时间才熄灭,这使得它的电池很快耗光,只要在编写软件时进行改进,就可能成倍地延长电池的使用时间。一个优秀的嵌入式系统,对硬件性能的“压榨”、对软件的细致调节,已经到了精益求益的地步。有时候甚至为了节省几秒的启时间而大动脑筋:调整程序的启动顺序让耗时的程序稍后运行、改变程序的存储方式以便更快地加载等等,甚至通过显示一个进度条让用户觉得时间没那么长。
嵌入式技术的发展历史
嵌入式技术在20世纪70年代起源于微型机,从此之后,通用计算机与嵌入式计算机就走上了两条不同的道路。通用计算机系统的技术要求是高速、海量的数值计算;技术发展方向是总线速度的无限提升,存储容量的无限扩大。 而嵌入式计算机系统的技术要求则是对象的智能化控制能力;技术发展方向是与对象系统密切相关的嵌入性能、控制能力与控制的可靠性。
嵌入式技术的发展日新月异,经历了单片机(SCM)、微控制器(MCU)、系统级芯片(SoC)三大阶段:
1. SCM(Single Chip Microcomputer)
又称单片微型计算机,简称单片机,是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机。
这个阶段主要是“寻求”单片形态嵌入式系统的最佳体系结构,也是从这个阶段起,嵌入式计算机技术与通用计算机技术走上两条不同的道路。
2. MCU(Micro Controller Unit)
MCU即微控制器阶段的特征是:“满足”各类嵌入式应用,根据对象系统要求扩展各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。
实际上,MCU、SCM之间的概念在日常工作中并不严格区分,很多时候一概以“单片机”称呼。随着能够运行更复杂软件(比如操作系统)的SoC的出现,“单片机”通常是指不运行操作系统的、功能相对单一的嵌入式系统──这不是绝对的,比如8051上就可以运行一个名为RTX51的实时操作系统,它只有6K左右,相比于Linux、Windows CE等操作系统而言比较简单。
3. SoC(System On a Chip)
随着设计与制造技术的发展,集成电路设计从晶体管的集成发展到逻辑门的集成,现在又发展到IP的集成,即SoC(System on a Chip)设计技术。SoC可以有效地降低电子/信息系统产品的开发成本,缩短开发周期,提高产品的竞争力,是未来工业界将采用的最主要的产品开发方式。
虽然SoC一词多年前就已出现,但到底什么是SoC则有各种不同的说法。在经过了多年的争论后,专家们就SoC的定义达成了一致意见。这个定义虽然不是非常严格,但明确地表明了SoC的特征:
① 实现复杂系统功能的VLSI;
② 采用超深亚微米工艺技术;
③ 使用一个以上嵌入式CPU/数字信号处理器(DSP);
④ 外部可以对芯片进行编程;
⑤ 主要采用第三方IP进行设计。
从上述SoC的特征来看,SoC中包含了微处理器/微控制器、存储器以及其他专用功能逻辑,但并不是包含了微处理器、存储器以及其他专用功能逻辑的芯片就是SoC──8051就集成了微处理器、存储器时部件,但它不属于SoC。SoC技术被广泛认同的根本原因,并不在于SoC可以集成多少个晶体管,而在于SoC可以用较短时间被设计出来。这是SoC的主要价值所在——缩短产品的上市周期,因此,SoC更合理的定义为:SoC是在一个芯片上由于广泛使用预定制模块IP(Intellectual Property)而得以快速开发的集成电路。
例如S3C2410/S3C2440就属于SoC,比如它们集成了处理器、内存管理单元(MMU)、NAND Flash控制器等部件,而处理器是基于ARM公司的IP设计的。
嵌入式软件随着硬件的发展,也发生了很大的变化。在SCM、MCU阶段,嵌入式软件的编写通常由相关行业的电气、电子技术专家编写,计算机专业队伍并没有真正进入单片机应用领域。因此,电子技术应用工程师以自己习惯性的电子技术应用模式,从事单片机的应用开发。这种应用模式最重要的特点是:软、硬件的底层性和随意性;对象系统专业技术的密切相关性;缺少计算机工程设计方法。
随着嵌入式处理器性能的快速提高,网络、通信、多媒体技术得以发展,很多嵌入式设备都具备收发邮件、编写文档、视听等功能,计算机专业人士开始进入嵌入式领域。这形成了明显的技术特点:基于操作系统、以网络、通信为主的“非嵌入式底层”应用──除要完成的功能比较特殊、性能比较苛刻外,嵌入式应用软件的开发已经与普通软件开发没有差别。实际上,很多基于操作系统的嵌入式应用程序就是先在PC上模拟验证,最后才移入嵌入式设备的。
以一个浅显的例子说明:以前基于单片机编写的软件,通常是在main函数中定义一个无限循环,然后在里面查询各类输入事件,并作出相应处理,它直接操作硬件;而基于SoC的软件多是在操作系统上面运行,通过驱动程序操作硬件,这使得软件开发以分工的形式进行,术有专攻。
基于ARM处理器的嵌入式Linux系统
ARM处理器介绍
1. ARM的概念:
嵌入式处理器种类繁多,有ARM、MIPS、PPC等多种架构。ARM处理器的文档非富,各类嵌入式软件大多(往往首选)支持ARM处理器,使用ARM开发板来学习嵌入式开发是个好选择。基于不同架构CPU的开发是相通的,掌握ARM架构之后,在使用其他CPU时也会很快上手。当然,作为产品进行选材时,需要考量的因素就非常多了,这不在本书的介绍范围之内。
ARM(Advanced RISC Machine),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。ARM公司是32位嵌入式RISC微处理器技术的领导者,自从1990年创办公司以来,基于ARM技术IP核的微处理器的销售量已经超过了100亿。ARM公司并不生产芯片,而是出售芯片技术授权。其合作公司针对不同需求搭配各类硬件部件,比如UART、SDI、I2C等,设计出不同的SoC芯片。ARM公司在技术上的开放性使得它的合作伙伴既有世界顶级的半导体公司,也有各类中、小型公司。随着合作伙伴的增多,也使得ARM处理器可以得到更多的第三方工具、制造和软件支持,又使整个系统成本降低,使新品上市时间加快,从而具有更大的竞争优势。
基于ARM的处理器以其高速度、低功耗、价格低等优点而得到非常广泛的应用,它可以应用于以下领域:
① 为无级通信、消费电子、成像设备等产品,提供可运行复杂操作系统的开放应用平台;
② 在海量存储、汽车电子、工业控制和网络应用等领域,提供实时嵌入式应用;
③ 安全系统,比如信用卡、SIM卡等。
2. ARM体系架构的版本:
ARM体系架构的版本就是它所使用的指令集的版本。ARM架构支持32位的ARM指令集和16位的Thumb指令集,后者使得代码的存储空间大减小。还提供了一些扩展功能,比如Java加速器(Jazelle)、用以提高安全性能的TrustZone技术、智能能源管理(IEM,Intelligent Energy Manager)、SIMD和NEONTM等技术。
还在使用的ARM指令集(ISA,Instruction Set Architecture)有以下版本:
(1)ARMv4。
这是当今市场上最老的版本,所有之前的些已经废弃。ARMv4 只支持32位的指令集,支持32位的地址空间。一些ARM7系列的处理器和Intel公司的StrongARM 处理采用ARMv4指令集。
(2)ARMv4。
增加了16位的Thumb指令集,它可以产生更紧凑的代码,与相同功能的ARM代码相比,可以节省超过35%的存储空间,同时具备32位代码的所有优点。
(3)ARMv5TE。
在1999年,ARMv5TE版本改进了Thumb指令集:增加了一些“增强型DSP指令”,简称为E指令集。
这些指令用于增强处理器对一些典型的DSP算法的处理性能,使得音频DSP应用可以提升70%的性能。许多系统在使用微控制器来进行各类控制的同时,还需要具备数据处理能力,传统的做法要么是使用更高级的处理器(这使得成本增加),要么是使用多个处理器(这使得系统复杂度增高)。通过E指令集可以在一个普通CPU中增加DSP的功能,这在成本、性能、简化设计等方面都有优势。
(4)ARMv5TEJ。
在2000年,ARMv5TEJ版本中增加了Jazelle技术用于提供Java加速功能。相比于仅用软件实现的Java虚拟机,Jazelle技术使得Java代码的运行速度提高8位,而功耗降低80%。
Jazelle技术使得可以在一个单后的处理器上运行Java程序、已经建立好的操作系统和应用程序。
(5)ARMv6。
在2001年,ARMv6问世。它在很多方面都有改进:存储系统、异常处理,最重要的是增加了对多媒体功能的支持。ARMv6中包含了一些媒体指令以支持SIMD媒体功能扩展。SIMD媒体功能扩展为音频/视频的处理提供了优化功能,可以使音频/视频的处理性能提高4倍。
ARMv6中,还引入了Thumb-2和TrustZone技术,这是两个可选的技术。之前的版本中,ARM 指令和Thumb指令分别运行于不同的处理器状态,执行不同指令集的指令前要进行切换。Thumb-2技术增加了混合模式的功能,定义了一个新的32位指令集,使得可以运行32位指令与传统16位指令的混合代码。这能够提供“ARM指令级别的性能”与“Thumb指令级别的代码密度”。TrustZone技术在硬件上提供了两个隔离的地址空间:安全域(secure world)和非安全域(non-secure world),给系统提供了一个安全机制。
(6)ARMv。
ARMv7架构使用Thumb-2技术,还使用了NEON技术,将DSP和媒体处理能力提高了近4倍,并支持改良的浮点运算,满足下一代3D图形、游戏物理应用以及传统嵌入式控制应用的需求。
可以总结:版本名中的T表示Thumb指令集,E表示增强型DSP指令,J表示Java加速器。
3. ARM处理器系列:
在相同指令集下,搭配不同部件就可以组装出具有不同功能的处理器,比如有无内存管理单元、有无调试功能等等。它们可以分为8个系列,系列名中的后缀含义如下:
① T:表示支持Thumb指令集
② D:表示支持片上调试(Debug)
③ M:表示内嵌硬件乘法器(Multiplier)
④ I:支持片上断点和调试点
⑤ E:表示支持增强型DSP功能
⑥ J:表示支持Jazelle技术,即Java加速器
⑦ S:表示全合成式(full synthesizable)
这8个系列中,ARM7、ARM9、ARM9E和ARM10为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。SecurCore系列专门为安全要求较高的应用而设计。
下面简要说明它们的特点如下,要了解更详细的信息请参考ARM公司的网站(http://www.arm.com)。
(1)ARM7。
ARM7系列处理器是低功耗的32位RISC微处理器,它主要用于对成本、功耗特别敏感的产品。最高主频可以达到130MIPS,支持Thumb 16位指令集和ARM 32位指令集。
ARM7系列微处理器包括如下几种类型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ-S。其中,ARM7TMDI是目前使用最广泛的32位嵌入式RISC处理器,属低端ARM处理器核。
ARM7系列的处理器没有内存管理单元(MMU)。
(2)ARM9。
与ARM7相比,ARM9的最大差别在于:有MMU和CACHE。它的指令执行效率较ARM7有较大提高,最高主频可达到300MIPS。
ARM7系列微处理器有ARM920T和ARM922T两种类型。
(3)ARM9E。
ARM9E系列微处理器在单一的处理器内核上提供了微控制器、DSP、Java应用系统的解决方案,极大的减少了芯片的面积和系统的复杂程度。ARM9E系列微处理器提供了增强的DSP处理能力,很适合于那些需要同时使用DSP和微控制器的应用场合。
它有ARM926EJ-S、ARM946E-S、ARM966E-S、ARM968E-S和ARM996HS共5种类型。
(4)ARM10E。
ARM10E系列微处理器具有更加杰出的高性能、低功耗两个特点;由于使用了新的体系结构,它拥有所有ARM系列中最高的主频。ARM10E系列微处理器采用了一种新的省电模式,支持“64-bit load-store micro-architecture”,含有浮点运算协处理器(符合IEEE754标准,支持向量运算)。
它有ARM1020E、ARM1022E和ARM1026EJ-S共3种类型。
(5)ARM11。
ARM11系列微处理器是ARM公司近年推出的新一代RISC处理器,它是ARM新指令架构——ARMv6的第一代设计实现。ARM11的媒体处理能力和低功耗特点,特别适用于无线和消费类电子产品;其高数据吞吐量和高性能的结合非常适合网络处理应用;另外,也在实时性能和浮点处理等方面ARM11可以满足汽车电子应用的需求。可以预言,基于AMRv6体系结构的ARM11系列处理器将在上述领域发挥巨大的作用。
它有这4种类型:ARM11 MPCore,ARM1136J(F)-S,ARM1156T2(F)-S 和ARM1176JZ(F)-S。
(6)Cortex。
Cortex系列处理器是基于ARMv7架构的,分为Cortex-A、Cortex-R和Cortex-M三类。Cortex-A为传统的、基于虚拟存储的操作系统和应用程序而设计,支持ARM、Thumb和Thumb-2指令集;Cortex-R针对实时系统设计,支持ARM、Thumb和Thumb-2指令集;Cortex-M为对价格敏感的产品设计,只支持Thumb-2指令集。
(7)SecurCore。
SecurCore系列微处理器专为安全需要而设计,提供了完善的32位RISC技术的安全解决方案,因此,SecurCore系列微处理器除了具有ARM体系结构的低功耗、高性能的特点外,还具有其独特的优势,即提供了对安全解决方案的支持。
SecurCore系列微处理器有如下类型:SecurCoreSC100、SecurCore SC200。
(8)OptimoDE Data Engines。
这是一个新的IP核,针对高性能的嵌入式信号处理应用而设计。
另外,Intel公司的StrongARM、Xscale系列处理器也属于ARM架构。IntelStrongARM处理器是便携式通讯产品和消费类电子产品的理想选择,已成功应用于多家公司的掌上电脑系列产品。Xscale处理器是基于ARMv5TE体系结构的解决方案,是一款全性能、高性价比、低功耗的处理器。它支持16位的Thumb指令和DSP指令集,已使用在数字移动电话、个人数字助理和网络产品等场合。Xscale处理器也是Intel目前主要推广的一款ARM微处理器。
在嵌入式系统中选择Linux的理由
随着技术的发展及人们需求的增加,各种消费类电子产品的功能越来越强大,使得随身携带的电子设备变得“等同于PC”:上面有键盘、触摸屏、LCD等输入输出设备,可以观看视频、听音乐,可以浏览网站、接收邮件、可以查看、编辑文档等。在工业控制领域,系统级芯片(SoC)以更低廉的价格提供了更丰富的功能,使得可以在一个嵌入式系统中同时完成更多的控制功能。
当系统越来越大,应用越来越多,使用操作系统就成为一个值得考虑的选择。操作系统的作用有:统一管理系统资源,为用户提供访问硬件的接口,调度多个应用程序,管理文件系统,等等。在嵌入式领域可以选择的操作系统有很多,比如:Linux、VxWorks、Windows CE、uC/OS-II等。
VxWorks是美国WindRiver公司开发的嵌入式实时操作系统。单就性能而言,它是非常优秀的操作系统:具有可裁剪的微内核结构,高效的任务管理,灵活的任务间通讯,微秒级的中断处理,支持POSIX 1003.1b实时扩展标准,支持多种物理介质及标准、完整的TCP/IP网络协议等。缺点是它支持的硬件相对较少,并且源代码不开放,需要专门的技术人员进行开发和维护,并且授权费比较高。
Windows CE是微软公司针对嵌入式设备开发的32位、多任务、多线程的操作系统。它支持x86、ARM、MIPS、SH等架构的CPU,硬件驱动程序丰富,比如支持WiFi、USB2.0等新型设备,并具有强大的多媒体功能;可以灵活裁剪以减小系统体积;与PC上的Windows操作系统相通,开发、调试工具使用方便,应用程序的开发流程与PC上的Windows程序上的开发流程相似。就开发的便利性而言(特别是对于习惯在Windows下开发的程度员),Windows CE是最好的。但是,其源代码没有开放(目前开放了一小部分),开发人员难以进行更细致的定制;占用比较多的内存,整个系统相对庞大;版权许可费用也比较高。
uC/OS-II是Micrium公司开发的操作系统,可用于8位、16位和32位处理器。可裁剪,对硬件要求较低;可以运行最多64个任务;调度方式为抢占式,即总是运行最高优先级的就绪任务。可以获得uC/OS-II的全部代码,但它不是开放源码的免费软件,作为研究和学习,可以通过购买相关书藉获得源码;用于商业目的时,必须购买其商业授权。相对于其他按照每个产品收费的操作系统,uC/OS-II采用一次性的收费方式,可谓低廉。需要说明的是,uC/OS-II仅是一个实时内核,用户需要完成其他更多的工作,比如编写硬件驱动程序、实现文件系统操作(使用文件的话)等。
Linux是遵循GPL协议的开放源码的操作系统,使用时无需交纳许可费用。内核可任意裁剪,几乎支持所有的32位、64位CPU;内核中支持的硬件种类繁多,几乎可以从网络上找到所有硬件驱动程序;支持几乎所有网络协议;有大量的应用程序可用,从编译工具、调试工具到GUI程序,几乎都有遵循GPL协议的相关版本;有庞大的开发人员群体,有数量众多的技术论坛,大多问题基本可以得到快速而免费的解答。其缺点在于实时性,虽然2.6版本的Linux在实时性方面有较大改进,但是仍无法称为实时操作系统。有不少变种Linux在实时性方面做了很大改进,比如RTLinux达到了硬实时,TimeSys Linux提高了实时性。这些改进的Linux版本既有遵循GPL协议的免费版本,也有要付费的商业版本。
正是由于Linux开放源代码、易于移植、资源丰富、免费等优点,使得它在嵌入式领域越来越来流行。更重要的一点,由于嵌入式Linux与PC Linux源于同一套内核代码,只是裁剪的程度不一样,这使得很多为PC开发的软件再次编译之后,可以直接在嵌入式设备上运行,这使得软件资源“极大”非富,比如各类实用的函数库、小游戏等。
嵌入式Linux开发板选型
市面上的开发板五花八门,就主芯片厂家而言,有不同的公司:三星、Atmel、全志等等;就主芯片的CPU核架构而言,有:ARM9、ARM11、Cortex A8、Cortex A9等等。
如果你是软件工程师,开发板的CPU核是ARM9、ARM11、Cortex A8还是Cortex A9,对我们来说是没有差别的;差别在于芯片,不在于CPU核。
假设你是底层开发人员,写驱动并不涉及CPU的核心,只是操作CPU之外的设备,只是读写这些设备的寄存器;不同开发板的原理是相通的,差别在于寄存器操作不一样。
比如ARM9的S3C2440和ARM11的S3C6410或者是Cortex A8的SP5V210, 在操作NAND FLASH时只是去操作这些芯片的NAND FLASH控制器;根本不涉及ARM7/9或是A8的CPU核。
假设你是应用开发人员,只是在操作系统之上调用标准的库函数,操作系统帮我们把底层封装成一样的接口,无需理会具体的硬件特征。
比如手机QQ程序可以在所有的智能手机上运行;难道你会认为腾讯公司里写QQ程序的人会去了解每个手机用什么芯片吗?
以学习为目标选择开发板的原则有三点:芯片资料开放程序、现有学习资料的丰富程度、芯片性能。
综合考虑,我们推荐三星公司、全志公司的相关开发板。
对于三星,论资料的丰富首推ARM9芯片s3c2440开发板,比如JZ2440、MINI2440;论性能强悍推荐Cortex A9四核Exynos 4412开发板,友善之臂公司出了不同配置的4412开发板。
对于全志,有Cortex A7双核的A20开发板,比如cubieboard2、cubieboard3(又名cubietruck)。
就百问网团队的学习经历来说,我们如此建议:
1. 先用S3C2440开发板入门,根据现有的资料完全可以掌握到工作所需的技能
2. 再选择一款Cortex A7/A8/A9系列的开发板,把在2440上所涉及的软件在新板上自己写出来──只有在新板上自己写出代码,才算是学到家。
对于第2点,是选择三星的4412还是全志的cubieboard,我们有如下建议:
1. 论性能是4412强,但是cubieboard也不差
2. 论开源社区的资料丰富程序,是cubieboard强
3. 如果你最终是要做产品,4412适用于成本高、性能强的产品
全志A20适用于成本低的场合,是目前国产平板的主流芯片。
小结
本文首先介绍嵌入式系统的概念,读者可以了解到嵌入式系统就在我们周围。在硬件方面,从单片机发展到的系统级芯片;在软件方面,从以前由某个行业的专家单打独斗编写非常专用的代码,发展到了基于操作系统、充分利用各种现有资源开发方法,它与开发PC软件已经非常相似。在文章的最后,首先介绍嵌入式处理器特别是ARM处理器的一些常识,然后比较了运行在它上面的各类嵌入式操作系统。
以上为嵌入式开发中嵌入式系统的应用现状及技术发展水平,希望能够帮助大家。