目录

一、嵌入式系统概述

1.1 嵌入式系统的特点

1.2 嵌入式系统的组成

1.3 基于多核处理器的嵌入式系统

1.4 安全攸关系统

二、嵌入式数据库系统

2.1 嵌入式数据库的分类

2.2 使用环境的特点

2.3 系统组成

三、嵌入式操作系统

3.1 嵌入式操作系统概述

3.1.1 嵌入式操作系统的分类

3.1.2 嵌入式操作系统的特点

3.1.3 一般嵌入式操作系统的结构与组成

3.1.4 宏内核和微内核

3.1.5 实时性能指标

3.2 多任务调度算法

3.2.1 调度算法的分类

3.2.2 单调速率调度

3.2.3 时间轮转调度

3.2.4 截止时间优先(EDF)调度

3.2.5 基于分区化的分区APPS调度算法

3.3 优先级反转

3.3.1 优先级继承协议

3.3.2 优先级天花板协议

四、嵌入式系统开发

4.1 开发平台

4.2 开发流程

4.2.1 过程模型

4.2.2 分析与设计方法

4.3 软硬件协同设计

4.4 系统分析与设计

4.5  低功耗设计

五、嵌入式系统验证

5.1 嵌入式系统的验证和确认

5.2 嵌入式系统软件的测试

5.2.1 软件测试概述

5.2.2 基于需求的软件测试方法

5.2.3 形式化方法

5.3 基于系统的构件测试方法

相关推荐


一、嵌入式系统概述

嵌入式系统是一种以应用为中心,以计算机技术为基础,可以适应不同应用的功能、可靠性、成本、体积和功耗等方面的要求,集可配置、可裁减的软硬件于一体的专用计算机系统

1.1 嵌入式系统的特点

  • (1) 专用性强。嵌入式系统是针对具体应用的专门设计的系统,其个性化很强,软件和硬件结合紧密
  • (2) 实时性强。很多嵌入式系统对外来事件要求在限定的时间内及时做出响应,具有实时性。
  • (3) 软硬件依赖性强。嵌入式系统的专用性决定了其软硬件的互相依赖性很强,两者必须协同设计。
  • (4) 专用处理器。嵌入式系统采用的处理器一般是为嵌入式特定目的而专门设计的嵌入式处理器
  • (5) 多种技术紧密结合。嵌入式系统通常是计算机技术、半导体技术、电子技术、机械技术与各行业的具体应用相结合的产物。
  • (6) 系统透明性。嵌入式系统在形态上与通用计算机系统差异甚大。它的输入设备往往不是常见的鼠标和键盘之类的设备,甚至没有输出装置,用户可能根本感觉不到它所使用的设备中有嵌入式系统的存在
  • (7) 系统资源受限。嵌入式系统为了达到结构紧凑、高可靠性和低成本的目的,其存储容量、I/O设备的数量和处理器的处理能力都比较有限

1.2 嵌入式系统的组成

嵌入式系统是一种嵌入对象体的结构中或带有执行装置的应用环境中的专用系统,它主要由5个核心功能部件组成:

  • (1)传感器。将物理参数转换为待处理的电信号
  • (2)处理单元(PE)。接收输入接口提供的数字数据,对数据进行处理,并决定执行某个输出功能。
  • (3)作动器。从数据处理单元的输出接口接收电信号,并执行物理动作
  • (4)输入接口。将电信号转换成计算机能够处理的数字形式
  • (5)输出接口。对实时计算机输出的二进制数据进行处理,将其转换成作动器或其他输出设备需要的信号形式

