一、定义

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用 户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能

嵌入式系统一般指非 PC 系统,它包括硬件和软件两部分。硬件包括处理器/微处理器存储器及外设器件和 I/O 端口、图形控制器等。软件部分包括操作系统软件(OS)(要求实时和多任务操作)和应用程序编程。有时设计人员把这两种软件组合在一起。应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。

二、基础知识

1、软件方面的知识

(1)嵌入式微处理器结构与应用

或传统的 “微机原理接口” 课程,嵌入式是软硬件结合的技术,搞嵌入式系统的人应对ARM 处理器工作原理和接口技术有充分了解,包括汇编指令系统。不了解处理器原理,就没办法写出驱动程序。在嵌入式开发的一些关键部分,如 Bootloader 等,主要靠汇编写程序。

(2)嵌入式操作系统类课程

从事嵌入式系统的人至少须掌握一个嵌入式操作系统(当然越多越好),目前最重要的 RTOS 主要包括:

  • 传统的经典 RTOS:最主要的是 Vxworks 操作系统,以及其 Tornado 开发平台。Vxworks 出现早,实时性很强,并且内核可极微,可靠性较高。特别在通信设备等实时性要求较高的系统中,有比较广泛的应用。
  • 嵌入式 Linux 操作系统:嵌入式 Linux 广泛应用的原因当然是免费、开源、支持软件多、支持者多,成本也低。
  • Windows CE嵌入式操作系统:Windows CE 是微软的操作系统,也有很大的市场份额,特别是在 PDA、手机等界面要求较高或者要求快速开发的场合。

(3)嵌入式开发的其它相关软件课程

  • 数字图像压缩技术:嵌入式最热门的应用领域之一,要掌握 MPEG 编解码算法和技术,如 DVD、MP3、PDA、高清电视、机顶盒等都涉及 MPEG 高速解码问题。
  • 通信协议及编程技术:大多数嵌入式设备都要连入局域网或 Internet,所以首先应掌握TCP/IP协议及其编程;另外,掌握无线通信协议及编程也是是很重要的。

2、硬件方面的知识

嵌入式本身就是从单片机发展过来的,如今很多单片机都已经带 OS,嵌入式开发领域,驱动人才非常缺乏。写驱动必须掌握操作系统的内部工作原理,包括相关的硬件知识,即所谓的软硬通吃,所以这方面的人才是一将难求。

三 、特点

嵌入式计算机系统同通用型计算机系统相比具有以下特点:
1. 嵌入式系统通常是面向特定应用的嵌入式 CPU 与通用型的最大不同就是嵌入式 CPU 大多工作在为特定用户群设计的系统中,它通常都具有低功耗、体积小、集成度高等特点,能够把通用 CPU 中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密。

  1. 嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。

  2. 嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选择更具有竞争力。

  3. 嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。

  4. 为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。

  5. 嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发。

四 、要素

1、嵌入式处理器

嵌入式系统的功能软件集成于硬件系统之中,系统的应用软件与硬件一体化。在嵌入式系统的硬件设备中,嵌入处理器是整个系统的核心部件,其性能的好坏直接决定整个系统的运行效果。Pc 机销售市场中,随着通用 cPu 技术的突破和工作频率的倍增,旧款低档 cPu 早已经不见踪迹。嵌入式系统开发面向具体应用,不同领域的应用市场需要不同款式和性能指标的处理器来开发,于是在嵌入式处理器市场中,中低端的 4 位、8 位和 l6 位处理器依然存在,高性能的32 位处理器也有很多产品。随着超大规模集成电路技术和微电子技术发展,包含嵌入式处理器以及部分外围电路的微控制器产品也进入市场,片上系统 soc(system on chip) 产品也开始出瑚。这些产品的上市,不仅丰富了嵌入式处理器产品,而且也更加方便了工程技术人员进行嵌入式系统的技术开发和扩大嵌入式产品的应用领域。

