系统架构师笔记——嵌入式系统

本章要求考生掌握以下知识点:
(1)信息系统综合知识:包括嵌入式系统的特点、嵌入式系统的硬件组成与设计、嵌入式系统
应用软件及开发平台、嵌入式系统网络、嵌入式系统数据库、嵌入式操作系统与实时操作系统。
(2)系统架构设计案例分析:包括实时系统和嵌入式系统特征、实时任务调度和多任务设计、
中断处理和异常处理、嵌入式系统开发设计。

1.嵌入式系统的特点

(1)系统专用性强:嵌入式系统是针对具体应用的专门系统。个性化很强,软硬件结合紧密。一般要针对硬件进行软件的开发和移植,根据硬件的变化和增减对软件进行修改。
(2)软硬件依赖性强:嵌入式系统的专用性决定了其软硬件互相依赖性很强,两者必须协同设计,以达到共同实现预定功能的目的,并满足性能成本和可靠性等方面的严格要求。
(3)系统实时性强:嵌入式系统中有一部分系统对外来事件要求在限定的时间内及时做出响应,具有实时性。
(4)处理器专用:嵌入式系统的处理器是为某一特定目的和应用而专门设计的,具有功耗低、体积小、集成度高等优点,能把许多在通用计算机上需要由板卡完成的任务和功能集成到芯片内部,从而有利于嵌入式系统的小型化和移动能力的增强。
(5)多种技术紧密结合:嵌入式系统通常是计算机技术、半导体技术、电力电子技术及机械技
术与各行业的具体应用相结合的产物。通用计算机技术也离不开这些技术,但它们相互结合的紧密
程度不及嵌入式系统。
(6)系统透明性:嵌入式系统在形态上与通用计算机系统差异很大,它的输入设备往往不是常
见的鼠标和键盘之类的设备,甚至没有输出装置,用户可能根本感觉不到它所使用的设备中有嵌入
式系统的存在,即使知道也不必关心这个嵌入式系统的相关情况。
(7)系统资源受限:嵌入式系统为了达到结构紧凑、可靠性高及降低系统成本的目的,其存储
容量、I/O设备数量和处理器的处理能力都比较有限。

2.实时系统

        实时系统可以看成对外部事件及时响应的系统。现实中并非所有的嵌入式系统都有实时特性,所有的实时系统也不一定都是嵌入式。但这两种系统并不互相排斥,兼有这两种特性的系统称为实时嵌入式系统(Real-Time Embedded System,RTES),通常简称为实时系统。
(1)逻辑(或功能)正确:指系统对外部事件的处理能够产生正确的结果。
(2)时间正确:指系统对外部事件的处理必须在预定的周期内完成。
(3)死线(Deadline):指系统必须对外部事件处理的最迟时间界限,错过此界限可能产生严重后果。通常计算必须在到达死线前完成。
(4)实时系统:指功能正确和时间正确同时满足的系统,二者同等重要。换言之,实时系统有
时间约束并且是死线驱动的。但是在某些系统中,为了保证功能正确性,有可能牺牲时间正确性。
根据对错失死线的容忍程度不同,可以将RTES分为软RTES和硬RTES。
(1)硬RTES:必须满足其灵活性接近零死线要求的RTES。死线必须满足,否则就会产生灾难 性后果,并且死线之后得到的处理结果或是零级无用,或是高度贬值。在硬RTES中,错失死线后的处理结果价值为零,错失死线的惩罚是灾难性的。
(2)软RTES:必须满足死线的要求,但是有一定灵活性。死线可以包含可变的容忍等级、平均时间死线,甚至是带有不同程度的可接受性的响应时间的统计分布。在软RTES中,错失死线后处理结果的价值根据应用的性质随时间按某种关系下降,死线错失不会导致系统失败。由于一个或多个错失的死线对软RTES的运行没有决定性的影响,一个软RTES不必预测是否可能有悬而未决的死线错失。相反软RTES在探知到错失一个死线时可以启动一个恢复进程。

3.嵌入式系统基本架构

        嵌入式系统一般由软件和硬件两个部分组成,其中嵌入式处理器、存储器和外部设备构成整个系统的硬件基础。嵌入式系统的软件部分可以分为3个层次,分别是系统软件、支撑软件和应用软件,系统软件和支撑软件是基础,应用软件是最能体现整个嵌入式系统的特点和功能的部分。
硬件架构
        微处理器是整个嵌入式系统的核心,负责控制系统的执行。外部设备是嵌入式系统同外界交互的通道,常见的外部设备有flash存储器、键盘、输入笔、触摸屏、液晶显示器等,很多嵌入式系统中还有与系统用途紧密相关的各种专用外设。嵌入式系统中经常使用的存储器有是RAM、ROM和混合存储器。系统存储器存放系统的程序代码、数据和系统运行结果。 嵌入式系统的核心部件是各类嵌入式处理器,嵌入式处理器可以分为如下几类:
(1)嵌入式微处理器:由计算机中的CPU演变而来,功能上跟普通的微处理器基本一致,但它体积小、功耗低、质量轻、成本低及可靠性高。通常嵌入式微处理器和ROM(Read Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、总线接口及外设接口等部件安装在一块电路板上,称为单板计算机。
(2)嵌入式微控制器:又称为单片机,整个计算机系统都集成到一块芯片中。嵌入式微控制器以某一种微处理器内核为核心,芯片内部集成有存储器、总线、总线逻辑、定时器/计数器、监督定时器、并口/串口、数模/模数转换器、闪存等必要外设。与嵌入式微处理器相比,嵌入式微控制器的最大特点是单片化,因而体积更小、功耗和成本更低,可靠性更高。
(3)嵌入式数字信号处理器:一种专门用于信号处理的处理器,DSP(Digital Signal  Processor,数字信号处理器)是芯片内部采用程序和数据分开的结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP指令,可以用来快速实现各种数字信号的处理算法。目前DSP在嵌入式系统中使用非常广泛,如数字滤波、快速傅立叶变换及频谱分析等。
(4)嵌入式片上系统:一种在一块芯片上集成很多功能模块的复杂系统,例如把微处理器内核、RAM、USB(Universal Serial Bus,通用串行总线)、IEEE 1394、Bluetooth(蓝牙)等集成到一个芯片中,构成一个嵌入式片上系统,从而缩小了系统体积、降低系统复杂度、 增强系统可靠性。生产成本也远低于单元部件组成的电路板系统。根据用途不同,嵌入式片上系统可以分为通用片上系统和专用片上系统两类。专用类的嵌入式片上系统一般是针对某一或某些系统而设计的。
软件架构
        随着嵌入式技术的发展,特别是在后PC时代,嵌入式软件系统得到了极大的丰富和发展,形成了一个完整的软件体系
系统架构师笔记——嵌入式系统_第1张图片
        嵌入式操作系统(Embedded Operating System,EOS)由操作系统内核、应用程序接口、
设备驱动程序接口等几部分组成。嵌入式操作一般采用微内核结构。操作系统只负责进程的调度、
进程间的通信、内存分配及异常与中断管理最基本的任务,其他大部分的功能则由支撑软件完成。
嵌入式系统中的支撑软件由窗口系统、网络系统、数据库管理系统及Java虚拟机等几部分组成。
        对于嵌入式系统来讲,软件的开发环境大部分在通用台式计算机和工作站上运行,但从逻辑上讲,它仍然被认为是嵌入式系统支撑软件的一部分。支撑软件一般用于一些浅度嵌入的系统中,如智能手机、个人数字助理等。嵌入式系统中的应用软件是系统整体功能的集中体现。系统的能力总是通过应用软件表现出来的。

4.嵌入式操作系统

        EOS是指运行在嵌入式计算机系统上支持嵌入式应用程序的操作系统,是用于控制和管理嵌入式系统中的硬件和软件资源、提供系统服务的软件集合。EOS是嵌入式软件的重要组成部分。它提高了嵌入式软件开发的效率,提高了应用软件的可移植性,推动了嵌入式系统的发展。
        随着各种类型EOS的成熟和发展,与通用系统的开发方法相似,基于操作系统的开发方案逐渐 成为开发的主流。EOS作为应用软件的运行平台成为许多嵌入式系统的关键。
EOS主要有以下特点
(1)微型化:EOS的运行平台是嵌入式计算机系统。这类系统没有大容量的内存,几乎没外存,因此EOS必须做得小巧,以尽量少占用系统资源。为提高系统速度和可靠性,嵌入式系统中的软件一般都固化在存储器芯片中,而不是存放在磁盘等载体中。
(2)代码质量高:大多数应用中存储空间是宝贵的资源,这就要求程序代码的质量要高,代码要尽量精简。
(3)专业化:嵌入式系统的硬件平台多种多样,处理器的更新速度快,每种都是针对不同的应
用领域而专门设计。因此EOS要有很好适应性和移植性,还要支持多种开发平台。
(4)实时性强:嵌入式系统广泛应用于过程控制、数据采集、通信、多媒体信息处理等要求实
时响应的场合,因此实时性成EOS的又一特点。
(5)可裁减、可配置:应用的多样性要求EOS具有较强的适应能力,能够根据应用的特点和具
体要求进行灵活配置和合理裁减,以适应微型化和专业化的要求。
嵌入式操作系统的实时性上,可分为实时嵌入式操作系统(Real-Time embedded  Operatiing System,RTOS)和非实时嵌入式操作系统两类。
(1)实时嵌入式操作系统:RTOS支持实时系统工作,首要任务是调度一切可利用资源,以满足对外部事件响应的实时时限,其次提高系统的使用效率。RTOS主要用在控制、通信等领域。大多数商业嵌入式操作系统都是RTOS。与通用操作系统系统相比,RTOS在功能上具有很多特性。RTOS和通用操作系统之间的功能也有很多相似之处,如它们都支持多任务,支持软件和硬件的资源管理以及都为应用提供基本的操作系统服务。
        RTOS特有的不同于通用操作系统的功能主要有:满足嵌入式应用的高可靠性;满足应用需要的上、下裁减能力;减少内存需求;运行的可预测性;提供实时调度策略;系统的规模紧凑;支持从ROM或RAM上引导和运行;对不同的硬件平台具有更好的可移植性。
(2)非实时嵌入式操作系统:这类操作系统不特别关注单个任务响应时限,其平均性能、系统效率和资源利用率较高,适合于实时性要求不严的消费类电子产品,如个人数字助理、机顶盒等。
一般结构
        与通用计算机系统上的操作系统一样,EOS隔离了用户与计算机系统的硬件,为用户提供了功能强大的虚拟计算机系统,EOS主要由应用程序接口、设备驱动、操作系统内核等几部分组成。

系统架构师笔记——嵌入式系统_第2张图片

        EOS是一个按时序方式调度执行、管理系统资源并为应用代码提供服务的基础软件。每个EOS都有一个内核。另一方面,EOS也可以是各种模块的有机组合,包括内核、文件系统、网络协议栈和其他部件。但大多数内核都包含以下3个公共部件:
(1)调度器:是EOS的心脏,提供一组算法决定何时执行哪个任务。
(2)内核对象:是特殊的内核构件,帮助创建嵌入式应用。
(3)内核服务:是内核在对象上执行的操作或通用操作。

5.多任务调度机制

几个基本概念:
(1)任务:任务是独立执行的线程,线程包含独立的可调度的指令序列。实时应用程序设计过程包括如何把问题分割成多个任务,每个任务是整个应用的组成部分,每个任务被赋予一定优先级,有自己的一套寄存器和栈空间。大多抢占式调度内核中,无论是系统任务还是应用任务状态都会处于就绪、运行、阻塞三个状态。某些商业内核还定义了挂起、延迟等颗粒更细的状态。
(2)任务对象:任务是由不同的参数集合和支持的数据结构定义。创建任务时每个任务都拥有一个名字,一个惟一标识号ID,一个优先级、一个任务控制块、一个堆栈和一个任务的执行例程,这些部件组成一个任务对象。
(3)多任务:多任务是操作系统在预定的死线内处理多个活动的能力。多任务使CPU利用率得到最大地发挥,并使应用程序模块化。随着调度的任务数量的增加,对CPU的性能需求也随之增加,主要由于线程运行的上下文切换增加的缘故。
(4)调度器:调度器是每个内核的心脏,调度器提供决定何时哪个任务运行的算法。多数实时
内核是基于优先级调度的。
(5)可调度实体:可调度实体是可根据预定义的调度算法,竞争到系统执行时间的内核对象。
(6)上下文切换:每个任务都有自己的上下文,是每次被调度运行时所要求的寄存器状态,当多任务内核决定运行另外的任务时,它保存正在运行的任务的上下文,恢复将要运行下一任务的上下文,并运行下一任务,这个过程称为上下文切换。在任务运行时,其上下文是高度动态的。调度器从一个任务切换到另一个任务所需要的时间称为上下文切换开销。
(7)可重入性:一段代码被一个以上的任务调用,而不必担心数据的破坏。具有可重入性的函数任何时候都可以被中断,一段时间以后继续运行,相应数据不会遭到破坏。
(8)分发器:是调度器的一部分,执行上下文切换并改变执行的流程。分发器完成上下文切换的工作并传递控制。执行的流程通过三个区域之一:应用任务、ISR (Interrupt Service Routines,中断服务程序)或内核。
        根据进入内核的情况,分发的情况也有所不同。一个任务是用系统调用时,分发器通常在每个任务的系统调用完成后退出内核。在这种情况下,分发器通常以调用—调用为基础的,因此可以协调由此引起的任何系统调用的任务状态转移。另一方面如果一个ISR做系统调用,则分发器将被越过,直到ISR全部完成它的执行。当前大多数内核支持两种普遍的调度算法,即基于优先级的抢占调度算法和时间轮转调度算法。
基于优先级的抢占调度
        基于优先级的抢占调度又可以分为静态优先级和动态优先级。静态优先级是指应用程序在执行过程中各任务的优先级固定不变。在静态优先级系统中,各任务以及它们的时间约束在程序编译时是已知的;动态优先级是应用程序在执行过程中任务优先级可以动态改变。这种类型的调度,在运行的任务是所有就绪任务中具有最高优先级的任务,任务在创建时被赋予了优先级,任务的优先级可以由内核的系统调用动态更改,这使得嵌入式应用对于外部事件的响应更加灵活,从而建立真正的实时响应系统。
        一般情况下,可以采用单调执行速率调度法(Rate Monotonic Scheduling,RMS)来给任务
分配优先级,基本原则是执行最频繁的任务优先级最高。RMS做了如下假设:
(1)所有的任务都是周期性的。
(2)任务间不需要同步,没有共享资源,没有任务间的数据交换等问题。
(3)系统采用抢占式调度,总是优先级最高且就绪的任务被执行。
(4)任务的死线是其下一周期的开始。
(5)每个任务具有不随时间变化的定长时间。
(6)所有的任务具有同等重要的关键性级别。
(7)非周期性任务不具有硬死线。
        要使一个具有n个任务的实时系统中的所有任务都满足硬实时条件,必须使下述定理成立。
RMS定理: 式中,Ei是任务i最长执行时间,Ti是任务i的执行周期,Ei/Ti 是任务i所需的CPU时间。基于RMS定理,要所有的任务满足硬实时条件,则所有有时间要求的任务总的CPU利用时间应当小于70%。通常作为实时系统设计的一条原则,CPU利用率应当在60%~70%之间。
时间轮转调度
        时间轮转调度算法为任务提供确定份额的CPU执行时间。显然纯粹的时间轮转调度是不能满足实时系统的要求。取而代之的是,基于优先级抢占式扩充时间轮转调度,对于优先级相同的任务使用时间片获得相等的CPU执行时间。内核在满足以下条件时,把CPU控制权转交给下一个就绪态的任务:
(1)当前任务已无事可做。
(2)当前任务的时间片还没用完任务就已经结束了。
系统架构师笔记——嵌入式系统_第3张图片

任务Task1、Task2、Task3具有相同的优先级,它们按照时间片运行,任务
Task2被更高优先级的任务Task4抢占,当Task4执行完毕后恢复Task2的执行。
任务操作
        内核提供任务管理服务,也提供一个允许开发者操作任务的系统调用,典型的任务操作有任务创建和删除、任务调度控制、任务信息获取。

6.内核对象

        RTOS的用户可用内核对象来解决实时系统设计中的问题,如并发、同步与互斥、数据通信等。内核对象包括信号量、消息队列、管道、事件与信号等。
信号量
        为同步一个应用的多个并发线程和协调它们对共享资源的互斥访问,内核提供一个信号量对象和相关的信号量管理服务。信号量是一个内核对象,就像一把锁,任务获取了该信号量就可以
执行期望的操作或访问相关资源,从而达到同步或互斥的目的。
信号量可以分为如下三类:
(1)二值信号量:二值信号量只有两个值:0或1,值为0时,信号量不可使用;值为1时,信号量可使用。二值信号量被创建时,既可初始化为可使用的,也可初始化为不可使用的。二值信号量通常作为全局资源,被需要信号量的所有任务共享。
(2)计数信号量:计数信号量使用一个计数器赋予一个数值,表示信号量令牌个数,允许多次获取和释放。初始化时,如果计数值为0,表示信号量不可用;计数值大于0,表示信号量可用。每获取一次信号量其计数值减1,每释放一次信号量其计数值加1。有些系统中计数信号量允许实现的计数是有界的,有些则无界。同二值信号量一样,计数信号量也可用做全局资源。
(3)互斥信号量:互斥信号量是一个特殊的二值信号量,它支持所有权、递归访问、任务删除安全和优先级反转,以避免互斥固有的问题。互斥信号量初始为开锁状态,被任务获取后转到闭锁 状态,当任务释放该信号量时又返回开锁状态。
        通常内核支持以下几种操作:创建和删除信号量操作、获取和释放信号量操作、清除信号量
的等待队列操作以及获取信号量信息操作。
消息队列
        多数情况下,任务活动同步并不满足实时响应的要求,任务之间还必须能够交换信息。为实现任务之间的数据交换,内核提供了消息队列对象和消息队列的管理服务。
        消息队列是一个类似于缓冲区的对象,通过它任务和ISR可以发送和接收消息,实现数据通信。 消息队列暂时保存来自发送者的消息,直到有接收者准备读取这些消息为止。大多数内核支持以下消息队列操作:创建和删除消息队列、发送和接收消息以及获取消息队列的信息等操作。
管道
        管道是提供非结构化数据交换和实现任务同步的内核对象。管道有两个端口,一端用来读,另一端用来写。数据在管道中就像一个非结构的字节流,数据按照FIFO方式从管道中读出。一般EOS内核支持两类管道对象:
(1)命名管道:具有一个类似于文件名的名字,像文件或设备一样,出现在文件系统中,需要使用命名管道的任何任务或ISR都可以用该名字对其进行引用。
(2)无名管道:一般动态创建,且必须使用创建时返回的描述符才可引用此类型的管道。
        通常管道支持几种操作:创建和删除一个管道、读、写管道、管道控制、管道上的轮询。
事件
        某些特殊的EOS提供一个特殊的寄存器作为每个任务控制块的一部分,称为事件寄存器。它是一个属于任务的对象,由一组跟踪指定事件的二值事件标志组成。EOS支持事件寄存器机制,创 建一个任务时,内核同时创建一个事件寄存器作为任务控制块的一部分。
        经过事件寄存器,一个任务可检查控制它执行的特殊事件是否出现。一个外部源可以设置该事件寄存器的位,通知任务一个特殊事件的发生。任务说明它所希望接收的事件组,这组事件保存在寄存器中,同样到达的事件也保存在接收的事件寄存器中。
        另外任务还可以指示一个时限说明它愿意等待某个事件多长时间。如果时限超过,没有指定的事件达到任务,则内核唤醒该任务。
信号
        信号是一个事件发生时产生的软中断,它将信号接收者从其正常的执行路径移开并触发相关的异步处理。本质上信号通知其他任务或ISR运行期间发生的事件,与正常中断类似,这些事件与被通知的任务是异步的。
        信号的编号和类型依赖于具体的嵌入式系统的实现。通常嵌入式系统均提供信号设施,任务可为每个希望处理的信号提供一个信号处理程序,或是使用内核提供的默认处理程序,也可将一个信号处理程序用于多种类型的信号。信号有被忽略、挂起、处理或阻塞等4种不同的响应处理。
条件变量
        条件变量是一个与共享资源相关的内核对象,它允许一个任务等待其他任务创建共享资源需要的条件。一个条件变量实现一个谓词,谓词是一组逻辑表达式,涉及共享资源的条件。谓词计算的结果是真或假,如果计算为真,则任务假定条件被满足,并且继续运行,反之任务必须等待所需要的条件。当任务检查一个条件变量时,必须原子性地访问,所以条件变量通常跟一个互斥信号量一起使用。
        一个任务在计算谓词条件之前必须首先获取互斥信号量,然后计算谓词条件,如果为真条件满足继续执行后续操作;否则条件不满足,原子性地阻塞该任务并先释放互斥信号量。条件变量不是共享资源同步访问的机制,大多数开发者使用条件变量,让任务等待一个共享资源到达一个所需的状态。

7.内核服务

        大多数嵌入式处理器架构都提供了异常和中断机制,允许处理器中断正常的执行路径。这个中断可能由应用软件触发,也可由一个错误或不可预知的外部事件来触发。而大多数EOS则提供异常和中断处理的“包裹”功能,使嵌入式系统开发者避免底层细节。
异常与中断
        异常是指任何打断处理器正常执行,迫使处理器进入特权执行模式的事件。异常可以分为同步异常和异步异常。同步异常是指程序内部与指令执行相关的事件引起的异常,例如内存偶地址校准异常、除数为零异常等;异步异常是指与程序指令不相关的外部事件产生的异常,例如系统复位异常、数据接收中断等。
        同步异常可以分为精确异常和不精确异常。精确异常是指处理器的程序计数器可以精确地指出引起异常的指令。而在流水线或指令预取的处理器上则不能精确地判断引起异常的指令或数据,这时的异常称为不精确异常。
        异步异常可以分为可屏蔽的异常和不可屏蔽的异常。可以被软件阻塞或开放的异步异常称为可屏蔽的异常,否则为不可屏蔽异常。不可屏蔽的异常总是被处理器处理,例如硬件复位异常。许多处理器具有一个专门的不可屏蔽中断请求线(NMI),任何连接到NMI请求线的硬件都可以产生不可屏蔽中断。
        所有的处理器按照定义的次序处理异常,虽然每一种嵌入式处理器处理异常的过程不尽相同,但一般都会按照优先级次序来处理。从应用程序的观点看,所有的异常都具有比操作系统内核对象更高的优先级,包括任务、队列和信号量等。
        中断也称为外部中断,是由外部硬件产生的事件引起的异步异常,大多数嵌入式处理器架构中将中断归为异常的一类。实时内核最重要的指标是中断关了多长时间。所有的实时系统在进入临界代码时都要关中断,执行完临界代码之后再开中断。中断延迟时间是指关中断的最长时间与开始执行中断服务子程序的第一条指令的时间之和,中断恢复时间是微处理器返回到被中断的程序代码所需要的时间。从应用的观点来看,异常和外部中断是外部硬件和应用程序通信的一种机制。一般来讲,异常和中断可以在如下两个方面用在设计中:内部错误和特殊条件管理、硬件并发和服务请求管理。
计时器
        计时器是实时嵌入式系统的一个组成部分。时间轮转调度算法、存储器定时刷新、网络数据包的超时重传以及目标机监视系统的时序等都严格依赖于计时器。许多嵌入式系统用不同形式的计时器来驱动时间敏感的活动,即硬件计时器和软件计时器。
        硬件计时器是从物理计时芯片派生出来的,超时后可以直接中断处理器,硬件计时器对精确的延迟操作具有可预测的性能。而软件计时器是通过软件功能调度的软件事件,能够对非精确的软件事件进行有效的调度,使用软件计时器可以减轻系统的中断负担。
这里有几个相关概念:
(1)实时时钟:存在于嵌入式系统内部,用来追踪时间、日期的硬件计时设备。
(2)系统时钟:用来追踪从系统加电启动以来的事件时间或流失时间,可编程的间隔计时器驱动系统时钟,计时器每中断一次,系统时钟的值就递增一次。
(3)时钟节拍:也称为时钟滴答,是特定的周期性中断。中断之间的间隔取决于不同的应用,一般在10ms到200ms之间。时钟节拍率越快,系统的额外开销就越大。
(4)可编程计时器:一般是集成在嵌入式系统内部的专门计时硬件,用做事件计数器、流失时间指示器、速率可控的周期事件产生器等。使用独立的硬件计时器可以有效地降低处理器的负载。
(5)软件计时器:是应用程序安装的计数器,每次时钟中断,会递减一次,当计数器到达0时,应用的计时器超时,系统会调用安装的超时处理函数进行有关处理。
I/O管理
        从系统开发者的观点看,I/O操作意味着与设备的通信,对设备初始化、执行设备与系统之间的数据传输以及操作完成后通知请求者。从系统的观点看,I/O操作意味者对请求定位正确的设备,对设备定位正确的驱动程序,并保证对设备的同步访问。
        I/O设备、相关的驱动程序等共同组合成嵌入式系统的I/O子系统。
系统架构师笔记——嵌入式系统_第4张图片
        I/O子系统定义一组标准的I/O操作函数,以便于对应用隐藏设备的特性。所有的设备驱动程序
都符合并支持这个函数集,给应用提供一个能够跨越各种类型I/O的设备的统一的接口。
        I/O子系统通常维护一个统一的设备驱动程序表,使用I/O子系统的工具函数,可以将任何驱动
程序安装到此表或从表中删除。另外,还使用一个设备表来跟踪为每个设备所创建的实例。

8.常见的嵌入式操作系统

VxWorks
        VxWorks具有良好的持续发展能力、高性能的内核以及友好的用户开发环境。它十分灵活,具有多达1800个功能强大的应用程序接口(Application Programming Interface,API)。它适用面广,可以适用于从最简单到最复杂的产品设计。它可靠性高,可以用于从防抱死刹车系统到星际探索的关键任务。适用性强,可以用于所有流行的CPU平台。
Palm
        Palm是一种32位的嵌入式操作系统,提供了串行通信接口和红外线传输接口,利用它可以方便地与其它外部设备通信、传输数据;拥有开放的OS应用程序接口,开发商可根据需要自行开发所需的应用程序。
        Palm是一套具有强开放性的系统。在编写程序时,Palm充分考虑了掌上电脑内存相对较小的情况,因此它只占有非常小的内存。由于基于Palm编写的应用程序占用的空间也非常小(通常只有几十KB),所以基于Palm的掌上电脑虽然只有几MB的内存,但可以运行众多应用程序。
由于Palm产品的最大特点是使用简便、机体轻巧,因此决定了Palm应具有以下特点。
(1)操作系统的节能功能,掌上电脑要求使用电源尽可能小,在Palm的应用程序中,没有事件运行时系统设备进入半休眠的状态;应用程序停止活动一段时间后系统自动进入休眠状态。
(2)合理的内存管理,Palm的存储器全部是可读写的快速RAM,动态RAM类似于PC上的RAM,它为全局变量和其它不需永久保存的数据提供临时的存储空间;存储RAM类似于PC上的硬盘,可以永久保存应用程序和数据。
(3)Palm的数据是以数据库的格式来存储,为保证程序处理速度和存储器空间,在处理数据时,Palm不是把数据从存储堆拷贝到动态堆后再进行处理,而是在存储堆中直接处理。
(4)Palm与同步软件结合可以使掌上电脑与PC机上的信息实现同步,把台式机的功能扩展到
了掌上电脑。
Windows CE
        Windows CE也是一个开放的、可升级的32位嵌入式操作系统,是基于掌上电脑类的电子设备操作。Windows CE的图形用户界面相当出色。与PC上的Windows不同的是,Windows CE是所有 源代码全部由微软自行开发的嵌入式新型操作系统,其操作界面虽来源于PC上的Windows,但Windows CE是基于Win32 API重新开发的、新型的信息设备平台。Windows CE具有模块化、结构
化和基于Win32应用程序接口以及与处理器无关等特点。
        Windows CE不仅继承了传统的Windows图形界面,并且在Windows CE平台上可以使用PC上的Windows的编程工具(如Visual Basic、Visual C++等)、使用同样的函数、同样的界面风格,大多数的应用软件只需简单的修改和移植就可以在Windows CE平台上继续使用。
        Windows CE的设计目标是:模块化、可伸缩性、实时性能好,通信能力强,支持多种CPU。它可以满足多种设备的需要,这些设备包括了工业控制器、通信集线器以及销售终端之类的企业设备,还有像照相机、电话和家用娱乐器材之类的消费产品。一个典型的基于Windows  CE的嵌入系统通常为某个特定用途而设计,并在不联机的情况下工作。它要求所使用的操作系统体积较小,内建有对中断的响应功能。
Windows CE的特点有:
(1)具有灵活的电源管理功能,包括睡眠/唤醒模式。
(2)使用了对象存储技术,包括文件系统、注册表及数据库。它还具有很多高性能、高效率的
操作系统特性,包括按需换页、共享存储、交叉处理同步、支持大容量堆等。
(3)良好的通信能力。广泛支持各种通信硬件,亦支持直接的局域连接以及拨号连接,并提供与PC、内部网以及Internet(因特网)的连接,还提供与PC上的Windows的最佳集成和通信。
(4)支持嵌套中断。允许更高优先级别的中断首先得到响应,而不是等待低级别的ISR完成。
这使得该操作系统具有嵌入式操作系统所要求的实时性。
(5)更好的线程响应能力,对高级别中断服务线程的响应时间上限的要求更加严格,在线程响
应能力方面的改进,帮助开发人员掌握线程转换的具体时间,并通过增强的监控能力和对硬件的控
制能力帮助他们创建新的嵌入式应用程序。
(6)256个优先级别,可以使开发人员在控制嵌入式系统的时序安排方面有更大的灵活性。
(7)Windows CE的API是Win32 API的一个子集,支持近1500个Win32 API。这些API足可以编写任何复杂的程序。在Windows CE系统中,所提供的API也可以随具体应用的需求而定。
Linux
        Linux是一个类似于Unix的操作系统,Linux系统不仅能够运行于PC平台,还在嵌入式系统方面大放光芒,在各种嵌入式Linux迅速发展的状况下,Linux逐渐形成了可与Windows CE等嵌入式操作系统进行抗衡的局面。嵌入式Linux的特点如下:
(1)精简的内核,性能高、稳定,多任务。
(2)适用于不同的CPU,支持多种架构,如X86、ARM、ALPHA、SPARC等。
(3)能够提供完善的嵌入式图形用户界面以及嵌入式X-Windows。
(4)提供嵌入式浏览器、邮件程序、音频和视频播放器、记事本等应用程序。
(5)提供完整的开发工具和软件开发包,同时提供PC上的开发版本。
(6)用户可定制,可提供图形化的定制和配置工具。
(7)常用嵌入式芯片的驱动集,支持大量的周边硬件设备,驱动丰富。
(8)针对嵌入式的存储方案,提供实时版本和完善的嵌入式解决方案。
(9)完善的中文支持,强大的技术支持,完整的文档。
(10)开放源码,丰富的软件资源,广泛软件开发者的支持,价格低廉,结构灵活,适用面广。

9.嵌入式系统数据库

        嵌入式DBMS就是在嵌入式设备上使用的DBMS。由于用到嵌入式DBMS的系统多是移动信息设备,诸如掌上电脑、PDA(Personal Digital Assistant,个人数字助理)、车载设备等移动通信设备。因此嵌入式数据库也称为移动数据库或嵌入式移动数据库,其作用主要是解决移动计算环境下数据的管理问题,移动数据库是移动计算环境中的分布式数据库。
        在嵌入式系统中引入数据库技术,主要因为直接在EOS或裸机之上开发信息管理应用程序存在如下缺点:
(1)所有的应用都要重复进行数据的管理工作,增加了开发难度和代价。
(2)各应用之间的数据共享性差。
(3)应用软件的独立性、可移植性差,可重用度低。
在嵌入式系统中引入DBMS可以在很大程度上解决上述问题,提高应用系统开发效率和可移植性。
使用环境的特点
        嵌入式数据库系统是一个包含嵌入式DBMS在内的跨越移动通信设备、工作站或台式机以及数
据服务器的综合系统,系统所具有的这个特点以及该系统的使用环境对嵌入式DBMS有着较大的影
响,直接影响到嵌入式DBMS的结构。其使用环境的特点可以简单地归纳如下:
(1)设备随时移动性:嵌入式数据库主要用在移动信息设备上,设备位置常随使用者一起移动。
(2)网络频繁断接:移动设备或移动终端在使用的过程中,位置经常发生变化,同时也受使用方式、电源、无线通信及网络条件等因素的影响。所以一般并不持续保持网络连接,而是经常主动或被动地间歇性断接。
(3)网络条件多样化:由于移动信息设备位置的经常变化,所以移动信息设备同数据服务器在不同的时间可能通过不同的网络系统连接。这些网络在网络带宽、通信代价、网络延迟、服务质量 等方面可能有所差异。
(4)通信能力不对称:由于受到移动设备的资源限制,移动设备与服务器之间的网络通信能力是非对称的。移动设备的发送能力都非常有限,使得数据服务器到移动设备的下行通信带宽和移动 设备到数据服务器之间的上行带宽相差很大。
关键技术
        一个完整的嵌入式DBMS由若干子系统组成,包括主DBMS、同步服务器、嵌入式DBMS、连接网络等几个子系统

系统架构师笔记——嵌入式系统_第5张图片

(1)嵌入式DBMS:嵌入式DBMS是一个功能独立的单用户DBMS。它可以独立于同步服务器和主DBMS运行,对嵌入式系统中的数据进行管理,也可以通过同步服务器连接到主服务器上,对
主数据库中的数据进行操作,还可通过多种方式进行数据同步。
(2)同步服务器:同步服务器是嵌入式数据库和主数据库之间的连接枢纽,保证嵌入式数据库和主数据库中数据的一致性。
(3)数据服务器:数据服务器主数据库及DBMS可采用Oracle或Sybase等大型通用数据库系统。
(4)连接网络:主数据库服务器和同步服务器之间一般通过高带宽、低延迟的固定网络进行连接。移动设备和同步服务器之间的连接根据设备具体情况可以是无线局域网、红外连接、通用串行
线或公众网等。
移动DBMS的关键技术
        嵌入式移动数据库在实际应用中必须解决好数据的一致性(复制性)、高效的事务处理和数据的安全性等问题。
(1)数据的一致性:嵌入式移动数据库的一个特点是,移动数据终端之间与同步服务器之间的连接是一种弱连接,即低带宽、长延迟、不稳定和经常性断接。为支持用户在弱环境下对数据库的操作,普遍采用乐观复制方法,允许用户对本地缓存上的数据副本进行操作。网络重新连接后再与数据库服务器或其他移动数据终端交换数据修改信息,通过冲突检测和协调恢复数据的一致性。
(2)高效的事务处理:移动事务处理要解决在移动环境中频繁的、可预见的断接情况下的事务
处理。为了保证活动事务的顺利完成,必须设计和实现新的事务管理策略和算法。
(3)数据的安全性:许多应用领域的嵌入式设备是系统中数据管理或处理的关键设备,因此嵌入式设备上的DBS对存取权限的控制较严格。同时许多嵌入式设备具有较高的移动性、便携性和非固定的工作环境,也带来潜在的不安全因素。同时某些数据的个人隐私性又很高,因此在防止碰撞、磁场干扰、遗失、盗窃等方面对个人数据的安全性需要提供充分保证。
移动DBMS的特性
        移动DBMS的计算环境是传统分布式DBMS的扩展,它可看做客户端与固定服务器结点动态
连接的分布式系统。因此移动计算环境中的DBMS是一种动态分布式DBMS。由于嵌入式移动DBMS在移动计算的环境下应用在EOS之上,所以它有自己的特点和功能需求:
(1)微核结构:考虑到嵌入式设备的资源有限,嵌入式移动DBMS应采用微型化技术实现,在满足应用的前提下紧缩其系统结构以满足嵌入式应用的需求。
(2)对标准SQL的支持:嵌入式移动DBMS应能提供了对标准SQL的支持。支持SQL92标准的子集,支持数据查询插入、更新、删除多种标准的SQL语 句,充分满足嵌入式应用开发的需求。
(3)事务管理功能:嵌入式移动DBMS应具有事务处理功能,自动维护事务的完整性、原子性
等特性;支持实体完整性和引用完整性。
(4)完善的数据同步机制:数据同步是嵌入式数据库最重要的特点。通过数据复制,可以将嵌
入式数据库或主数据库的变化情况应用到对方,保证数据的一致性。
(5)支持多种连接协议:嵌入式移动DBMS应支持多种通信连接协议。可以通过串行通信、 TCP/IP、红外传输、蓝牙等多种连接方式实现与嵌入式设备和数据库服务器的连接。
(6)完备的嵌入式数据库的管理功能:嵌入式移动DBMS应具有自动恢复功能,基本无须人工
干预进行嵌入式数据库管理并能够提供数据的备份和恢复,保证用户数据的安全可靠。
(7)支持多种EOS:嵌入式移动DBMS应能支持Windows CE、Palm 等多种目前流行的EOS,这样才能使嵌入式移动DBMS不受移动终端的限制。
        另外一种理想的状态是用户只用一台移动终端就能对与它相关的所有移动数据库进行数据操作和管理。这就要求前端系统具有通用性,而且要求移动数据库的接口有统一、规范的标准。前端管理系统在进行数据处理时自动生成统一的事务处理命令,提交当前所连接的数据服务器执行。这样就有效地增强了嵌入式移动DBMS的通用性,扩大了嵌入式移动数据库的应用前景。
        在嵌入式移动DBMS中还需要考虑诸多传统计算环境下不需要考虑的问题,例如,对断接操作的支持、对跨区长事务的支持、对位置相关查询的支持、对查询优化的特殊考虑,以及对提高有限资源的利用率和对系统效率的考虑等。为了有效地解决这些问题,诸如复制与缓存技术、移动事务处理、数据广播技术、移动查询处理与查询优化、位置相关的数据处理及查询技术、移动信息发布技术、移动Agent等技术仍在不断地发展和完善,会进一步促进嵌入式移动DBMS的发展。

10.嵌入式系统网络

        嵌入式网络是用于连接各种嵌入式系统,使之可以互相传递信息、共享资源的网络系统。嵌入 式系统在不同的场合采用不同的连接技术,如在家庭居室采用家庭信息网,在工业自动化领域采用 现场总线,在移动信息设备等嵌入式系统则采用移动通信网,此外还有一些专用连接技术用于连接嵌入式系统。
现场总线网
        现场总线(FieldBus)也称做工业自动化领域的计算机局域网,是一种将数字传感器、变换器、工业仪表及控制执行机构等现场设备与工业过程控制单元、现场操作站等互相连接而成的网络。具有全数字化、分散、双向传输和多分支的特点,是工业控制网络向现场级发展的产物。现场总线是一种低带宽的底层控制网络,位于生产控制和网络结构的底层,也被称为底层网,它应用于生产现场,在测量控制设备之间实现双向的、串行的、多节点的数字通信。
        现场总线控制系统(Field Contral System,FCS)是运用现场总线连接各控制器及仪表设备而构成的控制系统,FCS将控制功能下放到现场,降低安装成本和维护费用。FCS是一种开放的、具有互操作性的、彻底分散的分布式控制系统。
        嵌入式现场控制系统将专用微处理器置入传统的测量控制仪表,使其具备数字计算和数字通信能力。它采用双绞线、电力线或光纤等作为总线,把多个测量控制仪表连接成网络,并按照规范标准的通信协议,在位于现场的多个微机化测量控制设备之间以及现场仪表与远程监控计算机之间,实现数据传输与信息交换,形成了各种适用实际需要的自动控制系统。FCS把单个分散的测量控制设备变成网络节点,以现场总线为纽带,使这些分散的设备成为可以互相沟通信息,共同完成自动控制任务的网络系统。借助于现场总线技术,传统上的单个分散控制设备变成了互相沟通、协同工作的整体。
        现场总线主要有总线型与星型两种拓扑结构。FCS通常由以下部分组成:现场总线仪表、控制器、现场总线线路、监控、组态计算机。仪表、控制器、计算机都需要通过现场总线网卡、通信协议软件连接到网上。现场总线网卡、通信协议软件是现场总线控制系统的基础和神经中枢。
        现场总线克服了在传统的集散控制系统中通信由专用网络实现所带来的缺陷。把基于专用网络的解决方案变成了基于标准的解决方案,同时把集中与分散相结合的集散控制结构变成了全分布式的结构。把控制功能彻底放到现场,依靠现场设备本身来实现基本的控制功能。
归纳起来,FCS有如下优点:
(1)全数字化:将企业管理与生产自动化有机结合一直是工业界梦寐以求的理想,但只有在FCS出现以后这种理想才有可能高效、低成本地实现。
(2)全分布:在FCS中各现场设备有足够的自主性,它们彼此之间相互通信,可以把各种控制功能分散到各种设备中,不再需要一个中央控制计算机,实现真正的分布式控制。
(3)双向传输:传统的4~20mA电流信号,一条线只能传递一路信号。现场总线设备则在一条线上既可以向上传递传感器信号,也可以向下传递控制信息。 
(4)自诊断:现场总线仪表本身具有自诊断功能,而且这种诊断信息可以送到中央控制室,以便于维护,而这一点在只能传递一路信号的传统仪表中是做不到的。
(5)节省布线及控制室空间:传统的控制系统每个仪表都需要一条线连到中央控制室,在中央控制室装备一个大配线架。而在FCS系统中多台现场设备可串行连接在一条总线上,只需极少的线进入中央控制室,节省了布线费用,也降低了中央控制室的造价。
(6)多功能:数字、双向传输方式使得现场总线仪表可以摆脱传统仪表功能单一的制约,可在一个仪表中集成多种功能,做成多变量变送器,甚至集检测、运算、控制于一体的变送控制器。
(7)开放性:1999年现场总线协议被IEC批准正式成为国际标准,现场总线成为一种开放技术。
(8)互操作性:现场总线标准保证不同厂家的产品可以互操作,这样就可以在一个企业中由用户根据产品的性能、价格,选用不同厂商的产品集成在一起,避免了传统控制系统中必须选用同一厂家的产品限制,促进了有效的竞争,降低了控制系统的成本。
(9)智能化与自治性:现场总线设备能处理各种参数、运行状态信息及故障信息,具有很高智能。能在部件甚至网络故障的情况下独立工作,提高了整个控制系统的可靠性和容错能力。
(10)可靠性:由于FCS中的设备实现了智能化,因此与使用模拟信号的设备相比,从根本上提高了测量与控制的精确度,减小了传送误差。同时由于系统结构的简化,设备与连线减少,现场仪表内部功能加强,使得信号的往返传输大为减少。进一步提高系统的可靠性。

11.嵌入式因特网

        随着Internet和嵌入式技术的飞速发展,越来越多的信息电器,如Web可视电话、机顶盒、以 及信息家电等嵌入式系统产品都要求与Internet连接,来共享Internet所提供的方便、快捷、无处不 在的信息资源和服务,即嵌入式Internet技术。
嵌入式因特网的接入方式
(1)直接接入式因特网:嵌入式设备上集成了TCP/IP协议栈及相关软件,可以作为Internet的一个节点,分配有IP地址与Internet直接互联。特点是设备可以直接连接到Internet,对Internet进行透明访问,不需要专门的接入设备,设备的协议标准化;需要的处理器性能和资源相对较高,需要占用IP资源,由于目前IPv4资源紧张,这种方案在IPv6网中可能更现实。
(2)通过网关接入因特网:即采用瘦设备方案,设备不直接接入Internet,不需要复杂的TCP/IP协议全集,通过接入设备接入Internet。特点是对接入设备性能和资源要求较低,接入设备的协议栈开销较小,不需要分配合法的IP地址,可降低系统的成本;设备可实现多样化、小型化。
嵌入式TCP/IP协议栈
        嵌入式TCP/IP协议栈完成的功能与完整的TCP/IP协议栈是相同的,但是由于嵌入式系统的资源限制,嵌入式协议栈的一些指标和接口等与普通的协议栈可能有所不同。
(1)嵌入式协议栈的调用接口与普通协议栈不同:普通协议栈的套接字接口是标准的,应用软件兼容性好,但实现标准化接口的代码开销、处理和存储开销都巨大。因此多数厂商在将标准的协议栈接口移植到嵌入式系统上时,都作了不同程度的修改简化,建立了高效的专用协议栈,它们所提供的API与通用协议栈的API不一定完全一致。
(2)嵌入式协议栈的可裁剪性:嵌入式协议栈多数是模块化的,如果存储器的空间有限,可在需要时进行动态安装,省去了接口转发、全套因特网服务工具等针对嵌入式系统非必需的部分。
(3)嵌入式协议栈的平台兼容性:一般协议栈与操作系统的结合紧密,大多数协议栈是在操作系统内核中实现的。协议栈的实现依赖于操作系统提供服务,移植性较差。嵌入式协议栈的实现一般对操作系统的依赖性不大,便于移植。许多商业化的嵌入式协议栈支持多种操作系统平台。
(4)嵌入式协议栈的高效率:嵌入式协议栈的实现通常占用更少的空间,需要的数据存储器更小,代码效率高,从而降低了对处理器性能的要求。

12.嵌入式系统软件开发

        嵌入式系统的软件开发采用交叉平台开发方法(Cross Platform Development,CPD),即软件在一个通用的平台上开发,而在另一个嵌入式目标平台上运行。这个用于开发嵌入式软件的通用平台称为宿主机系统,被开发的嵌入式系统称为目标机系统。而当软件执行环境和开发环境一致时的开发过程则称为本地开发。
CPD环境通常包含三个高度集成的部分:
(1)运行在宿主机和目标机上的强有力的交叉开发工具和实用程序。
(2)运行在目标机上的高性能、可裁剪的RTOS。
(3)连接宿主机和目标机的多种通信方式,例如以太网、串口线、ICE(In-Circuit Emulator,在线仿真器)、ROM仿真器等。
系统架构师笔记——嵌入式系统_第6张图片
        宿主机提供的基本开发工具有交叉编译器、交叉链接器和源代码调试器等,作为目标机的嵌入式系统则提供一个动态装载器、链接装载器、监视器和一个调试代理等。在目标机和宿主机之间有一组连接,通过这组连接程序代码映像从宿主机下载到目标机,这组连接同时也用来传输宿主机和目标机调试代理之间的信息。目前嵌入式系统中常用的目标文件格式是COFF(Common Object File Format,通用对象文件格式)和ELF(Executable Linking Format,可执行链接格式)。另外一些系统还需要有一些专门工具将上述格式转换成二进制代码格式才可使用。
一个目标文件包含:
(1)关于目标文件的通用信息,如文件尺寸、启动地址、代码段和数据段等具体信息。
(2)机器架构特定的二进制指令和数据。
(3)符号表和重定位表。
(4)调试信息。
开发过程
        嵌入式系统软件的开发过程可以分为项目计划、可行性分析、需求分析、概要设计、详细设
计、程序建立、下载、调试、固化、测试及运行等几个阶段。
        项目计划、可行性分析、需求分析、概要设计及详细设计等几个阶段,与通用软件的开发过程基本一致,都可按照软件工程方法进行,如采用原型化方法、结构化方法等。与嵌入式软件的运行和开发环境不同,开发工作是交叉进行的,所以每一步都要考虑到这一点。
        程序建立阶段的工作是根据详细设计阶段产生的文档进行的,主要是源代码编写、编译链接等子过程,这些工作都在宿主机上进行,不需要用到目标机。产生应用程序的可执行文件后,就要用到交叉开发环境进行调试。由于嵌入式系统对安全性和可靠性的要求比通用计算机系统要高,所以,在对嵌入式系统进行白盒测试时,要求有更高的代码覆盖率。
        最后要将经调试后正确的可执行程序固化到目标机上。根据嵌入式系统硬件配置的不同,可固化在EPROM(Erasable Programmable ROM,可擦除可编程ROM)和Flash等存储器中,也可固化在DOC(DiskOnChip)等电子盘中,通常还要借助一些专用编程器进行。
调试方法
        通用系统与嵌入式系统的软件调试过程存在着明显的差异。对于通用系统,调试工具与被调试的程序位于同一台计算机上,调试工具通过操作系统的调试接口来控制被调试的程序。但在嵌入式系统中,由于资源限制不能在其上直接开发应用程序,调试过程也以交叉方式进行的。在实际开发实践中,常用调试方法有直接调试法、调试监控法、在线仿真法、片上调试法及模拟器法等。
(1)直接调试法
        直接调试法是将目标代码下载到目标机上执行,通过观察指示灯来判断程序的运行状态。在嵌入式系统发展的早期一般采用这种方式进行,其基本步骤是:
(1)在宿主机上编写程序。
(2)在宿主机上编译、链接生成目标机可执行程序代码。
(3)将可执行代码写入到目标机的存储器中。
(4)在目标机运行程序代码。
(5)判断程序的运行情况,如有错误则纠正错误,重复以上步骤,直到正确位置。
(6)将可执行代码固化到目标机,开发完成。
        这种方法是最原始的调试方法,程序运行时产生的问题,只有通过检查源代码来解决,因而开发效率很低。
(2)调试监控法
        调试监控法也叫插桩法。目标机和宿主机一般通过串口、并口或以太网相连接,采用这种方法还需在宿主机的调试器内和目标机的操作系统上分别启动一个功能模块,然后通过这两个功能模块的相互通信来实现对应用程序的调试。
        在目标机上添加的模块叫做桩(调试服务器、调试监控器),有两个作用:监视和控制被调试的程序;与宿主机上的调试程序通信,接受控制指令,返回结果等。进行调试时,宿主机上的调试器通过连接线路向调试监控器发送请求,实现目标机内存读/写和寄存器访问、程序下载、单步跟踪和设置断点等操作。来自宿主机的请求和目标机的响应都按照预定的通信协议进行交互。
使用插桩法作为调试手段时,开发应用程序的基本步骤如下:
(1)在宿主机上编写程序的源代码。
(2)在宿主机编译、链接生成目标机可执行程序。
(3)将目标机可执行代码下载到目标机的存储器中。
(4)使用调试器进行调试。
(5)在调试器帮助下定位错误。
(6)在宿主机上修改源代码,纠正错误,重复上述步骤直到正确为止。
(7)将可执行代码固化到目标机上。
        相对于直接测试法,插桩法明显地提高了开发效率,降低了调试的难度,缩短了产品的开发周期,有效降低了开发成本。但是插桩法仍有明显的缺点,主要体现在以下几个方面:
(1)调试监控器本身的开发是个技术难题。
(2)调试监控器在目标机要占用一定的系统资源,如CPU时间、存储空间以及串口等外设资源。
(3)调试时,不能响应外部中断,对有时间特性的程序不适合。
(4)调试过程中,被调试程序实际上在调试监控器所提供的环境中运行,这个环境可能会与实际目标程序最终的运行环境有差异,这种差异有可能导致调试通过的程序最后仍不能运行。
        为了克服插桩法的缺点,出现了一种改良的方法,即ROM仿真器法。ROM仿真器是一种用于替代目标机上ROM芯片的硬件设备,ROM仿真器一端跟宿主机相连,一端通过ROM芯片的引脚插座和目标机相连。对于嵌入式处理器来说,ROM仿真器像一个只读存储器,对于宿主机来说,像一个调试监控器。ROM仿真器的地址可以实时映射到目标机的ROM地址空间里,所以它可以仿真目标机的ROM。ROM仿真器在目标机和宿主机之间建立了一条高速信息通道,其典型的应用就是跟插桩法相结合,形成一种功能更强的调试方法。
该方法具有如下优点:
(1)不必再开发调试监控器。
(2)通过ROM仿真器上的串行口、并行口、或网络接口与宿主机连接,不必占用目标机的资源。
(3)ROM仿真器代替目标机上原来的ROM,不占用目标机上的存储空间来保存调试监控器。
(4)即使目标机本身没有ROM,依然可以调试,不需要使用专门工具向ROM写入程序和数据。
(3)在线仿真法
        ICE是用于替代目标机上CPU的设备。对目标机来说ICE就相当于它的CPU,ICE本身就是一个嵌入式系统,有自己的CPU内存和软件。ICE的CPU可以执行目标机的所有指令,但比一般CPU有更多的引脚,能够将内部信号输出到被控制的目标机上,ICE的存储器也被映射到用户的程序
空间,因此即使没有目标机,仅用ICE也可以进行程序的调试。
        ICE和宿主机一般通过串口、并口或以太网相连接。连接ICE和目标系统时,用ICE的CPU引出端口替代目标机的CPU。用ICE调试程序时,在宿主机运行一个调试器界面程序,该程序根据用户的操作指令控制目标机上的程序运行。
        ICE能实时检查运行程序的处理器状态,设置硬件断点和进行实时跟踪,提供了更强的调试功能。ICE支持多种事件的触发断点,包括内存读写、I/O读写及中断等。ICE的一个特性就是实时跟踪,ICE上有大容量的存储器用来保存每个指令周期的信息,使用户可以知道事件发生的精确时序,适于调试实时应用、设备驱动程序和对硬件功能测试。但ICE的价格一般都比较昂贵。
(4)片上调试法
        片上调试(In Circuit Debugger,ICD)是CPU芯片内部用于支持调试的功能模块。ICD可分为仿调试监控器、后台调试模式(Background Debugging Mode,BDM)、连接测试存取组(Joint Test Access Group,JTAG)和片上仿真(On Chip Emulation,OnCE)等几类。
        使用较多的是采用BDM技术的CPU芯片。这种芯片外面有跟调试相关的引脚,这些引脚在调试的时候被引出,形成一个与外部相连的调试接口,这PU具有调试模式和执行模式两种不同的运行模式。当满足了特定的触发条件时,CPU进入调试模式,在调试模式下,CPU不再从内存中读取指令,而是通过其调试端口读取指令,通过调试端口还可以控制CPU进入和退出调试模式。这样在宿主机上的调试器就可以通过调试端口直接向目标机发送要执行的指令,使调试器可以读/写目标机的内存和寄存器,控制目标程序的运行以及完成各种复杂的调试功能。
        该方法的主要优点是:不占用目标机的通信端口等资源,调试环境和最终的程序运行环境基本一致,无须在目标机上增加任何功能模块即可进行;支持软、硬断点,支持跟踪功能,可以精确计量程序的执行时间;支持时序逻辑分析等功能。
        该方法的主要缺点是:实时性不如ICE法强,使用范围受限,如果目标机不支持片上调试功能,则该方法不适用;实现技术多样,标准不完全统一,工具软件的开发和使用均不方便。
(5)模拟器法
        模拟器是运行于宿主机上的一个纯软件工具,它通过模拟目标机的指令系统或目标机操作系统的系统调用来达到在宿主机上运行和调试嵌入式应用程序的目的。
        模拟器适合于调试非实时的应用程序,这类程序一般不与外部设备交互,实时性不强,程序的执行过程是时间封闭的,开发者可直接在宿主机上验证程序的逻辑正确性。确认无误后将程序写入目标机上就可正确运行。
        模拟器有两种主要类型:一类是指令级模拟器,在宿主机模拟目标机的指令系统。一类是系统调用级模拟器,在宿主机上模拟目标操作系统的系统调用。指令级的模拟器相当于宿主机上的一台虚拟目标机,该目标机的处理器种类可以与宿主机不同。比较高级的指令级模拟器还可以模拟目标机的外部设备,如键盘、串口、网络接口等。系统调用级的模拟器相当于在宿主机上安装了目标机的操作系统,使得基于目标机的操作系统的应用程序可以在宿主机上运行。被模拟的目标机操作系统的类型可以跟宿主机的不同。两种类型的模拟器相比较,指令级模拟器所提供的运行环境与实际目标机更为接近。
        使用模拟器的最大好处是在实际的目标机不存在的条件下就可以为其开发应用程序,并且在调试时利用宿主机的资源提供更详细的错误诊断信息,但模拟器有许多不足之处:
(1)模拟器环境和实际运行环境差别很大,无法保证在模拟条件下通过的应用程序也能在真实
环境中正确运行。
(2)模拟器不能模拟所有外部设备,但嵌入式系统包含诸多外设,模拟器只能模拟少数部分。
(3)模拟器的实时性差,对于实时类应用程序的调试结果可能不可靠。
(4)运行模拟器需要宿主机配置较高。
        尽管模拟器有很多的不足之处,但在项目开发的早期阶段,其价值是不可估量的,尤其对那些实时性不强的应用,模拟器调试不需要特殊的硬件资源,是一种非常经济的方法。

 

你可能感兴趣的:(学习笔记,嵌入式硬件)