嵌入式Linux C语言应用开发教程(移动学习版 第2版)
上QQ阅读APP看书,第一时间看更新

1.1 嵌入式系统概述

1.1.1 嵌入式系统的基本概念

在社会日益信息化的今天,计算机和网络的应用已经全面渗透到日常生活中。应用嵌入式系统的电子产品随处可见,如日常使用的手机、摄像机、医疗仪器、汽车,乃至工业控制、航天、航空等设备都要用到嵌入式系统。在一些发达国家,平均每个家庭拥有255个嵌入式系统,如每辆汽车平均装有35个嵌入式系统。嵌入式系统的应用已涉及工业、军事、宇宙、通信、运输、金融、医疗、气象、农业等众多领域。

在嵌入式系统行业内有一个被普遍接受的定义:嵌入式系统是以应用为中心,以计算机控制系统为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。笔者认为,将一套计算机控制系统嵌入已具有某种完整的特定功能的系统内,以实现对原有系统的计算机控制,此时将这个计算机控制系统叫作嵌入式系统。简单地说,嵌入式系统就是被嵌入电子设备中的专用计算系统。

嵌入式系统通常由特定功能模块和计算机控制模块组成,主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用软件等部分组成。它具有“嵌入性”“专用性”与“计算机系统”三个基本要素。嵌入式系统的特点如下。

(1)面向特定应用。嵌入式系统与通用型系统的最大区别就在于嵌入式系统大多工作在为特定用户群设计的系统中,因此它通常都具有功耗低、体积小、集成度高等特点,并且可以满足不同应用的特定需求。

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

(3)嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、不断创新的知识集成系统,从事嵌入式系统开发的人才也必须是复合型人才。

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

(5)嵌入式开发的软件代码尤其要求高质量、高可靠性,由于嵌入式设备往往是处在无人值守或条件恶劣的环境中,因此,对其代码必须有更高的要求。

(6)嵌入式系统本身不具备二次开发功能,即设计完成后,用户通常不能在该平台上直接修改程序,必须有一套开发工具和环境才能进行再次开发。

1.1.2 嵌入式系统的体系结构

图1.1 嵌入式系统的组成

嵌入式系统是一类特殊的计算机系统,一般包括硬件设备、嵌入式操作系统和应用软件。它们之间的关系如图1.1所示。

硬件设备包括嵌入式处理器和外围设备。其中的嵌入式处理器(CPU)是嵌入式系统的核心部分,它与通用处理器最大的区别在于,嵌入式处理器大多工作在为特定用户群专门设计的系统中,它将通用处理器中许多由板卡完成的任务集成到芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。如今,全世界的嵌入式处理器已经超过1000多种,流行的体系结构有30多个系列,其中以ARM、PowerPC、MC 68000、MIPS等使用得最为广泛。

外围设备是指嵌入式系统中用于完成存储、通信、调试、显示等辅助功能的其他部件。目前常用的嵌入式外围设备按功能可以分为存储设备(如RAM、SRAM、Flash等)、通信设备(如RS-232接口、SPI接口、以太网接口、USB接口、无线通信等)和显示设备(如显示屏等)3类。

嵌入式操作系统不仅具有通用操作系统的一般功能,如向上提供对用户的接口(如图形界面、库函数API等),向下提供与硬件设备交互的接口(硬件驱动程序等),管理复杂的系统资源,同时,它还在系统实时性、硬件依赖性、软件固化性以及应用专用性等方面,具有更加鲜明的特点。

应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到用户预期目标的计算机软件。嵌入式系统自身的特点,决定了嵌入式应用软件不仅要求满足准确性、实时性、安全性和稳定性等方面需要,而且要尽可能地优化代码,以减少对系统资源的消耗,降低硬件成本。

1.1.3 几种常用的嵌入式操作系统

1.嵌入式Linux

嵌入式Linux(Embedded Linux)是指对标准Linux经过小型化裁剪处理之后,能够固化在容量只有几KB或者几MB的存储器芯片或者单片机中,适合于特定嵌入式应用场合的专用Linux操作系统。在目前已经开发成功的嵌入式系统中,大约有一半使用Linux。这与它自身的优良特性是分不开的。

嵌入式Linux同Linux一样,具有低成本、多种硬件平台支持、优异的性能和良好的网络支持等优点。另外,为了更好地适应嵌入式领域的开发,嵌入式Linux还在Linux基础上做了部分改进,介绍如下。

(1)改善内核结构

Linux内核采用的是整体式结构(Monolithic),整个内核是一个单独的、非常大的程序,这样虽然能够使系统的各个部分直接沟通,提高系统响应速度,但与嵌入式系统存储容量小、资源有限的特点不相符。因此,嵌入式系统经常采用的是另一种称为微内核(Microkernel)的体系结构,即内核本身只提供一些最基本的操作系统功能,如任务调度、内存管理、中断处理等,而类似于设备驱动、文件系统和网络协议等附加功能则可以根据实际需要进行取舍。这样就大大减小了内核的体积,便于维护和移植。

(2)提高系统实时性

由于现有的Linux是一个通用的操作系统,虽然它也采用了许多技术来加快系统的运行和响应速度,但从本质上来说并不是一个嵌入式实时操作系统。因此,利用Linux作为底层操作系统,在其上进行实时化改造,从而构建出一个具有实时处理能力的嵌入式系统,如RT-Linux已经成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等各种领域。