由于嵌入式系统应用需求的多样性,市场上基于 RIsc 结构的嵌入式处理器提供商也日渐增多。统计数字表明,1999 年底市场销售额排在前三位的公司分别是 ARM、Motor01a 和 MIPs,其中 ARM 公司的芯片销售量达 1.5 亿个,市场份额超过 50%。面对这样的嵌入式处理器市场,开发设计人员应该如何选择呢? 这里有两个前提条件。一是深入研究具体的嵌入式系统应用需求,充分的应用需求分析后获取应用系统的性能指标。面向应用是嵌入式系统的特色,具体的应用需求决定着嵌入式处理器的性能选型。在工业控制等特殊领域,系统需求分析员不仅需要和工作人员、上级主管亲自面谈,而且要到工作现场获取第一手信息,收集充分的资料。应用需求分析后、需要定义产品具备的基本功能和性能指标,如系统处理的数据量大小和处理实时性要求、系统正常运行时的工作环境、系统运行过程中可能遇到的突发事件、系统的尺寸大小和功耗指标等。第二个前提条件是.分析研究市场上各大厂商提供的各款嵌入式处理器的性能指标,如功耗、体积、成本、可靠性、速度、处理能力、电磁兼容性等 c 这些参数也是各个半导体芯片厂商之间竞争的热点。

开发人员通过应用需求分析获取了产品的功能性和非功能性指标,研究了市场上嵌入式处理器的性能参数后,能够对嵌入式处理器作出较好的选择。嵌入式处理器选择的基本原则是满足具体功能性和非功能性指标需求的、市场应用反应良好的、硬件配置最少的嵌入式处理器。如简单的智能仪器仪表设计考虑使用 4 位或者 8 位低档单片机 8051;和数字信号处理密切相关的选用 TI 公司的 TMx320x 系列的 DsP(数字信号处理) 芯片;如果产品偏重于通信功能,考虑 Motorola 公司的嵌入式处理器 68K 系列;如果产品功能比较齐全,可选用嵌入式处理器领域的后起之秀 ARM 公司的高性能嵌入式处理器ARM 芯片系列等。除了上述的产品性能需求因素,选择嵌入式处理器时也需要考虑开发人员对此系列处理器的熟悉程度 c 因为不同公司开发的嵌入式处理器差别较大,从一类处理器转移到另一类处理器的难度比同一系列不同处理器间的转移难度大得多,风险多得多 [1] 。

2、 实时操作系统

