1.1 嵌入式系统
1.1.1 嵌入式系统的定义
随着科学技术的高速发展,嵌入式设备在我们的生产生活中占据越来越重要的地位。从厨房的电饭煲、微波炉、电冰箱到客厅的家庭多媒体中心,嵌入式设备已经遍布我们的周围。现在,嵌入式设备已经成为信息技术产业的重点技术,为当今社会带来了巨大的工业产值。目前,嵌入式系统的应用主要分布在电信、医疗、汽车电子、安全和消费等领域。而恰恰由于这种范围的扩大,使得“嵌入式系统”更加难以明确定义。
根据IEEE(电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(devices used to control,monitor,or assist the operation of equipment,machinery or plants)。从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。
目前,普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可配置、适应应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、才更具有优势。因此可以这样理解上述三个面向的含义,即嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的裁减利用。
嵌入式系统是一种专用计算机系统,它和通用计算机系统使用的技术是一样的,都包含硬件和软件两部分,但对两者的性能评价指标是不同的。嵌入式系统往往只是一个大系统中的组成部分,控制大系统的工作,它的价值在于它所控制的大系统。
嵌入式系统主要由嵌入式硬件系统和嵌入式软件系统组成。
嵌入式硬件系统主要包括嵌入式处理器、存储器、外围接口电路与接插件、模拟电路和电源部分等。嵌入式处理器是嵌入式系统的核心,是控制、辅助系统运行的硬件单元。目前,常用的嵌入式外围接口电路主要有串口、以太网接口、USB接口、音频接口、液晶显示屏、摄像头等。针对不同的应用,具体的嵌入式设备所需的外围接口电路不同。
嵌入式软件系统包括底层驱动、操作系统软件和应用程序等。底层驱动用于实现嵌入式系统硬件和软件之间的接口,操作系统实现系统的进程调度、任务处理,应用程序实现系统功能的应用。应用程序是根据具体的应用环境由设计人员自行编写的,有时设计人员会把操作系统和应用软件两部分组合在一起:应用软件控制系统的运作和行为,操作系统控制应用程序与硬件的交互。
1.1.2 嵌入式系统的特点
近年来掀起了嵌入式系统应用热潮的原因主要有两个方面:一方面是芯片技术的发展,使得单个芯片具有更强的处理能力,而且使集成多种接口已经成为可能,众多芯片生产厂商已经将注意力集中在这方面。另一方面的原因就是应用的需要,由于对产品可靠性、成本、更新换代要求的提高,使得嵌入式系统逐渐从纯硬件实现和使用通用计算机实现的应用中脱颖而出。
与通用计算机系统相比,嵌入式系统一般具有如下特点:
① 系统内核小。由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多。
② 专用性强。嵌入式系统的个性化很强,一般要针对硬件进行系统的移植,即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。
③ 系统精简。嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样利于控制系统成本,同时也利于实现系统安全。
④ 高实时性系统软件需求。嵌入式系统软件需要高实时性以实现任务调度、资源分配等功能。
⑤ 面向特定的应用。与通用CPU相比,嵌入式的CPU是为特定用户群设计的。如ARM系列CPU多用于手机产品开发。应用需求决定了嵌入式系统的设计,而决定嵌入式应用环境的主要因素是其提供的接口功能和处理速度。
⑥ 嵌入式系统需要专门的软、硬件开发工具和环境。由于其本身不具备自主开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软、硬件设备,以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。
1.1.3 嵌入式实时操作系统概述
操作系统的基本思想是隐藏底层不同硬件的差异,向在其上运行的应用程序提供一个统一的调用接口。应用程序通过这一接口实现对硬件的使用和控制,不必考虑不同硬件操作方式的差异。
嵌入式操作系统(Embedded Operation System,EOS)是一种专用于嵌入式设备的操作系统。EOS负责嵌入系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化及应用的专用性等方面具有较为突出的特点。嵌入式操作系统核心通常要求体积很小,因为硬件ROM容量有限,除了应用程序之外,不希望操作系统占用太大的存储空间。
嵌入式实时操作系统是嵌入式操作系统最主要的组成部分。实时操作系统是指具有实时性,能从硬件方面支持实时控制系统工作的操作系统。其中实时性是第一要求,需要调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重点是要满足对时间的限制和要求。下面将介绍两种嵌入式实时操作系统。
1.μC/OS-Ⅱ
μC/OS是Jean J.Labrosse在1990年前后编写的一个嵌入式多任务实时操作系统。经过近10年的应用和修改,在1999年Jean J.Labrosse推出了μC/OS-Ⅱ,并在2000年得到了美国联邦航空管理局对用于商用飞机的、符合RTCA/DO178B标准的认证,从而证明μC/OS-Ⅱ具有足够的稳定性和安全性。
μC/OS-Ⅱ是一个可裁减、源代码开放、结构小巧、可抢占式的实时多任务内核,是专为微控制器系统和软件开发而设计的,是控制器启动后首先执行的背景程序,并作为整个系统的框架贯穿系统运行的始终。它具有执行效率高、占用空间小、可移植性强、实时性能良好和可扩展性强等特点。采用μC/OS-Ⅱ实时操作系统可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应,而且采用实时操作系统,降低了程序的复杂度,方便程序的开发和维护。
严格来讲,μC/OS-Ⅱ只是一个实时操作系统内核,它仅仅包含了任务调度、任务管理、时间管理、内存管理和任务间通信与同步等基本功能,没有提供输入/输出管理、文件管理、网络等额外的服务。但由于μC/OS-Ⅱ良好的可扩展性和源码开放,这些功能完全可以由设计人员根据需求自己实现。
μC/OS-Ⅱ获得广泛使用不仅是因为它的源码开放,还有它较强的可移植性。μC/OS-Ⅱ的代码大部分是用C编写的,只有与处理器硬件相关的一部分代码是用汇编编写的。μC/OS-Ⅱ在最初设计时即考虑了系统的可移植性,为其广泛应用奠定了良好的基础。
2.实时线程操作系统
实时线程操作系统(RT-Thread)是一款来自国内的开源实时操作系统,并且商业许可证非常宽松,由国内RT-Thread开发团队进行开发与维护。它不仅是一款高效、稳定的实时操作系统内核,也是一套面向嵌入式系统的软件平台。起初RT-Thread只有一个实时的内核,但在发展过程中,RT-Thread实时操作系统得到了来自全国嵌入式开发工程师的鼎力支持,为RT-Thread添砖加瓦,现在它已慢慢变成一个完善的、全功能的操作系统。目前,RT-Thread已经被国内十多所企业所采用,被证明是一款能够稳定持续运行的操作系统。
RT-Thread不仅是一个单一的实时操作系统内核,它也是一个完整的应用系统,包含了嵌入式系统相关的各个组件:TCP/IP协议栈,文件系统,图形用户界面RTGUI,Finsh Shell等。
RT-Thread内核部分包括了RT-Thread的核心代码,包括对象管理器,线程管理及调度,线程间通信等的微小内核实现。内核C库是为了保证内核能够独立运作的一套小型C库(在RealView MDK等系统自带部分C库函数的情况下,这部分不会被使能)。CPU及板级支持包包含了RT-Thread支持的各个平台移植代码,通常会包含两个汇编文件,一个是系统启动初始化文件,一个是线程进行上下文切换的文件,其他的都是C源文件。
RT-Thread是基于面向对象的方式开发的实时内核,标准内核体积为9KB左右,主要有如下特点:
① 面向对象方式的实时核心(但依然保留了C语言的优雅、小巧风格);
② 默认32线程优先级的全抢占式实时内核(也可配置成256线程优先级),相同优先级线程时间片轮转调度;
③ 相同优先级线程实施时间片可配置的分时时间片轮转调度;
④ 线程间同步机制——信号量和防止优先级翻转的互斥锁;
⑤ 完善高效的线程间通信机制,包括邮箱、消息队列和事件;
⑥ 支持线程挂起和唤醒的固定内存块管理及线程安全的动态内存堆管理;
⑦ 向上层提供基于名字的统一接口设备驱动模型;
⑧ 支持各个内核对象(如信号量对象、消息队列对象)的裁减;
⑨ 支持可嵌套的中断;
⑩ 支持线程堆栈溢出检测。