四、嵌入式系统软件
1.硬件抽象层与板级支持包
1-1. 硬件抽象层
硬件抽象层(HAL)是在操作系统层与硬件之间设置的独立的接口软件层,是所有直接依赖于硬件的软件。对硬件进行抽象,使上层软件开发人员无须关心底层硬件的具体细节和差异,支持上层软件在不同体系结构和硬件平台之间的移植。隐藏硬件的差异性,提供统一的接口,如数据访问、中断处理和报警设施等。
1-2. 板级支持包
板级支持包(BSP)是硬件抽象层在特定操作系统环境下的具体实现。 既有硬件相关性,又有操作系统相关性。
功能:
- 系统复位时的硬件初始化,包括处理器和电路板的初始化。
- 为操作系统提供硬件相关的驱动程序支持。
- 负责加载操作系统。
- 调试: 包括最小系统的调试和外围设备驱动程序的调试。
1-3. HAL和BSP实例
1)Nios II HAL
Nios II: Altera公司推出的32位哈佛结构用户可配置的通用RISC软核处理器,用于支持在FPGA器件上实现可编程片上系统(SoPC)。特点: 支持C语言标准库,提供标准的HAL API。
HAL系统库提供的服务:
- 外设驱动
- ANSI C标准库
- HAL API
- 系统初始化
- 设备初始化
2)Windows Embedded Compact 7
WEC7: 微软公司专门为小型网络设备设计的安全、组件化的实时操作系统。组成:应用和服务层、操作系统内核层、BSP层(位于硬件和内核层之间)
功能:
- 引导加载程序
- 设备驱动程序
- OEM适配层(与处理器结构无关,易适配到其他处理器或硬件)
- 内核无关程序的传输层
2.实时系统与实时操作系统
2-1. 实时系统
能够满足实时系统需求的操作系统就是实时操作系统。完成每次任务所需时间的一致性。如果实时操作系统能够满足确定性的时限要求,则称为硬实时操作系统,否则称为软实时操作系统。
- 硬实时任务: 必须在给定的时限内完成,否则会导致任务失败或引起致命错误。例如,动车组的系统控制、核反应堆处理装置、导弹和自动驾驶等。
- 软实时任务: 系统的响应越快越好,但偶尔超出时限并不会造成任务失败或导致任务出现致命错误。例如,DVD播放机。
- 准实时任务: 通常允许偶尔错过最后期限,超时的响应仍然有一定的意义,但会造成任务的服务质量下降。
嵌入式系统并不都是实时系统,实时系统也不都是嵌入式系统。通用计算机系统经过特殊配置后也可以完成实时控制功能。实时嵌入式系统是嵌入式系统与实时系统的交集。
实时系统的特征
- 时间约束性: 必须保证在规定的时间内完成相应的任务,外部数据的获取、处理和数据的输出都必须在截止时间之前完成。
- 可预测性: 包括硬件延迟的可预测性和软件执行时间的可预测性。
- 可靠性: 在实时系统中比非实时系统中更重要,因为重启的代价非常昂贵。
- 交互性: 必须与外部环境实现良好的协同与交互。
2-2.实时操作系统的保证机制
- 多级中断嵌套处理: 允许高优先级的事件在中断低优先级事件时进一步中断。
- 优先级控制: 采用细粒度的任务优先级控制,保证高优先级任务不会被低优先级任务打断。
- 调度: 采用抢占式调度,保证强实时任务在符合条件下优先得到服务。
- 任务队列: 同优先级的任务建立任务队列,按照截止时间排列优先级。
2-3.实时操作系统的实时性指标
- 中断延迟时间: 尽可能减小系统的最长关中断时间。
- 任务切换时间: 相同优先级的任务一般采用时间片轮转方式进行任务调度。
- 任务抢占时间: 任务抢占时间通常比任务切换时间更长。
- 响应时间: 系统从事件请求开始到任务完成的时间间隔,是评价实时系统实时性最重要的指标。
3.引导加载程序(bootloader)
引导加载程序(bootloader)是底层软件的一部分,嵌入式系统上电复位后首先运行。
功能:
- 上电自检: 包括硬件和外设的自检,如内存校验。
- 硬件初始化: 设置CPU寄存器、存储管理单元(MMU)、存储空间映射等。
- 配置系统参数: 如IP地址设置。
- 建立上层软件运行环境: 为操作系统准备运行环境。
- 加载和启动操作系统: 将操作系统的控制权交给操作系统。
特性: 依赖于具体的硬件结构,不同硬件结构的bootloader程序版本不同。复杂bootloader还支持用户命令交互、设置操作系统启动参数、flash ROM编程下载等功能。
3-1. 嵌入式操作系统的引导加载方式
(1)在ROM中直接运行操作系统代码
- 特点: 最简单、基础的方式,操作系统代码直接存放在ROM中,上电后直接读取ROM中的数据加载操作系统。
- 适用场景: 操作系统代码较小,功能较简单,性能要求较低的系统。
(2)在RAM中运行操作系统代码
- 特点: 操作系统代码压缩后存放在ROM中,加载时解压到RAM中运行,利用RAM的高速读写特性。
- 适用场景: 较复杂的操作系统,需要较高执行速度的系统。
(3)从外存储器加载操作系统代码
- 特点: 操作系统代码存放在外存储器(如Flash),加载时通过bootloader将代码复制到RAM中运行。
- 适用场景: 操作系统代码较大,无法全部放入ROM的系统,如智能手机。
(4)从通信端口加载操作系统代码
- 特点: 操作系统代码存放在服务器,通过网络通信端口请求并加载操作系统代码。
- 适用场景: 具备网络通信能力,且网络环境较好的系统。
3-2. 引导加载程序的执行过程
1)第一阶段
- 关闭中断: 防止外界打扰bootloader的执行。
- 基本硬件初始化: 包括处理器内部寄存器设置、系统基本参数设置、时钟初始化、存储器初始化(存储器控制器设置、存储器自检、初始化Cache和存储器管理部件)、关闭看门狗定时器等。
- 初始化相关硬件设备: 如外设、通讯端口等。
- 跳转到第二阶段: 第一阶段完成后,跳转到第二阶段的C程序入口点继续执行。
2)第二阶段
- 进一步系统初始化: 包括处理器初始化、板级初始化、中断初始化等。
- 初始化本阶段硬件设备: 如采用下载模式,需初始化通信端口。
- 复制代码和文件系统: 如果在RAM中运行操作系统内核,需将内核代码和根文件系统映像从ROM复制到RAM。
- 传递启动参数: 向操作系统内核传递启动所需参数。
- 调用内核代码: 完成操作系统初始化的最后准备,启动操作系统。
3-3. U-Boot简介
Universal Bootloader,功能强大、具有弹性、更新快、开放源码的通用bootloader。支持的处理器体系结构: PowerPC、ARM、MIPS系列、X86系列等。支持的嵌入式操作系统: Linux、VxWorks、NetBSD、QNX、RTEMS、ARTOS、LynxOS等。既支持启动加载模式,也支持下载模式。
4.设备驱动程序
设备驱动程序是指直接与硬件相互作用并控制硬件的软件。从驱动程序调用者角度出发,驱动程序是对硬件操作的抽象,方便高层软件对硬件的访问。
4-1. 设备驱动程序的功能
- 初始化: 在系统上电或复位时初始化硬件。
- 打开与关闭: 打开设备操作使设备处于工作状态,关闭则停止工作。
- 数据收发: 设备读取操作指从设备接收数据并提交给高层软件,设备写入操作则把数据发送给设备,数据收发可以采用查询、中断或DMA方式。
- 状态查询与控制: 在设备使用过程中,可能需要查询设备的当前工作状态,并根据操作需求对设备进行控制。
4-2. 设备驱动程序的实现方式
- 小型嵌入式系统: 如μC/OS−11,设备驱动程序包含在操作系统内核中,无统一框架。
- 大型嵌入式系统: 如WinCE、Linux、VxWorks等,定义了统一的设备驱动程序框架。
- VxWorks: 允许应用程序绕过操作系统直接访问硬件。
- Linux等类Unix系统: 把I/O设备抽象成设备文件,且驱动程序必须在内核态运行。
4-3. VxWorks的I/O系统与设备驱动程序
VxWorks操作系统由高性能硬实时微内核Wind、文件系统、I/O系统、网络协议栈和板级支持包(BSP)等组成。
设备驱动程序部分:
- 初始化部分: 初始化硬件并分配设备所需的资源。
- 函数功能部分: 完成系统指定的功能,即7个标准I/O函数的具体实现(创建文件、打开文件、读取文件、写入文件、关闭文件、移除文件和其他控制命令)。
- 中断服务程序: 系统通过中断服务程序实现与外部事件的交互。
5.嵌入式操作系统概述
5-1. 嵌入式操作系统的特点
- 代码固化存储,时空效率高: 嵌入式操作系统必须结构紧凑,代码经过优化后占用存储空间小,通常固化在ROM中,执行效率高。
- 可裁剪性: 支持开放性和可伸缩性的体系结构,可以根据需要添加或移除模块。
- 实时性: 大多数嵌入式系统是实时系统,且多是强实时、多任务系统。
- 强稳定性,弱交互性: 嵌入式操作系统具有较强的稳定性,与用户的交互性较弱,适用于长时间稳定运行的应用场景。
- 硬件适应性: 能够在不同体系结构的多种硬件平台上运行,具有可移植性。
2. 嵌入式操作系统的分类方法
按实时性分类:
- 硬实时操作系统: 主要用于通信、军事、航天、控制等领域,如VxWorks、RTEMS、QNX、μC/OS−II、Nucleus等。
- 软实时或非实时操作系统: 主要用于类PC手持设备、家用电器、个人通信终端等,如WinCE和多户嵌入式Linux等。
按开发方式分类:
- 专门为嵌入式环境开发的操作系统: 更多地应用在对系统可靠性和实时性等要求很高的领域。
- 从通用计算机操作系统移植而来的操作系统: 非常适合在类PC嵌入式系统和消费类电子产品上使用,如嵌入式Windows产品和许多嵌入式Linux产品。
按商业模式分类:
- 免费的嵌入式操作系统: 技术公开,更新速度快,但稳定性和技术支持一般较差,如RTEMS、eCOS、FreeRTOS。
- 商业嵌入式操作系统: 稳定性强,可靠性高,有完善的技术支持和售后服务,但产品价格昂贵,如VxWorks、μC/OS系列。
6.Unix与Linux
6-1. Unix
Unix是商用支持多用户和多任务,网络和数据库功能强大,支持多种处理器架构。依靠可靠性高和可伸缩性突出等优势,Unix在巨型计算机、服务器和工作站等多种硬件平台上均处于操作系统领域的主流地位。有商业版Unix如Solaris、UnixWare、AIX、HP-UX等,技术上与Unix相似的系统包括Linux、QNX、V×Works、安卓、iOS等。
6-2.自由软件
1. 自由软件
自由软件是不受限制地自由使用、复制、研究、修改和分发的软件。
特点:
- 必须是开源的,使用者对软件有完全的掌控权。
- 通常通过互联网发布,且不收取任何费用。
- 一旦按GPL授权发布,将永远具有GPL授权。
2. 免费软件
免费软件是无需付费就可取得的软件。
特点:
- 可能有种种限制,如功能受限、使用时间受限。
- 不允许修改和分发。
- 源代码一般不公开。
与自由软件的区别:
- 免费软件不一定是开源的,而自由软件必须是开源的。
- 免费软件可能带有商业性质,有使用限制,而自由软件强调使用者的自由和掌控权。
- 免费软件发布时可能不收取费用,但可能存在其他隐性成本或限制,而自由软件则完全免费且无任何限制(除了必须遵守GPL授权)。
6-3.Linux内核与Linux发行版
Linux内核是操作系统的最核心部分。Linux发行版是为一般用户预先集成好的Linux操作系统内核及各种应用软件。内容包括系统安装工具、实用程序、命令行程序shell、图形用户界面、常用的应用软件以及其他的一些自由软件等。
- 特点: 可移植性最好,从游戏机、掌上计算机到大型机和巨型机都可以移植使用。
- 实例: 最早也最有名的Linux发行版是GNU/Linux操作系统。
7.嵌入式Linux操作系统
7-1. Linux内核的结构与组成
Linux是参照Minix开发的,但并未采用Minix的微内核设计,而是采用了与Unix相同的单内核结构。Linux支持动态装载内核模块和内核线程,内核运行在单独的内核地址空间。用户空间包含工具软件、应用程序及GNU C运行库(GLIBC),内核空间则包括系统调用接口、初始化、调度器、存储管理、虚拟文件系统、网络、进程间通信、可加载内核模块、设备驱动程序等。
1)Linux的内核空间划分
- 系统调用接口: 最上层,是内核与应用程序进行交互的唯一接口,应用程序通过系统调用访问内核中的特定函数。
- 内核核心部分: 中间层,负责管理系统资源、确保系统安全和隔离保护各个用户,包含初始化组件、进程调度器、内存管理器、虚拟文件系统、设备驱动程序、进程间通信、可加载模块、网络接口等。
- BSP(Board Support Package): 最下层,用于支持特定体系结构的处理器和特定的硬件平台,如引导加载程序、DMA、MMU设置、中断处理等。
2)Linux内核组件之间的关系
- 内存管理: 包括硬件无关和硬件相关部分。
- 虚拟文件系统: 管理文件的保存,并将所有设备和实际文件都虚拟成文件系统。
- 进程调度: 核心部分,围绕其展开所有工作,负责创建、终止进程及进程间的调度。
- 进程间通信: 包括信号量、缓冲、消息队列、管道等机制。
- 网络接口: 负责数据的收发。
6-2. Linux的实时化技术
- 内核补丁方式: 保留了全部的Linux应用编程模式,实时任务和普通的任务采用同样的编程方式并使用同样的API,如MontaVista Linux。
- 双内核方法: 在系统中增加微内核形态的第二个内核,作为硬件与通用Linux内核间的抽象接口。
- 超微内核方式: 硬件抽象层使实时内核和非实时内核之间由紧耦合关系变为松耦合关系,提高系统稳定性和代码维护性,如操作系统自适应域环境ADEOS。
6-3. 嵌入式Linux操作系统的构建
基于通用Linux内核构建:
- 优点: 成本低、内核版本更新及时。
- 缺点: 定制和裁剪工作量较大,实时性相对较差。
基于嵌入式Linux发行版构建:
- 优点: 内核实时性高、定制和裁剪工作量小、针对性强、有专门团队的技术支持。
- 缺点: 版本更新不一定及时,成本较高。
国内外嵌入式Linux发行版本:
- 国际: uCLinux、RTLinux、MontaVista Linux, Wind River Linux等。
- 国内: 中科院红旗嵌入式Linux、中软实时嵌入式Linux等。
7.Android操作系统
7-1. Android系统的特点
Android是用于智能手机、平板电脑等移动设备的软件包。核心是基于Linux内核的半开放源代码操作系统。提供网络、绘图、3D处理能力,带来更好的用户体验。免费的和开放的操作系统平台,可增添特有装置或功能,无须支付版税。应用程序兼容于运行Android的各种型号设备,是完全开放的平台,开发者拥有很大的自由度。
7-2. Android系统的组成与结构
架构: 采用堆层式软件架构,从低层到高层分四层。
- Dalvik虚拟机: 强大的虚拟机,实现跨平台操作,依赖于内核的线程和内存管理。
- 组件库: 提供大量功能组件,如系统C库、媒体库等。
- 开发语言: 底层为C语言开发,上层应用可通过JAVA程序开发,结合底层C和上层JAVA。
8.IOS操作系统
8-1. IOS操作系统概述
iOS与MacOS X一样,以类Unix的Darwin开源操作系统为基础,属于类Unix的商业操作系统。
系统架构分为四个层次:核心操作系统层(Core OS layer)、核心服务层(Core Services layer)、媒体层(Media layer)、触控界面层(Cocoa Touch layer)。
2. iOS应用开发
iOS应用程序由用户代码和苹果公司提供的框架(Framework)组成。框架包含方法资源库,是帮助应用程序完成各种特定功能的软件库。应用程序通过框架的应用编程接口(API)调用功能,API指定可用的类、数据结构和协议。使用框架既省时省力,又可确保代码高效、安全,是访问底层硬件的唯一途径。
9.μC/OS-II操作系统
9-1. μC/OS-II的主要特点
- 公开源码:μC/OS-II的绝大部分代码是用ANSI C语言编写的,公开源码,高质量。
- 可裁剪、可固化:易于裁剪和固化,方便嵌入到ROM中。
- 时间确定性:多任务抢占式内核,对操作和事件的处理时间是确定的。
- 多任务管理:能管理64个任务,其中8个给系统,56个给用户。
- 优先级不同:每个任务的优先级是不同的,以保证实时性。
- 不支持时间片轮转:不支持时间片轮转调度机制,采用优先级调度。
9-1-2. μC/OS-II系统的组成
- 系统管理:包括系统初始化、系统启动、中断管理、时钟中断系统管理等。
- 任务管理:包括任务创建、任务删除、任务挂起及任务恢复等。
- 时钟管理:包括时间延迟、时钟设置及时钟恢复等。
- 任务同步与通信:包括信号量、事件标志、互斥信号量、消息队列等。
- 内存管理:包括创建内存分区、申请或释放内存分区、获取分区信息等。
- 处理器相关代码:移植时针对特定处理器体系结构的代码。
9-1-3. μC/OS-II的源代码主要组成
- 系统核心:μC/OS-II内核的核心代码。
- 任务管理:包含与任务管理相关的函数,如任务创建、任务删除等。
- 时钟管理:包含与时间相关的函数,如时间延迟等。
- 任务同步与任务间通信:包含信号量、事件标志等相关的函数。
- 内存管理:用于内存分区管理,如创建内存分区等。
- 处理器相关代码:移植时针对特定处理器体系结构的代码。
9-2. μC/OS-II的任务构成
任务是操作系统的基本调度单位,由操作系统内核管理。
程序代码:任务代码实际上是一个没有返回值的C函数。通常定义成一个void类型的指针,允许用户程序传递任何类型的参数给任务。任务的返回值必须是void类型,但任务永远不会返回。
任务堆栈:每个任务都有自己独立的栈空间。用于保存任务的工作环境。用户在创建任务时必须知道处理器的栈顶在低地址还是栈顶在高地址,以确定栈的操作方式。每个任务的栈空间大小不同,需根据任务特点进行区分。
任务控制块 (TCB):用于保存任务状态和属性的数据结构。在任务创建时被初始化。多个任务的TCB构成双向循环链表,便于查找和处理。如任务的状态、栈空间大小、参数等属性值都可以保存到TCB中。
9-2-2.任务状态
- 休眠态: 任务代码驻留在内存中但还没有交给内核调度的状态。调用创建任务函数可以把任务提交给内核管理。
- 就绪态: 任务已经准备好,可以运行,但因优先级比正在运行的任务低而暂时不能运行的状态。
- 运行态: 任务已经获得处理器使用权而正在运行的状态。任何时刻系统中只有一个任务处于运行状态。
- 等待态: 也称挂起态,正在运行的任务因等待某一事件发生而将处理器的使用权出让给其他任务而将自身挂起的状态。等待的事件可以是外设的I/O操作、事件信号量、共享资源被释放、超时时间到达等。
- 被中断态: 因处理器执行中断服务程序而被暂停运行的任务状态。这是嵌入式系统中特有的状态。
特点: 被中断态与等待态都是任务被暂停的状态,但被中断态是因为执行中断服务程序而暂停的。
状态转换:
- 休眠态通过调用创建任务函数可以转换为就绪态。
- 就绪态在获得处理器使用权后转换为运行态。
- 运行态在遇到I/O操作、等待事件信号量等情况下转换为等待态;在被中断服务程序抢占时转换为被中断态。
- 等待态在等待的事件发生后,不能直接进入运行态,而要先进入就绪态,再重新排队等待处理器使用权。
- 被中断态在中断服务程序执行完毕后,会返回到运行态或就绪态(如果中断服务程序导致了任务优先级变化)。
9-2-3.任务调度
μC/OS−11可以管理64个任务。用户任务最多可以有56个。
系统任务:
- 空闲任务: 每个应用系统必须使用,系统总是把最低优先级固定赋给空闲任务,当没有其他任务处于就绪态时运行。
- 统计任务: 可选的统计任务,每秒钟运行一次。
临界区: 访问互斥资源(你用了我就不能用)时需要进入临界区。
- 解决方法:
- 关中断: 利用宏OS_ENTER_CRITICAL()OS()实现关中断和开中断,使系统进入/退出临界状态。
- 调度器上锁: 利用函数OSSchedLock()和OSSchedUnlock()给调度器上锁和解锁。
- 调度算法:μC/OS−11采用基于优先级的调度算法,选择当前所有就绪任务中最高优先级的任务转入运行态。
- 任务切换: 发生任务级的任务调度时,通过系统函数OSTASK_SW()进行任务切换,保存当前任务的上下文,并恢复新任务的上下文。
9-2-4.μC/OS−II的中断处理步骤
(1)保存全部CPU寄存器: 这是中断处理的第一步,也称为保存上下文,确保中断服务程序执行完后能恢复到原来的执行状态。
(2)OSIntEnter(): 调用此函数,将全局变量OSIntNesting加1,标识进入中断状态,并允许中断嵌套。
(3)执行用户中断服务代码: 根据中断类型,执行相应的中断服务程序。
(4)OSIntExit(): 中断服务结束后,调用此函数,准备退出中断。
(5)恢复所有CPU寄存器: 恢复之前保存的CPU寄存器,也称为恢复上下文。
(6)执行中断返回指令: 最后执行中断返回指令,使程序回到中断发生前的执行点。
注意事项:
- 中断嵌套:μC/OS−II允许中断嵌套,嵌套层数可达255层,但实际应用中通常不会达到这么多层。
- 中断处理中的限制: 在中断处理过程中,不允许进行任务管理、事件管理及任务调度的操作。
- 必须调用OSIntExit(): 在中断返回之前,必须调用OSIntExit()函数,以确保正确地退出中断状态并恢复系统状态。
9-3.μC/OS-II的系统服务
9-3-1. 任务管理服务
任务的标识是优先级(INT8U prio)。任务创建可在调用OSStart()之前创建。也可在其他任务运行过程中创建。不能由中断服务程序创建。
任务删除是使任务转入休眠状态,不再被内核调度。函数OSTaskDel()可删除任务自身或其他任务。
任务挂起与恢复:调用OSTaskSuspend()挂起任务。调用OSTaskResume()恢复被挂起的任务。如果任务在挂起时正在等待延时,挂起操作将被取消。
9-3-2. 时钟节拍与时间管理服务
用户必须在调用OSStart()启动多任务调度以后再开启时钟节拍器。调用OSStart()之后的第一件事是初始化定时器中断。
任务延时:
- 运行态任务可通过调用OSTimeDly()或OSTimeDlyHMSM()延迟一段时间。
- 延时参数包括小时(0255)、分钟(059)、秒(059)和毫秒(0999)。
- 实际延时时间是时钟节拍的整数倍。
任务唤醒:
- 如果任务因调用OSTimeDly()或OSTimeDlyHMSM()进入延时等待状态,其他任务可调用OSTimeDlyResume()将其唤醒。
9-3-3. 任务间通信与同步服务概述
- 通信方法:信号量、消息邮箱、消息队列、互斥信号量(mutex)、事件标志组
- 事件控制块ECB:
- 任务或中断服务程序可通过ECB向其他任务发出信号。
- 任务可在ECB上等待其他任务或中断服务程序发送信号。
- 注意: 中断服务程序不能等待信号。
- 任务挂起与就绪:
- 当任务因等待信号而被挂起时,当前优先级最高的就绪态任务将获得处理器控制权。
- 事件发生后,被挂起的任务转入就绪态。
- 优先级反转:
- 互斥信号量用于实现共享资源的独占访问。
- 可解决优先级反转问题。
9-4.μC/OS-II应用程序设计
9-4-1. 初始化与main函数结构
内核初始化: 在使用内核提供的任何功能之前,必须先调用OSInit()函数进行内核初始化。OSInit()对内核使用的所有变量和数据结构进行初始化,并创建空闲任务OS_TaskIdle()并使之处于就绪态。
多任务调度启动: 函数OSStart()将启动多任务调度,并从就绪态任务中选择最高优先级的任务转入运行态。因此,在主函数main()调用OSStart()之前,必须至少创建一个用户任务。
9-4-2. μC/OS-III增加的主要特性
- 时间片轮转调度: μC/OS-III提出了时间片轮转调度方法。
- 内核对象数量无限制: 内核对象的数量没有限制,如信号量等,在增加和减少时可以无限制(实际实现时仍有一定要求)。
- 任务级时钟节拍处理: 时钟节拍处理更加细致,到每个任务里面,是任务级的。
- 处理器体系结构优化: 可以对程序进行优化,使执行速度更快,主要涉及到从汇编等低级语言来实现微操作或比较等。
- 时间戳增强: 提供16位时间戳,使实时性体现得更好。
- 内置性能测试功能增强: 使整个系统在应用到测试时都一体化。