以嵌入式处理器为中心,开发人员搭建好硬件电路时仅提供了裸机运行平台,要使整个系统有限的硬件资源充分利用起来,还需要 (嵌入式) 实时操作系统 RTOs(RealTimeoperatingsystem)的软件支持。RTos 与一般商用多任务 os(如 unix、windows 以及 LInux 等 j 有共同的… 面,也有不同的一面。商用多任务 os 主要目的是方便用户管理计算机资源和追求系统资源的最大利用率;而 RTOs 重点追求的是实时性、可确定性、可靠性,当然也包括有限资源的管理。一般 RTOs 内核都很小,在几 KB~十几 KB 之间。流行的 RTOs 基本上都支持基于优先级的抢占式调度策略和时间片轮转,具有微内核结构,有标准组件可供选用.支持虚拟存储技术和存储保护机制。

由于具体嵌入式应用的功能需求差异以及不同 RTOs 问不同的性能指标,RTOs 的选择有三种方案:

  • 一是根据应用需要和公司技术实力,考虑自主开发研究 (国内手机厂商宁渡波导公司部分款式的手机操作系统就是自主开发的);
  • 二是充分考虑系统需求和流行 RTos 的性能指标及性价比选择商用 RTOs,如 wIncE、Vxworks 等;
  • 三是考虑嵌入式 Linux(RTLinux),RTLjnux 是开放源代码的免费自由软件,互联网技术论坛较多,具备较好的裁减性以支持不同的应用范畴。

当前全球范围内商用 RTos 多达 200 多种,应用领域的多样性使得市场反应较好的也将近有十几种,如 Vxworks、psOs、Nucleus、QNx、wincE 以及中科院软件研究中心研制的 Hopen 等。这些不同名称的 RTOs,核心软件差异微妙而且难以琢磨,选择时重点是考虑它们的性能评价指标,主要包括调度算法、RTOs 本身内存开销、RTOs 内存管理模式、最大中断禁止时间和最大任务切换时间。当然,也包括 RTOs 的购买成本和提供的技术支持等相关因素。针对实时性要求较高的应用,需要重点考虑 RTOs 的最大中断禁止时间和最大任务切换时问。这两个参数越小越好。减小这两个参数值,除了选用较高工作主频的嵌入式处理器外,还和 RTOs 本身任务调度和中断处理机制密切相关。选择 RTOs 时,通常还要考虑系统功能方面支持何种处理器硬件平台,何种 API,是否支持核心态用户态、是否支持内存管理单元 MMu、可移植性、调试支持、标准支持等。如果开发网络应用,还需要考虑该 RTOs 是否支持 TCP/IP 的网络组件和 I/O 服务等。如果开发游戏和娱乐市场,要着重研究该 RTos 对多媒体的支持能力。市场应用需求的多样性,使得 RTOs 本身应该支持用户自定制能力,根据应用需要在微内核的基础上选用标准组件。

3、仿真器和调试器

调试是嵌入式系统开发过程的重要环节。嵌入式系统开发调试和一般 pc 系统开发调试有较大差别。在一般 Pc 机系统开发中,调试器和被调试程序是运行在相同的硬件和软件平台上的两个进程,而在嵌入式系统中,调试器是运行在桌面操作系统上的应用程序,被调试程序是运行在基于特定硬件平台的操作系统,两个程序问需要实时通信。嵌入式系统调试时,主机上运行的集成开发调试工具 (调试器) 通过仿真器和目标机相连 a 仿真器处理宿主机和目标机之间所有的通信,这个通信口可以是串并行口或者高速以太网接口。仿真器通过 JTAG 口和目标机相连。

嵌入式系统开发调试方法有快速原型仿真法和实时在线调试法。快速原型仿真法用于硬件设备尚未完成时,直接在宿主机上对应用程序运行进行仿真分析。在此过程中系统不直接和硬件打交道,由开发调试软件内部某一特定软件模块模拟硬件 cPu 系统执行过程,并可同时将仿真异常反馈给开发者进行错误定位和修改。实时在线调试法在具体的目标机平台上调试应用程序.系统在调试状态下的执行情况和实际运行模式完全一样,这种方式更有利于开发者实时对系统硬件和软件故障进行定位和修改,提高产品开发速度。选用的调试器是运行在主机上的集成开发环境一般需要集编辑、汇编、编译、链接和调试环境于一体,支持低级汇编语言、c 和 c++ 语言,基于友好的图形用户界面(GuI),支持用户观察或修改嵌入式处理器的寄存器和存储器配置、数据变量的类型和数值,堆栈和寄存器的使用,支持程序断点设置,单步、断点豉者全速运行等特性。应用需求的多样性导致市场上仿真器和调试器的提供商也较多,windriver 公司的 Tornado 是一个很好的开发调试工具。根据实践经验,一般配套选择规模较大、信誉较好公司的仿真器和调试器,虽然价格偏高,但是这些公司技术实力强,售后服务好,调试器和仿真器开发结合紧密。如果在开发调试过程遇到技术障碍,可以通过电话或者电子邮件方式及时获取技术支持。如选用 ARM 系列的嵌入式处理器时,可以购买 Multi—IcE 仿真器.并附加 ARM250 集成开发调试环境等。

4、开发队伍的技术水平和结构比例

嵌入式系统开发中选择好了嵌入式处理器、RTOs、仿真器和调试器等设备外,还需要考虑开发队伍的技术水平和结构比例。经验丰富的开发小组都深有体会:民用产品开发中,产品能够在预计的时间内进入市场赢得效益,其整个技术范围内新技术比例至多只能达到 20%,超过这个界限,估算的时间期限可能会出现较大偏差。从高层规划人员的角度分析:20% 以内的新技术,公司可以集中力量,投入足够多的人力、物力和财力进行突破性研究,正常情况下可以达到满意效果。如果新技术超出 20% 这个范围,恐怕心有余而力不足。公司运作以市场作为向导,是市场赋予它们生命。

公司看重市场,付出的劳动有市场回报才能正常运转。公司在开发过程中一般都尽量避免风险,而且整个开发过程中始终将风险分析作为重要的参考因素。公司一般都选择保守的开发模式,基于当前开发人员的技术实力和已经达到的技术储备,在许多种备选方案的技术论证过程,充分分析成本收益、风险大小、投入资源、开发人员的技术水平等因素,全面考虑,权衡利弊,尽量选用可靠的,风险小的设计方案。在项目开发中,分配开发人员时不仅要确保任务在给定时间期限内完成的成功性,而且也要体现在锻炼培养后继人才方面。任何项目的开发,依据需求分析后,经过概要设计和详细设计,都会形成模块化结构,其工作难度也有一定的层次性。这样,公司在选派项目人员时,需要合理的人员结构安排,现在~般公认的人才结构比例是 1(博士或同等学历)3(硕士或同等学历):7(学士、大专或同等学历)。在项目开发中,除了开发人员的技术水平和结构比例外,小组内部的民主化、科学化管理决策也是很重要的环节。

五、核心技术

1、嵌入式系统开发处理器技术

处理器技术与实现系统功能的计算引擎结构有关,很多不可编程的数字系统也可以视为处理器,这些处理器的差别在于其面向特定功能的专用化程度,导致其设计指标与其它处理器不同。

(1)通用处理器

这类处理器可用于不同类型的应用,一个重要的特征就是存储程序,由于设计者不知道处理器将会运行何种运算,所以无法用数字电路建立程序。另一个特征就是通用的数据路径,为了处理各类不同的计算,数据路径是通用的,其数据路径一般有大量的寄存器以及一个或多个通用的算术逻辑单元。设计者只需要对处理器的存储器编程来执行所需的功能,即设计相关的软件。 在嵌入式系统中使用通用处理器具有设计指标上的一些优势。提前上市时间和 NRE 成本较低,因为设计者只需编写程序,而不需要做任何数字设计,灵活性高,功能的改变通过修改程序进行即可。与自行设计处理器相比,数量少时单位成本较低。

当然,这种方式也有一些设计指标上的缺陷,数量大时的单位成本相对较高,因为数量大时,自行设计的 NRE 成本分摊下来,可降低单位成本。同时,对于某些应用,性能可能很差。由于包含了非必要的处理器硬件,系统的体积和功 耗可能变大。

(2)单用途处理器

单用途处理器是设计用于执行特定程序的数字电路,也指协处理器、加速器、外设等。如 JPEG编码解码器执行单一程序,压缩或解压视频信息。嵌入式系统设计者可通过设计特定的数字电路来建立单用途的处理器。设计者也可以采用预先设计好的商品化的单用途处理器。

在嵌入式系统中使用单用途处理器,在指标上有一些优缺点。这些优缺点与通用处理器基本相反,性能可能更好,体积与功率可能较小,数量大时的单位成本可能较低,而设计时间与 NRE 成本可能较高,灵活性较差,数量小时的单位成本较高,对某些应用性能不如通用处理器。

(3)专用处理器

专用指令集处理器(ASIP)是一个可编程处理器,针对某 一特定类型的应用进行最优化。这类特定应用具有相同的特征,如嵌入式控制、数字信号处理等。在嵌入式系统中使用 ASIP 可以保证良好的性能、功率和大小的 情况下,提供更大的灵活性,但这类处理器仍需要昂贵的 NRE 成本建立处理器本身和编译器,单片机数字信号处理器是两类应用广泛的 ASIP,数字信号处理器是一种针对数字信号进行常见运算的微处理器,而单片机是一种针对嵌入式控制应用进行最佳化的微处理器,通常控制应用中的常见外设,如串行通信外设、定时 器、计数器、脉宽调制器及数 / 模转换器等都集成到了微处理器芯片上,从而使得产品的体积更小、成本更低。

2、嵌入式系统开发 IC 技术

(1)全定制 / VLSI
在全定制 IC 技术中,需要根据特定的嵌入式系统的数字实现来优化各层,设计人员从晶体管的版图尺寸、位置、连线开始设计以达到芯片面积利用率高、速度快、功耗低的最优化性能。利用掩膜在制造厂生产实际芯片,全定制的 IC 设计也常称为大规模集成电路设计, 具有很高的 NRE 成本、很长的制造时间,适用于大量或对性能要求严格的应用。

(2)半定制 ASIC
半定制 ASIC 是一种约束型设计方法,包括门阵列设计法和 标准单元设计法。它是在芯片制作好一些具有通用性的单元元件和元件组的半成品硬件,设计者仅需要考虑电路的逻辑功能和各功能模块之间的合理连接即可。这种设计方法灵活方便、性价比高,缩短了设计周期,提高了成品率。

(3)可编程 ASIC
可编程器件中所有各层都已经存在,设计完成后,在实验室里即可烧制出设计的芯片,不需要 IC 厂家参与,开发周期显著缩短。 可编程 ASIC 具有较低的 NRE 成本,单位成本较高,功耗较大,速度较慢。

3、嵌入式系统开发设计 / 验证技术

嵌入式系统的设计技术主要包括硬件设计技术和软件设计技术两大类。其中,硬件设计领域的技术主要包括芯片级设计技术和电路板级设计技术两个方面。

芯片级设计技术的核心是编译 / 综合、库 / IP、测试 / 验证。编译 / 综合技术使设计者用抽象的方式描述所需的功能,并自动分析和插入实现细节。库 / IP 技术将预先设计好的低抽象级实现用于高级。测试 / 验证技术确保每级功能正确,减少各级之间反复设计的成本。

六、开发流程

第一步:建立开发环境
操作系统一般使用 Redhat Linux,选择定制安装或全部安装,通过网络下载相应的 GCC交叉编译器进行安装 (比如,arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的相关交叉编译器;

第二步:配置开发主机
配置 MINICOM,一般的参数为波特率 115200 Baud/s,数据位 8 位,停止位为 1,9,无奇偶校验,软件硬件流控设为无。在 Windows 下的超级终端的配置也是这样。MINICOM 软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络主要是配置 NFS 网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。

第三步:建立引导装载程序 BOOTLOADER
从网络上下载一些公开源代码的 BOOTLOADER,如 U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT 等,根据具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如,三星的 ARV17、ARM9 系列芯片,这样就需要编写开发板上 FLASH 的烧写程序,可以在网上下载相应的烧写程序,也有 Linux 下的公开源代码的 J-FLASH 程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果用户购买了厂家的仿真器比较容易烧写 FLASH,虽然无法了解其中的核心技术,但对于需要迅速开发自己的应用的人来说可以极大提高开发速度。

第四步:下载已经移植好的 Linux 操作系统
如 MCLiunx、ARM-Linux、PPC-Linux 等,如果有专门针对所使用的 CPU 移植好的 Linux 操作系统那是再好不过,下载后再添加特定硬件的驱动程序,然后进行调试修改,对于带 MMU 的 CPU 可以使用模块方式调试驱动,而对于 MCLiunx 这样的系统只能编译内核进行调试。

第五步:建立根文件系统
下载使用 BUSYBOX 软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。由于默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于 / etc 目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile 等,自动挂装文件系统的配置文件 / etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用 mkcramfs genromfs 等工具产生烧写映像文件。

第六步:建立应用程序的 FLASH 磁盘分区
一般使用 JFFS2 或 YAFFS 文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性 FLASH(NOR 型)512KB~32MB,有的系统使用非线性 FLASH(NAND 型)8MB~512MB,有的两个同时使用,需要根据应用规划 FLASH 的分区方案。

第七步:开发应用程序
可以放入根文件系统中,也可以放入 YAFFS、JFFS2 文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,这有点类似于μC/OS-II 的方式。

第八步:烧写内核
根文件系统和应用程序,发布产品。

参考资料