嵌入式Linux同Linux一样,也有众多的版本,其中不同的版本分别针对不同的需要在内核等方面加入了特定的机制。嵌入式Linux的主要版本如表1.1所示。

表1.1 嵌入式Linux的主要版本

为了不失一般性,本书所用的嵌入式Linux是标准内核裁减的Linux,而不是表1.1中的任何一种。

2.μC/OS-II

μC/OS-II是一种免费公开源代码、结构小巧、基于优先级的可抢先的硬实时内核。自从1992年问世以来,在世界各地应用广泛,它是一种专门为嵌入式设备设计的内核,目前已经被移植到40多种不同结构的CPU上,运行在8~64位的各种系统之上。尤其值得一提的是,该系统自从2.51版本之后,就通过了美国FAA认证,可以运行在诸如航天器等对安全要求极为苛刻的系统之上。鉴于μC/OS-II可以免费获得代码,对于嵌入式RTOS而言,选择μC/OS无疑是最经济的。

μC/OS-II主要适合小型实时控制系统,具有执行效率高、占用空间小、实时性能优良和可扩展性强等优点。最小内核可编译至2KB,如果包含内核的全部功能,编译之后的μC/OS-II内核仅有6KB~10KB。

μC/OS-II的源代码结构合理、清晰易读,不仅成功应用在众多的商业项目中,而且被很多大学采纳,作为教学的范例,同时也是嵌入式工程师学习和提高的绝好材料。

3.VxWorks

VxWorks操作系统是美国Wind River公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它是当前市场占有率很高的嵌入式操作系统之一。VxWorks的实时性做得非常好,其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,这使得它们造成的延迟很短。另外VxWorks提供的多任务机制,对任务的控制采用了优先级抢占(Linux 2.6内核也采用了优先级抢占的机制)和轮转调度机制,这充分保证了可靠的实时性,并使同样的硬件配置能满足更强的实时性要求。另外VxWorks具有高度的可靠性,从而保证了用户工作环境的稳定。同时,VxWorks还有完备强大的集成开发环境,这也大大方便了用户的使用。

但是,VxWorks的开发和使用都需要交纳高额的专利费,大大增加了用户的开发成本。同时,VxWorks的源码不公开造成它部分功能的更新(如网络功能模块)滞后。

4.Windows CE

Windows CE是微软开发的一个开放的、可升级的32位嵌入式操作系统,是基于掌上型计算机类的电子设备操作系统。Windows CE的图形用户界面相当出色。Windows CE具有模块化、结构化和基于Win32应用程序接口以及与处理器无关等特点。它不仅继承了传统的Windows图形界面,并且用户在Windows CE平台上可以使用Windows上的编程工具(如Visual Studio等),也可以使用同样的函数和同样的界面风格,这使大多数Windows上的应用软件只需简单地修改和移植,就可以在Windows CE平台上继续使用。

1.1.4 嵌入式系统发展趋势

1.提供强大的网络服务

为适应嵌入式分布处理结构和应用上网需求,面向21世纪的嵌入式系统要求配备标准的一种或多种网络通信接口。针对外部联网要求,嵌入设备必须配有通信接口,相应需要TCP/IP协议簇软件支持;为满足家用电器相互关联(如防盗报警、灯光能源控制、影视设备和信息终端交换信息等)及实验现场仪器的协调工作等要求,新一代嵌入式设备还需具备IEEE 1394、USB、CAN、Bluetooth或IrDA通信接口,同时也需要提供相应的通信组网协议软件和物理层驱动软件。为了支持应用软件的特定编程模式,如Web或无线Web编程模式,还需要相应的浏览器,如HTML浏览器、WML浏览器等。

2.小型化、低成本、低功耗

为满足这种特性,要求嵌入式产品设计者相应降低处理器的性能,限制内存容量和复用接口芯片。这就相应提高了对嵌入式软件设计技术的要求,如选用最佳的编程模型和不断改进算法,采用Java编程模式,优化编译器性能等。因此,既需要软件人员具有丰富的开发经验,也需要发展先进的嵌入式软件技术,如Java、Web和WAP等。

3.人性化的人机界面

用户之所以乐于接受嵌入式设备,其重要因素之一是它们与使用者之间的亲和力。它具有自然的人机交互界面,如司机操纵高度自动化的汽车主要还是通过已使用习惯的方向盘、脚踏板和操纵杆。人们与信息终端交互要求以GUI屏幕为主的多媒体界面。手写文字输入、语音拨号上网、收发电子邮件及彩色图形、图像已取得成效。目前一些PDA在显示屏幕上已实现汉字写入、短消息语音发布,但离掌式语言同声翻译还有很大距离。

4.完善的开发平台

随着Internet技术的成熟、带宽的提高,互联网内容提供商(Internet Content Provider, ICP)和应用服务提供商(Application Service Provider, ASP)在网上提供的信息内容日趋丰富、应用项目多种多样,像移动电话、固定电话及电冰箱、微波炉等嵌入式电子设备的功能不再单一,电气结构也更为复杂。为了满足应用功能的升级,设计者一方面采用更强大的嵌入式处理器,如32位、64位RISC芯片或数字信号处理器(Digital Signal Processer, DSP)增强处理能力;同时还采用实时多任务编程技术和交叉开发工具技术来控制功能复杂性,简化应用程序设计、保障软件质量和缩短开发周期。