嵌入式系统的体系架构主要包括了硬件层、中间层、系统软件层和功能层

  • (1)硬件层中包含嵌入式微处理器、存储器、通用设备接口和I/O接口
  • (2)硬件层与软件层之间为中间层,也称为硬件抽象层或极级支持包(BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能
  • (3)系统软件层由实时多任务操作系统(RTOS)、文件系统、图形用户接口(GUI)、嵌入式数据库、网络系统及通用组件模块组成
  • (4)功能层主要由实现某种或某几项任务而被开发运行于操作系统上的程序组成

图 17-2 给出了一种嵌入式系统的软、硬件组成,嵌入式系统的硬件部分包括嵌入式处理器、存储器和外部设备等硬件基础。软件部分可以分为三类,分别是系统软件、应用支撑软件和应用软件

1.3 基于多核处理器的嵌入式系统

多核处理器其低功耗、多线程并发等优势很好地满足了嵌入式系统需求。包括下面六种:

  • (1)单核结构。计算机中只有一个物理处理器,不支持应用软件的并行执行
  • (2)多处理器结构。支持真正意义上的并行执行,因为多个线程或进程能够在多个处理器上同时执行。
  • (3)超线程结构(SMI)。计算机中只有一个实际的物理处理器,但从软件角度来看,存在多个逻辑处理器,支持操作系统和应用程序将多个线程调度到多个逻辑处理器上,就像多处理器系统一样。
  • (4) 多核结构。采用单芯片多处理器(CMP)的设计,此种结构不是重用单个处理器中某些处理器资源,而是在单个处理器芯片内实现两个或更多的“执行核”
  • (5) 共享Cache的多核结构。与多核结构的工作方式一致,主要差别在于设计时将这些“执行核”设计成可共享片上的Cache
  • (6) 采用超线程技术的多核结构。主要是将多核结构与超线程结构相结合,从而将逻辑处理器的数量增加到“执行核”的两倍

1.4 安全攸关系统

安全攸关系统也称为安全关键系统,是指其不正确的功能或者失效会导致人员伤亡、财产损失等严重后果的计算机系统。这里的安全性是指单位时间内损失的期望值小于规定的概率。在嵌入式系统设计中,常用的可靠性、安全性设计模式包括三模块冗余模式(TMR)和监控 - 启动器模式(Monitor Initiator Pattern)。

TMR模式是一种用来增强嵌入式系统可靠性和安全性的模式。该模式特别适用于系统没有fail-safe状态。其基本原理是提供3个并行的运作通道,通过表决器检查3个通道最终的结果,实现对系统中随机错误进行容错处理。

监控-启动器模式适用于具有fail-safe状态的嵌入式系统。其基本原理是用一个独立的传感器监控系统是否要进入fail-safe状态。监控-启动器模式解决该问题的方式就是当系统出现错误时,直接将系统转到一个fail-safe状态,而不是像TMR那样要准备不停运转的三份冗余。

二、嵌入式数据库系统

嵌入式数据库管理系统(EDBMS)是指嵌入式系统中用于存储、管理数据的数据信息管理系统。它是一种对资源的要求相对有限的数据信息管理系统,它与操作系统及其应用软件集成在一起,固化在嵌入式计算机上,可以支持与嵌入式系统的专门用途密切相关的应用。

与传统数据库相比,嵌入式数据库管理系统应具备以下特点:

  • (1) 嵌入性。是嵌入式数据库的基本特性。可以嵌入其他的软件或者硬件设备当中。
  • (2) 实时性。实时性和嵌入性是分不开的。只有具有了实时性的数据库才能够第一时间得到系统的资源,对系统的请求在第一时间内做出响应。
  • (3) 移动性。嵌入性的数据库一定具有比较好的移动性。
  • (4) 伸缩性。客户根据需要自己选择。

2.1 嵌入式数据库的分类

按照嵌入式数据库管理系统的功能侧重点为原则的分类:嵌入式内存数据库管理系统、嵌入式实时数据库管理系统以及移动数据库管理系统三大类

三类数据库管理系统的侧重点比较
类型 处理数据对象的性质 功能侧重点
嵌入式内存数据库管理系统 离散、简单的数据 数据库在内存中建立和管理
嵌入式实时数据库管理系统 连续的实时数据流 数据的实时存储和处理
移动数据库管理系统 远程数据 支持移动计算

2.2 使用环境的特点

嵌入式数据库系统是一个包含 EDBMS 在内的跨域移动通信设备、工作站或台式机,以及数据库服务器的综合系统。其使用环境的特点可以简单归纳如下:

  • (1) 设备随时移动性。嵌入式数据库主要用在移动信息设备上,设备的位置经常随使用者一起移动。
  • (2) 网络频繁断接。移动设备或移动终端在使用过程中,位置经常发生变化,一般并不持续保持网络连接,而是经常主动或被动地间歇性断接和连接。
  • (3) 网络条件多样化。由于移动信息设备位置的经常变化,导致它们与数据库服务器在不同时间可能通过不同的网络系统连接。
  • (4) 通信能力不对称。由于受到移动设备的资源限制,移动设备与服务器之间的网络通信能力是非对称的。

2.3 系统组成

一个完整的EDBMS由下列部分组成:

  • (1) 嵌入式数据库。是一个功能独立的单用户数据库管理系统。它可以独立于同步服务器和主数据库管理系统运行,对嵌入式系统中的数据进行管理,也可以通过同步服务器连接到主服务器上,对主数据库中的数据进行操作,还可以通过多种方式进行数据同步。
  • (2) 同步服务器。是嵌入式数据库和主数据库之间的连接枢纽,保证嵌入式数据库和主数据库中数据的一致性
  • (3) 数据库服务器。数据库服务器中的主数据库和DMBS可以采用Oracle或Sybase等大型通用数据库系统。
  • (4) 连接网络。数据库服务器与同步服务器之间一般通过高带宽、低延迟的固定网络进行连接;移动设备与同步服务器之间的连接可以是无线局域网、红外连接、通用串行线或公众网等

三、嵌入式操作系统

嵌入式操作系统(Embedded Operating System,EOS)是嵌入式系统不可或缺的核心软件。负责嵌入式系统的全部软硬件资源分配、任务调度、控制、协调并行活动等工作。通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器

3.1 嵌入式操作系统概述

3.1.1 嵌入式操作系统的分类

嵌入式操作系统按响应时间分类

  • (1) 嵌入式硬实时操作系统(RTOS)。
  • (2) 嵌入式软实时操作系统。

3.1.2 嵌入式操作系统的特点

  • (1) 微型化。嵌入式系统一般没有大容量的内存,几乎没有外存。因此,EOS必须做得小巧,以占用尽量少的系统资源。
  • (2) 代码质量高。嵌入式系统存储空间是宝贵的资源,要求程序代码的质量更高,代码要尽量精简。
  • (3) 专业化。嵌入式系统的硬件平台多种多样,处理器的更新速度快,每种处理器都是针对不同应用领域专门设计的。因此,EOS要有很好的适应性和移植性,还要支持多种开发平台。
  • (4) 实时性强。嵌入式系统应用于过程控制、数据采集、通信、多媒体信息处理等要求实时响应的场合。
  • (5) 可载流和可配置。应用的多样性要求EOS具有较强的适应能力,能够根据应用的特点和具体要求进行灵活配置和合理载流,以适应微型化和专业化的要求

3.1.3 一般嵌入式操作系统的结构与组成

一般采用层次化架构,以隔离用户与计算机系统的硬件,为用户提供了功能强大的虚拟计算机系统。它通常由硬件抽象层、调试代理、操作系统内核、文件系统和可配置组件(标准库、网络协议栈、设备驱动程序)等功能组成,并为应用软件提供标准的API接口服务。

针对不同的硬件平台,操作系统通常建立在一个抽象层,该抽象层位于底层硬件和内核之间,为内核提供各种方便移植的宏定义接口,在不同的平台间移植时,只需要修改宏定义即可。根据抽象程度的不同,硬件抽象层的结构可以分为以下三个级别:

  • (1) 系统结构抽象层。该层抽象了CPU核的特征,包括中断的传递、异常处理、上下文切换和CPU的启动等。
  • (2) 处理器变种抽象层。该层抽象了CPU变种的特征,如Cache、内存管理部件、浮点处理器和片上部件(包括存储器、中断控制器)等。
  • (3) 平台抽象层。该层抽象了不同平台的特征,如片外器件定时器和I/O寄存器等。

嵌入式操作系统内核包含任务管理、存储管理、任务间通信、异常和中断管理。从内核结构看,内核包含调度器、内核对象和内核服务三个公共构件。其中,调度器是嵌入式操作系统的心脏,提供一组算法决定何时执行哪个任务;内核对象是特殊的内核构件,帮助创建嵌入式应用;内核服务是内核在对象上执行的操作或通用操作

3.1.4 宏内核和微内核

内核分为宏内核、微内核和混合内核。

  • (1) 宏内核。宏内核管理着用户程序和硬件之间的系统资源,在宏内核架构中,用户服务和内核服务在同一空间中实现。其优点是实时性高,用户程序可直接调用内核功能结构比较简单,易于设计。缺点是代码耦合度高,缺少移植性
  • (2) 微内核。内核管理着所有的系统资源,在微内核中用户服务和内核服务在不同的地址空间中实现。其优点是结构清晰,有利于协作开发有良好的移植性,代码量非常少;有相当好的伸缩性、扩展性。缺点是系统性能偏低
  • (3) 混合内核。混合内核的结构其实与微内核相似,为了提高性能,混合内核中会将一些原本微内核中运行在用户层的功能模块放回内核中,而不常用的,或者需要的时间很长的功能模块还是放在用户层

3.1.5 实时性能指标

嵌入式系统的实时性能由硬件、实时操作系统和应用程序共同决定的。其中,RTOS内核的性能起着关键作用。常用的实时性能指标主要有:

  • (1) 任务切换时间。任务切换时间也称为上下文切换时间,是指CPU控制权由运行态的任务转移给另外一个就绪任务所需要的时间,包括在进行任务切换时,保存和恢复任务上下文所花费的时间,以及选择下一个待运行任务的调度时间。如上图。
  • (2) 中断处理相关的时间指标。中断延迟时间是指从中断发生到系统获知中断的时间。中断响应时间是指从中断发生到开始执行用户中断服务例程的时间;中断恢复时间是指用户中断服务例程结束回到被中断的代码之间的时间;任务响应时间是指从任务对应的中断产生到该任务真正开始运行的时间。如下图:
  • (3) 系统响应时间。指系统在发出处理请求到系统做出应答的时间,即调度延迟,这个时间的大小主要由内核任务调度算法决定。

3.2 多任务调度算法

3.2.1 调度算法的分类

多任务调度算法根据其时限的性质(软时限还是硬时限)、周期性、可抢占性、静态或动态等准则,可以分为如下几类:

  • (1) 软时限算法与硬时限算法。软实时系统只要求任务尽快执行,并不要求某一特定时间内完成;在硬实时系统中,要求任务不但是正确无误执行,而且还要准时完成
  • (2) 周期性与非周期性算法。周期性算法是指调度周期性的任务算法,即每隔两个时间单元会执行一次的任务。这个时间单元称为任务周期。非周期性任务是指任务请求处理的时间是不能预期的
  • (3) 可抢占与非抢占算法。可抢占算法是指正在运行的任务可能被其他任务打断,从而放弃CPU,让其他任务执行;非抢占算法是指任务会一直运行到结束或者等待其他资源而被阻塞,否则不会放弃CPU。
  • (4)静态算法与动态算法。静态算法是指任务的优先级在设计时就被确定,在任务运行的过程中不会再发生改变。动态算法是指任务的优先级在运行的过程中动态确定,并且会不断地发生变化和更新。
  • (5)单处理器调度与多处理器调度算法。单处理器算法仅处理一个处理器的情况,多处理器算法可以处理系统中多个处理器的情况。
  • (6)在线与离线调度算法。离线调度算法就是运行中使用的调度信息在系统运行之前就被确定,运行的过程中不再变更;在线调度算法是指系统运行的调度信息是运行过程中动态收集获取的

当前,大多数内核支持两种普通的调度算法,即基于优先级的抢占调度和时间轮转调度算法。

3.2.2 单调速率调度

单调速率调度(RMS)算法是一个静态的固定优先级算法,任务的优先级与周期表现为单调函数关系,执行最频繁的任务优先级最高,即任务的周期越短,优先级就越高

3.2.3 时间轮转调度

在时间轮转调度方式中,当有两个或两个以上就绪任务具有相同的优先级,且该优先级是就绪任务最高优先级时,调度程序会依次调度每个任务运行一个小时的时间,然后再调度另一个任务。

3.2.4 截止时间优先(EDF)调度

截止时间优先(EDF)调度算法是指进程的优先级随机行时段变化,即执行时限越靠近,则相对的优先级越高,系统中进程的优先级随时调整。

3.2.5 基于分区化的分区APPS调度算法

基于分区化的分区APPS调度算法:将处理器时间资源划分成多个独立时间片资源,以供多个分区实体可独立享用自己的时间片资源。一个计算资源模块内的所有分区都能按事先规定的时间期限完成工作,则称此计算资源模块所有分区是可调度的。分区调度一般采用时间优先调度(TPS),即周期小分区被优先安排调度。

3.3 优先级反转

优先级反转是指由于资源竞争,低优先级的任务在执行,而高优先级的任务在等待的现象。当具有不同优先级的任务中存在相互依赖关系时,就可能发生优先级反转。例如低优先级任务占用了某资源,而高优先级任务需要等待该资源释放才能运行,也就是要等待低优先级任务执行完才能运行。

若低优先级任务占用资源时间是不确定的,称为无界优先级反转;若是确定已知的,为有界优先级反转

优先级反转是由不同优先级任务间的资源同步引起的,在实际应用中是不可避免的,但可以使用资源控制协议将其降到最低限度。解决优先级反转问题的常用方法主要有两种:

3.3.1 优先级继承协议

为防止发生优先级的反转,多任务内核应允许动态改变任务的优先级。规则如下。可能出现阻塞链,从而会加长阻塞时间,甚至造成死锁

3.3.2 优先级天花板协议

优先级天花板是指控制访问临界资源的信号量的优先级天花板(简单地说,就是某个临界资源的优先级天花板),信号量的优先级天花板是所有使用该信号量的任务中具有最高优先级的任务的优先级。在任意时刻,一个运行系统的当前优先级天花板是此时所有正在使用的资源中具有最高优先级的优先级天花板。在优先级天花板协议下,一个请求任务只可以被一个任务阻塞,不会发生传递阻塞(即产生阻塞链),也不会发生死锁。规则如下:

四、嵌入式系统开发

4.1 开发平台

嵌入式系统的软件开发方法采用的是通用开发方法,而是交叉式开发方法,即软件在一个通用的平台上开发,而在另一个嵌入式目标平台上运行。这个用于开发嵌入式软件的通用平台称为宿主机系统,被开发的嵌入式系统称为目标机系统
◆如图所示是一个典型的交叉平台开发环境,包含如下三个高度集成的部分:

  • (1) 运行在宿主机和目标机上的强有力的交叉开发工具和实用程序
  • (2) 运行在目标机上的高性能、可裁剪的实时操作系统
  • (3) 连接宿主机和目标机的多种通信方式,如以太网、USB、串口、ICE(在线仿真器)或ROM仿真器等。

宿主机提供的基本开发工具是交叉编译器、交叉链接器和源代码调试器,作为目标机的嵌入式系统则可能提供动态装载器、链接装载器、监视器和调试代理等。

4.2 开发流程

嵌入式软件开发过程大体可以分为项目计划、需求分析、概要设计、详细设计、编码实现、下载、调试、固化、测试及运行等几个阶段,嵌入式软件的开发方法也可以采用软件工程中常见的开发模型,如瀑布模型和螺旋模型等。

4.2.1 过程模型

嵌入式系统快速面向对象过程(ROOPES)是一个迭代的基于UML的过程模型。无线互联网服务工程过程(WISEP)是一个用于无线互联网服务的专用领域的过程模型。

ROOPES模型的核心思想是螺旋式迭代。ROOPES提出了半螺旋式生命周期模型,它将瀑布模型和螺旋模型结合起来,进行适当裁剪来适应不同的项目。

在半螺旋模型中,需求分析和系统工程两个阶段在迭代之前进行,仅进行一次。在系统工程阶段,首先定义完整的高层架构;然后,定义架构的子系统,并进行软件和硬件的划分和功能分配。瀑布模型和半螺旋模型的主要差别在于螺旋部分,半螺旋模型要创建一系列的原型,原型的不同部分由不同的小组进行独立开发,然后在集成和测试阶段汇集到一起

4.2.2 分析与设计方法

目前,嵌入式系统常用的分析与设计方法主要有:

  • (1) 改进的结构化方法。在传统的结构化设计方法的基础上,提出了很多针对实时系统的设计方法如实时结构化分析与设计(RTSAD)、实时系统设计方法(DDARTS)和并发实时系统设计方法(CODARTS)等。但不利于复用性和可修改性
  • (2) 面向对象的方法。在可复用性和可修改性等问题上具有明显的优势。采用OOA和OOD可以很好地对大型、复杂的实时系统进行分析与设计。包括:实时的面向对象建模(ROOM)方法、实时系统面向对象技术(OOTRTS)等
  • (3) 基于构件的方法。构件具有清晰的接口和良好的复用机制,且能成为提高嵌入式开发效率和改善嵌入式软件质量的一种重要手段。在嵌入式系统设计中,实时内核、网络协议栈(TCP/IP)、嵌入式Web服务器、嵌入式数据库、嵌入式CORBA、数据压缩算法和视频处理算法等均可作为开发嵌入式系统的构件。CORBA、EJB、COM/DCOM等主要的几类构件形式也都会逐步用来构造嵌入式系统。
  • (4) 基于模型的开发方法(MBD)。基于模型的开发方法主要作用于初期设计阶段,可建立针对可执行模型的开发和集成框架,可执行模型可用来描述受控对象和控制计算机系统的行为

4.3 软硬件协同设计

软硬件协同设计方法即使用统一的方法和工具对软件和硬件进行描述、综合与验证。协同设计是一种在设计的最初阶段就软件与硬件两方面结合起来权衡功能的分配,在软件与硬件的并行设计过程中实现软硬件的交互,以满足系统的功能与性能要求的设计方法。它的一个最主要的优点就是,设计时充分考虑到了现有的软硬件资源情况,在软硬件功能的设计和仿真中,软硬件相互支持,在设计开发的早期阶段,软硬件的互相结合可以更好地发现问题和解决问题,避免了开发后期反复修改带来的一系列问题,有利于降低系统成本,缩短开发周期。

嵌入式系统的协同设计工具可以分为两类:协同合成工具和协同模拟工具

4.4 系统分析与设计

1. 需求分析。最重要的成果之一就是系统规格说明书。可以采用UML进行需求描述

2. 系统架构设计。在设计嵌入式系统的架构时,很难将软件和硬件完全分开。通常的处理方法是先考虑系统的软件架构,然后再考虑其硬件实现。系统架构的描述必须符合功能上和非功能上的需求,不仅要体现所要求的功能,还要满足成本、速度和功耗等非功能的约束。
软件架构的选择和设计在很大程度上取决于嵌入式系统的架构,主要考虑:系统的实时性要求、采用的设计模型、是否需要EOS

3. 硬件子系统设计。嵌入式系统的开发环境由4个部分组成,分别是目标硬件平台、EOS、编程语言和开发工具。嵌入式系统设计的主要挑战是如何使互相竞争的设计指标同时达到最佳化。在硬件子系统的设计中,首先,将硬件划分为部件(或模块),并绘制部件连接框图;其次,对每个部件进行细化,将系统分成更多可管理的小块,可以被单独实现。

4. 软件子系统设计。嵌入式系统的软件设计需要根据应用的实时性要求、应用场合、可用资源情况等诸多约束,进行合理的任务划分,其步骤如下:

  • (1) 首先,明确系统的实时性指标。究竟是软实时还是硬实时,最坏情况下的实时时限是多少等,以及确定任务大体的数目。
  • (2) 其次,进行可调度性分析。确保所有关键任务都满足调度时限。
  • (3) 最后,在具体的实现上,根据系统特点确定任务的优先级。如与中断关联的程序、紧迫性高的程序、任务频繁执行的程序应该设置更高的优先级,信息处理流程的前驱任务的优先级应该高于后续任务的优先级。

5. EOS的选择。在选择EOS时,需要考虑:EOS的功能、配套开发工具、EOS的可移植性、EOS的内存需求、EOS的附加软件包、EOS的实时性、EOS的灵活性。

6. 编程语言的选择。需要考虑通用性、可移植性、执行效率和可维护性等方面。

4.5  低功耗设计

低功耗设计:必须从软件和硬件两方面考虑。

1. 基于硬件的低功耗设计。主要从降低工作电压方面考虑。包括:

  • (1)极级电路低功耗设计。主要围绕处理器的低功耗特性和外围芯片的工作特点。
  • (2)选择低功耗处理器。在满足正常工作的前提下,尽量选择低电压工作的处理器。
  • (3)总线的低功耗设计。对于嵌入式系统来说,总线的宽度越宽,功耗就越大,在可能情况下,应该优先选用低功耗的总线器件。
  • (4)接口驱动电路的设计。设计接口驱动电路时,要选用静态电流低的外围芯片,还要考虑上拉/下拉电阻的选取、悬空引脚的处理和缓冲器使用等。
  • (5)分区分时代电技术。嵌入式处理器的工作电压与外围芯片的工作电压通常不一致,可以将它们分别划在不同的供电区域内,并且可以部分关闭空间分区内的电源,从而降低系统功耗。

2. 基于软件的低功耗设计,包括:

  • (1)编译优化技术。对于实现同样的功能,不同实现算法所消耗的时间不同;使用的指令不同,消耗功率也不同。
  • (2)软件与硬件的协同设计。可以通过软件与硬件的功能再分配,将用硬件实现的功能由软件实现,从而减少硬件电路的规模,进而达到降低功耗的目的。
  • (3)算法优化。对于软件实现的功能,应尽量采用时间复杂度低的算法,来降低算法执行时间,从而降低功耗。

五、嵌入式系统验证

5.1 嵌入式系统的验证和确认

嵌入式系统开发完成后,是否达到预期目的,需要进行验证与确认工作。定义如下:

  • 验证。通过提供客观证据,确认已满足了规定的要求。正确地做事
  • 确认。通过提供客观证据,确认对特定的预期用途或申请的要求已经得到满足。做正确的事

5.2 嵌入式系统软件的测试

5.2.1 软件测试概述

通常,软件验证的方法主要包括评审、分析和测试等三种方法。而软件测试是软件开发阶段中非常重要的一个过程,是软件验证工作的核心活动。传统的软件测试是基于过程的测试方法。传统的软件验证与确认活动采用双V型的方法,如下图:

传统测试方法存在以下不可避免的问题:

  • (1) 如果测试不够详尽,那么Bug就会遗留在产品代码中并潜在地造成严重的问题。
  • (2) 测试常常在代码编写完成之后进行
  • (3) 测人员对软件系统理解不够,会漏掉一些重要内容未被测试到。
  • (4) 文档优劣直接影响测试效果。文档和代码往往存在不一致的地方,有可能造成未发现缺陷。
  • (5) 如果缺乏自动化测试,不能保证每次重复测试的一致性。
  • (6) 传统的纠正错误的方法极有可能是在一个地方纠正了错误而又在别的地方引入了新的问题

5.2.2 基于需求的软件测试方法

民用航空飞行器的机载软件安全标准D0-178B/C的软件生命周期分类:

  • (1) 软件计划过程
  • (2) 软件开发过程:又包括软件需求过程、设计过程、编码过程、集成过程
  • (3) 软件综合过程:又包括软件验证过程、软件配置管理过程、软件质量保证过程、审定联络过程

D0-178B/C提出了基于需求的软件测试方法。将软件测试过程分为三种测试方法:软硬件集成测试、软件集成测试、低级需求的测试。软硬件集成测试是运行在目标机上的,软件集成测试和低级需求的测试环境没有要求。

基于需求的覆盖率分析(TCA):分析基于需求测试用例对软件需求的覆盖程度
基于结构的覆盖率分析(SCA):分析基于需求测试用例对代码结构的覆盖程度。主要包括:

  • ①结构覆盖率分析在源代码上进行
  • ②确认结构覆盖率已经达到软件级别要求的程度
  • ③对A级软件,如果生成的目标码不能直接追溯到源代码,要进行目标码覆盖率分析(OCA)
  • ④覆盖率标准满足100%TCA和SCA

代码结构没有被覆盖的处理原则

  • (1) 如果未覆盖代码有需求而无法测试用例,则要增加测试用例。
  • (2) 如果未覆盖代码无需求,则要增加需求,并设计相应测试用例。
  • (3) 如果是死代码,即因为设计错误而永远无法被执行或使用的代码,则要提出问题报告来删除
  • (4) 如果是未激活代码,即不准备被运行或使用的代码,或在特定硬件的配置条件下才会被执行的代码。则要给出分析描述这些代码是正确的,并且这些代码不会被错误地执行到

5.2.3 形式化方法

形式化方法的本质是基于数学的方法来描述目标软件系统属性的一种技术。形式化方法的意义在于能帮助发现其他方法不容易发现的系统描述不一致,不明确或不完整的情况,有助于增加软件开发人员对系统的理解,因此形式化方法是提高软件系统,特别是安全关系系统的安全性与可靠性的重要手段。形式化方法分为如下几类:

  • (1) 面向对象的形式化方法,通过定义状态和操作进行建模,如Z语言、VDM、B、Object-Z等方法。
  • (2) 面向属性的形式化方法,如OBJ3、Larch等方法。
  • (3) 基于并发性的形式化方法,如OCS、AOP、CSP、LOTOS等方法。
  • (4) 基于实时性的形式化方法,如TRIO、RTOZ等方法。

5.3 基于系统的构件测试方法

基于系统的构件测试方法的测试对象是软件构件,传统测试目的是暴露软件中隐藏的错误和缺陷。验证软件是否正确实现用户需求。而基于构件的测试目的如下:

  • (1)是否按照需求划分构造高质量的构件。
  • (2)是否按照构件标准和构件模型构造构件。
  • (3)是否选择并部署适合系统的可重用构件。
  • (4)是否在系统中正确地复用构件。
  • (5)是否正确地修改或升级构件。

由于目的的差异,给构件测试带来了众多不确定问题,主要表现在:异构性、源代码不可得性、演化性、不确定、测试充分性准则难以确定。

构件测试过程分为单元测试、集成测试、系统测试和回归测试


(1)单元测试的主要目的是发现构件本身的错误,其常用技术包括随机测试、等价类测试、边界值测试和接口变异测试等。测试任务包括:

  • 使用白盒测试确认构件的内部逻辑、数据和程序结构
  • 使用黑盒测试确认构件的外部功能、行为和接口
  • 度量其性能。
  • 报告测试结果、程序错误和测试覆盖率。

(2)集成测试是发现构件与应用软件交互的错误,其任务是:

  • 构件之间的通信和交互关系
  • 需要关注的两个问题是构件的集成顺序和如何测试新集成的构件
  • 选择合适的构件,就需要考虑构件是否符合系统需求、构件质量是否足够好、构件对系统其他部分是否有影响。

(3)系统测试是测试整个系统的功能与性能

(4)回归测试的主要任务是:

  • 确定变化。构件划分、接口、设计、程序代码。
  • 分析变化影响。构件功能、接口、结构、行为。
  • 选择可复用的测试实例
  • 增加新的测试实例

相关推荐

Web应用系统全面解析:从架构设计到测试部署的核心要点https://shuaici.blog.csdn.net/article/details/156718262信息系统运维管理全解:核心指标、流程优化与系统转换实战https://shuaici.blog.csdn.net/article/details/156693323【2025博客之星】投个票呗,谢谢啦https://www.csdn.net/blogstar2025/detail/122

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