软件架构之嵌入式系统设计(2)

软件架构之嵌入式系统设计(2)

    • 12.4 嵌入式网络系统
      • 12.4.1 现场总线网
      • 12.4.2 家庭信息网
      • 11.4.3 无线数据通信网
      • 12.4.4 嵌入式 Internet
    • 12.5 嵌入式数据库管理系统
      • 12.5.1 使用环境的特点
      • 12.5.2 系统组成与关键技术
    • 12.6 实时系统与嵌入式操作系统
      • 12.6.1 嵌入式系统的实时概念
      • 12.6.2 嵌入式操作系统概述
      • 12.6.3 实时嵌入式操作系统
      • 12.6.4 主流嵌入式操作系统介绍
    • 12.7 嵌入式系统开发设计
      • 12.7.1 嵌入式系统设计概述
      • 12.7.2 开发模型与设计流程
      • 12.7.3 嵌入式系统设计的核心技术
      • 12.7.4 嵌入式开发设计环境
      • 12.7.5 嵌入式软件设计模型
      • 12.7.6 需求分析
      • 12.7.7 系统设计
      • 12.7.8 系统集成与测试

12.4 嵌入式网络系统

嵌入式网络是用于连接各种嵌入式系统,使之可以互相传递信息、共享资源的网络系统。嵌入式系统在不同的场合采用不同的连接技术,如在家庭居室采用家庭信息网,在工业自动化领域采用现场总线,在移动信息设备等嵌入式系统则采用移动通信网,此外,还有一些专用连接技术用于连接嵌入式系统。

12.4.1 现场总线网

现场总线(FieldBus)是 20 世纪 80 年代中期继模拟仪表控制系统、集中式数字控制系统及集散控制系统之后,发展起来的一项计算机控制技术,它是当今自动化控制领域技术发展的热点之一,通常也被称作工业自动化领域的计算机局域网。

现场总线是一种将数字传感器、变换器、工业仪表及控制执行机构等现场设备与工业过程控制单元、现场操作站等互相连接而成的网络。它具有全数字化、分散、双向传输和多分支的特点,是工业控制网络向现场级发展的产物。

现场总线是一种低带宽的底层控制网络,位于生产控制和网络结构的底层,因此也被称为底层网(Infranet)。它主要应用于生产现场,在测量控制设备之间实现双向的、串行的、多节点的数字通信。

现场总线控制系统(Field Control System,FCS)是运用现场总线连接各控制器及仪表设备而构成的控制系统,该控制系统将控制功能彻底下放到现场,降低了安装成本和维护费用。实际上 FCS 是一种开放的、具有互操作性的、彻底分散的分布式控制系统。

嵌入式现场控制系统将专用微处理器置入传统的测量控制仪表,使其具备数字计算和数字通信能力。它采用双绞线、电力线或光纤等作为总线,把多个测量控制仪表连接成网络,并按照规范标准的通信协议,在位于现场的多个微机化测量控制设备之间及现场仪表与远程监控计算机之间,实现数据传输与信息交换,形成了各种适用于实际需要的自动控制系统。简言之,现场总线控制系统把单个分散的测量控制设备变成网络节点,以现场总线为纽带,使这些分散的设备成为可以互相沟通信息共同完成自动控制任务的网络系统。借助于现场总线技术,传统上的单个分散控制设备变成了互相沟通、协同工作的整体。

12.4.2 家庭信息网

家庭信息网是一种把家庭范围内的个人计算机、家用电器、水、电、气仪表、照明设备和网络设备、安全设备连接在一起的局域网。其主要功能是集中控制上述设备并将其接入Internet,以共享网络资源和服务。此外,家庭信息网还可以扩展至整幢住宅甚至整个社区,成为智能住宅小区和智能社会的基础。 在家庭信息网络系统中,所有的家庭设备都是智能化的,包括家用电器、水、电、气仪表,以及照明设备等。它们能够互相通信,并通过家庭网关接入 Internet。家庭信息网络的实现为人们提供了更加安全、便捷、舒适的家庭环境。如主人外出时,大门自动关闭、上锁,监视系统自动开启,家中出现异常情况能够自动通知主人,对家中各种设备能够随时随地进行控制,仪表数据能够自动上传等。

家庭信息网需要解决两个基本问题:
(1)如何将家用电器,水、电、气仪表,照明设备等互相连接起来。
(2)如何实现这些连在一起的设备间的互操作,即家庭信息网上的设备可以在需要的时候自动请求服务,相关设备可以提供服务或接受请求并对其进行处理。家庭信息网可以采用不同的拓扑结构,如总线型、星型结构等。家庭信息网内部还可以进一步划分出若干控制子网和数据子网,其中控制子网类似于现场总线,是一种带宽不高、主要用于发送和接收控制信息的网络。而数据子网对带宽的要求则较高,连接在其上的设备需要传送大量的数据信息。

11.4.3 无线数据通信网

近年来,随着移动电话通信的迅速发展,个人计算机的迅速普及,多种便携式计算机,例如膝上型计算机、笔记本计算机、手持式计算机等迅速增多,固定计算机之间的数据通信已不能满足需要。人们希望能随时随地进行数据信息的传送和交换,于是数据通信传输媒体开始从有线扩展到无线,出现了无线移动数据通信。 无线数据通信网是一种通过无线电波传送数据的网络系统。它是在有线数据通信的基础上发展起来的,能实现移动状态下的数据通信。通过无线数据通信网,智能手机、PDA 及
笔记本计算机可以互相传递数据信息,并接入 Internet。无线数据通信网分为短程无线网和无线 Internet。短程无线网主要包括 802.11、蓝牙、IrDA 及 HomeRF 等。无线 Internet 或移动 Internet 主要采用两种无线连接技术:一种是移动无线接入技术,例如,GSM、GPRS、CDPD(Cellular Digital Packet Data)等;另一种是固定无线接入技术,包括微波、扩频通信、卫星及无线光传输等。

12.4.4 嵌入式 Internet

随着 Internet 和嵌入式技术的飞速发展,越来越多的信息电器,如 Web 可视电话、机顶盒以及信息家电等嵌入式系统产品都要求与 Internet 连接,来共享 Internet 所提供的方便、快捷、无处不在的信息资源和服务,即嵌入式 Internet 技术。嵌入式 Internet 技术在智能交通、家政系统、家庭自动化、工业自动化、POS 及电子商务等领域具有广阔的应用前景。

1.嵌入式 Internet 的接入方式
嵌入式设备上集成了 TCP/IP 协议栈及相关软件,这类设备可以作为 Internet 的一个节点,分配有 IP 地址,与 Internet 直接互联。这种接入方式的特点是:

  • 设备可以直接连接到 Internet,对 Internet 进行透明访问;
  • 不需要专门的接入设备;
  • 设备的协议标准化;
  • 需要的处理器性能和资源相对较高;
  • 需要占用 IP 资源,由于目前 IPv4 资源紧张,这种方案在 IPv6 网中可能更现实。
  • 通过网关接入 Internet,即采用瘦设备方案,设备不直接接入 Internet,不需要复杂的TCP/IP 协议全集,而是通过接入设备接入 Internet。如嵌入式微型网互联技术(Embedded Micro Internet-working Technology,EMIT)便是一种将嵌入式设备接入 Internet 的技术。这种接入方式的特点是:
  • 对接入设备的性能和资源要求较低;
    -接入设备的协议栈开销较小;
  • 不需要分配合法的 IP 地址;
  • 可以降低系统的整体成本;
    -设备可以实现多样化、小型化。

2.嵌入式 TCP/IP 协议栈
嵌入式 TCP/IP 协议栈完成的功能与完整的 TCP/IP 协议栈是相同的,但是由于嵌入式系统的资源限制,嵌入式协议栈的一些指标和接口等与普通的协议栈可能有所不同。

(1)嵌入式协议栈的调用接口与普通的协议栈不同。普通协议栈的套接字接口是标准的,应用软件的兼容性好,但是,实现标准化接口的代码开销、处理和存储开销都是巨大的。因此,多数厂商在将标准的协议栈接口移植到嵌入式系统上的时候,都做了不同程度的修改简化,建立了高效率的专用协议栈,它们所提供的 API 与通用协议栈的 API 不一定完全一致。

(2)嵌入式协议栈的可裁剪性。嵌入式协议栈多数是模块化的,如果存储器的空间有限,可以在需要时进行动态安装,并且都省去了接口转发、全套的 Internet 服务工具等几个针对嵌入式系统非必需的部分。

(3)嵌入式协议栈的平台兼容性。一般协议栈与操作系统的结合紧密,大多数协议栈是在操作系统内核中实现的。协议栈的实现依赖于操作系统提供的服务,移植性较差。嵌入式协议栈的实现一般对操作系统的依赖性不大,便于移植。许多商业化的嵌入式协议栈支持多种操作系统平台。

(4)嵌入式协议栈的高效率。嵌入式协议栈的实现通常占用更少的空间,需要的数据存储器更小,代码效率高,从而降低了对处理器性能的要求。

12.5 嵌入式数据库管理系统

随着嵌入式技术的发展,嵌入式数据库逐步走向应用。本质上,嵌入式数据库是由通用数据库发展而来的,在各种嵌入式设备上或移动设备上运行,在嵌入式系统中更显示出其优越性,由于受到嵌入式系统本身应用环境的制约,嵌入式数据库有着与通用数据库不同的特点。

通常,嵌入式数据库管理系统就是在嵌入式设备上使用的数据库管理系统。由于用到嵌入式数据库管理系统的多是移动信息设备,诸如掌上电脑、PDA、车载设备等移动通信设备,位置固定的嵌入式设备很少用到,所以,嵌入式数据库也称为移动数据库或嵌入式移动数据库。其作用主要是解决移动计算环境下数据的管理问题,移动数据库是移动计算环境中的分
布式数据库。

在嵌入式系统中引入数据库技术,主要是因为直接在嵌入式操作系统或裸机之上开发信息管理应用程序存在如下缺点:
(1)所有的应用都要重复进行数据的管理工作,增加了开发难度和代价。
(2)各应用之间的数据共享性差。
(3)应用软件的独立性、可移植性差,可重用度低。
在嵌入式系统中引入数据库管理系统可以在很大程度上解决上述问题,提高应用系统的开发效率和可移植性。

12.5.1 使用环境的特点

嵌入式数据库系统是一个包含嵌入式数据库管理系统在内的跨越移动通信设备、工作站或台式机及数据服务器的综合系统,系统所具有的这个特点及该系统的使用环境对嵌入式数据库管理系统有着较大的影响,直接影响到嵌入式数据库管理系统的结构。其使用环境的特点可以简单地归纳如下:
(1)设备随时移动性,嵌入式数据库主要用于移动信息设备上,设备的位置经常随使用者一起移动。

(2)网络频繁断接,移动设备或移动终端在使用的过程中,位置经常发生变化,同时也受到使用方式、电源、无线通信及网络条件等因素的影响。所以,一般并不持续保持网络连接,而是经常主动或被动地间歇性断接和连接。

(3)网络条件多样化,由于移动信息设备位置的经常变化,所以移动信息设备同数据服务器在不同的时间可能通过不同的网络系统连接。这些网络在网络带宽、通信代价、网络延迟、服务质量等方面可能有所差异。

(4)通信能力不对称,由于受到移动设备的资源限制,移动设备与服务器之间的网络通信能力是非对称的。移动设备的发送能力都非常有限,使得数据服务器到移动设备的下行通信带宽和移动设备到数据服务器之间的上行带宽相差很大。

12.5.2 系统组成与关键技术

一个完整的嵌入式数据库管理系统由若干子系统组成,包括主数据库管理系统、同步服务器、嵌入式数据库管理系统、连接网络等几个子系统,如图 12-6 所示。
在这里插入图片描述
(1)嵌入式数据库管理系统。嵌入式数据库管理系统是一个功能独立的单用户数据库管理系统。它可以独立于同步服务器和主数据库管理系统运行,对嵌入式系统中的数据进行管理,也可以通过同步服务器连接到主服务器上,对主数据库中的数据进行操作,还可以通过多种方式进行数据同步。

(2)同步服务器。同步服务器是嵌入式数据库和主数据库之间的连接枢纽,保证嵌入式数据库和主数据库中数据的一致性。

(3)数据服务器。数据服务器的主数据库及数据库管理系统可以采用 Oracle 或 Sybase等大型通用数据库系统。

(4)连接网络。主数据库服务器和同步服务器之间一般通过高带宽、低延迟的固定网络进行连接。移动设备和同步服务器之间的连接根据设备的具体情况可以是无线局域网、红外连接、通用串行线或公众网等。

1.嵌入式移动数据库在应用中的关键
嵌入式移动数据库在实际应用中必须解决好数据的一致性(复制性)、高效的事务处理和数据的安全性等问题。

(1)数据的一致性。嵌入式移动数据库的一个显著特点是,移动数据终端之间及与同步服务器之间的连接是一种弱连接,即低带宽、长延迟、不稳定和经常性断接。为了支持用户在弱环境下对数据库的操作,现在普遍采用乐观复制方法(Optimistic Replication 或 Lazy Replication)允许用户对本地缓存上的数据副本进行操作。待网络重新连接后再与数据库服务器或其他移动数据终端交换数据修改信息,并通过冲突检测和协调来恢复数据的一致性。

(2)高效的事务处理。移动事务处理要在移动环境中频繁的、可预见的断接情况下进行。为了保证活动事务的顺利完成,必须设计和实现新的事务管理策略和算法。根据网络连接情况来确定事务处理的优先级,网络连接速度高的事务请求优先处理;
根据操作时间来确定事务是否迁移,即长时间的事务操作将全部迁移到服务器上执行,无须保证网络的一直畅通;根据数据量的大小来确定事务是上载执行还是下载数据副本执行后上载;完善的日志记录策略;事务处理过程中,网络断接处理时采用服务器发现机制还是采用客户端声明机制;事务移动(如:位置相关查询)过程中的用户位置属性的实时更新。

(3)数据的安全性。许多应用领域的嵌入式设备是系统中数据管理或处理的关键设备,因此嵌入式设备上的数据库系统对存取权限的控制较严格。同时,许多嵌入式设备具有较高的移动性、便携性和非固定的工作环境,也带来潜在的不安全因素。此外,某些数据的个人隐私性又很高,因此在防止碰撞、磁场干扰、遗失、盗窃等方面对个人数据的安全性需要提供充分的保证。保证数据安全的主要措施是:对移动终端进行认证,防止非法终端的欺骗性接入;对无线通信进行加密,防止数据信息泄漏;对下载的数据副本加密存储,以防移动终端物理丢失后的数据泄密。

2.移动数据库管理系统的特性
移动 DBMS 的计算环境是传统分布式 DBMS 的扩展,它可以看做客户端与固定服务器结点动态连接的分布式系统。因此移动计算环境中的数据库管理系统是一种动态分布式数据库管理系统。由于嵌入式移动数据库管理系统在移动计算的环境下应用在嵌入式操作系统之上,所以它有自己的特点和功能需求:

(1)微核结构,便于实现嵌入式功能。考虑到嵌入式设备的资源有限,嵌入式移动 DBMS 应采用微型化技术实现,在满足应用的前提下紧缩其系统结构以满足嵌入式应用的需求。

(2)对标准 SQL 的支持。嵌入式移动 DBMS 应能提供对标准 SQL 的支持。支持SQL92 标准的子集,支持数据查询(连接查询、子查询、排序、分组等)、插入、更新、删除多种标准的 SQL 语句,充分满足嵌入式应用开发的需求。

(3)事务管理功能。嵌入式移动 DBMS 应具有事务处理功能,自动维护事务的完整性、原子性等特性;支持实体完整性和引用完整性。

(4)完善的数据同步机制。数据同步是嵌入式数据库最重要的特点。通过数据复制,可以将嵌入式数据库或主数据库的变化情况应用到对方,保证数据的一致性。 嵌入式移动数据库管理系统的数据同步机制应具有以下几个特点:

  • 提供多种数据同步方式,具有上载同步、下载同步和完全同步 3 种同步方式;
  • 具有完善的冲突检测机制和灵活的冲突解决方案,具有冲突日志记录功能;
  • 支持快速同步,系统同步时,只传递变化的数据,节省了大量的同步时间;
  • 支持表的水平分割和垂直分割复制,最大限度地降低了嵌入式数据库的大小;
  • 支持异构数据源连接同步,可以用支持 ODBC 的异构数据源作为主数据库和嵌入式设备上的数据库进行数据同步;
  • 具有主动同步的功能,允许用户对系统提供的同步事件自定义过程实现,提供了最大灵活度的同步过程。

(5)支持多种连接协议。嵌入式移动 DBMS 应支持多种通信连接协议。可以通过串行通信、TCP/IP、红外传输、蓝牙等多种连接方式实现与嵌入式设备和数据库服务器的连接。

(6)完备的嵌入式数据库管理功能。嵌入式移动 DBMS 应具有自动恢复功能,基本无须人工干预进行嵌入式数据库管理并能够提供数据的备份和恢复,保证用户数据的安全可靠。

(7)平台无关性与支持多种嵌入式操作系统。嵌入式移动 DBMS 应能支持 Windows CE、Palm OS 等多种目前流行的嵌入式操作系统,这样才能使嵌入式移动数据库管理系统不受移动终端的限制。

(8)零管理特性。嵌入式数据库具有自动恢复功能,不需要人工干预就可以进行嵌入式数据库管理,并提供数据的备份与同步。

另外,一种理想的状态是用户只用一台移动终端(如手机)就能对与它相关的所有移动数据库进行数据操作和管理。这就要求前端系统具有通用性,而且要求移动数据库的接口有统一、规范的标准。前端管理系统在进行数据处理时自动生成统一的事务处理命令,提交当前所连接的数据服务器执行。这样就有效地增强了嵌入式移动数据库管理系统的通用性,扩大了嵌入式移动数据库的应用前景。

总之,在嵌入式移动数据库管理系统中还需要考虑诸多传统计算环境下不需要考虑的问题,如对断接操作的支持、对跨区长事务的支持、对位置相关查询的支持、对查询优化的特殊考虑及对提高有限资源的利用率和对系统效率的考虑等。为了有效地解决上述问题,诸如复制与缓存技术、移动事务处理、数据广播技术、移动查询处理与查询优化、位置相关的数据处理及查询技术、移动信息发布技术、移动 Agent 等技术仍在不断地发展和完善,会进一步促进嵌入式移动数据库管理系统的发展。

12.6 实时系统与嵌入式操作系统

简单地说,实时系统可以看成对外部事件能够及时响应的系统。这种系统最重要的特征是时间性,也就是实时性,实时系统的正确性不仅依赖于系统计算的逻辑结果,还依赖于产生这些结果的时间。

目前,大多数实时系统都是嵌入式的,并且实际运行中的嵌入式系统也都有实时性的需求,因此,在诸多类型的嵌入式操作系统中,实时嵌入式操作系统是最具代表性的一类,它融合了几乎所有类型的嵌入式操作系统的特点,所以本节主要以实时嵌入式操作系统的特性和概念为主线,对嵌入式操作系统的基本概念与特点、基本架构、内核服务、内核对象与内核服务等核心内容进行全面的介绍。

12.6.1 嵌入式系统的实时概念

现实世界中,并非所有的嵌入式系统都具有实时特性,所有的实时系统也不一定都是嵌入式的。但这两种系统并不互相排斥,兼有这两种系统特性的系统称为实时嵌入式系统。它们之间的关系如图 12-7 所示。
在这里插入图片描述
(1)逻辑(或功能)正确,是指系统对外部事件的处理能够产生正确的结果。
(2)时间正确,是指系统对外部事件的处理必须在预定的周期内完成。
(3)死线(Deadline)或时限、死限、截止时间,是指系统必须对外部事件进行处理的最迟时间界限,错过此界限可能产生严重的后果。通常,计算必须在到达时限前完成。
(4)实时系统,是指功能正确和时间正确同时满足的系统,二者同等重要。换言之,实时系统有时间约束并且是时限驱动的。但是在某些系统中,为了保证功能正确性,有可能牺牲时间正确性。
对于实时系统的划分,通常还可以根据实时性的强弱,即系统必须对外部事件做出响应的时间长短,将实时系统分为:
(1)强实时系统,其系统的响应时间非常短,通常在毫秒或微秒级。
(2)一般实时系统,其系统响应时间比强实时系统要求要低,通常在秒级。
(3)弱实时系统,其系统响应时间可以更长,也可以随系统负载的轻重而变化。

根据对错失时限的容忍程度或后果的严重性,可以将实时系统分为软实时系统和硬实时系统。
(1)硬实时系统,指系统必须满足其灵活性接近零时限要求的实时系统。时限必须满
足否则就会产生灾难性后果,并且时限之后得到的处理结果或是零级无用,或是高度贬值。
(2)软实时系统,指必须满足时限的要求,但是有一定灵活性的实时系统。时限可以包含可变的容忍等级、平均的截止时限,甚至是带有不同程度的、可接受性的响应时间的统计分布。在软实时系统中,时限错失通常不会导致系统失败等严重后果。表 12-2 是对软实时和硬实时系统的对比。
在这里插入图片描述
通过比较,可知由于错过时限对软实时系统的运行没有决定性的影响,一个软实时系统不必预测是否可能有悬而未决的时限错失。相反,软实时系统在探知到错失一个时限后可以启动一个恢复进程。

在实时系统中,任务的开始时间跟时限或完成时间同样重要,由于任务缺少需要的资源,如 CPU 和内存,就有可能阻碍任务执行的开始并直接导致错失任务的完成时限,因此时限问题演变成了资源的调度问题。
这一点对调度算法和任务设计都有至关重要的影响。

12.6.2 嵌入式操作系统概述

所谓嵌入式操作系统就是指运行在嵌入式计算机系统上支持嵌入式应用程序的操作系统,是用于控制和管理嵌入式系统中的硬件和软件资源、提供系统服务的软件集合。嵌入式操作系统是嵌入式软件的一个重要组成部分。它的出现提高了嵌入式软件开发的效率,提高了应用软件的可移植性,有力地推动了嵌入式系统的发展。

1.嵌入式操作系统的特点
与通用操作系统相比,嵌入式操作系统主要有以下特点:

(1)微型化:嵌入式操作系统的运行平台不是通用计算机,而是嵌入式计算机系统。这类系统一般没有大容量的内存,几乎没有外存,因此,嵌入式操作系统必须做得小巧,以尽量少占用系统资源。为了提高系统的执行速度和可靠性,嵌入式系统中的软件一般都固化在存储器芯片中,而不是存放在磁盘等载体中。

(2)代码质量高:在大多数应用中,存储空间依然是宝贵的资源,这就要求程序代码的质量要高,代码要尽量精简。

(3)专业化:嵌入式系统的硬件平台多种多样,处理器更新速度快,每种都是针对不同的应用领域而专门设计。因此,嵌入式操作系统要有很好的适应性和移植性,还要支持多种开发平台。

(4)实时性强:嵌入式系统广泛应用于过程控制、数据采集、通信、多媒体信息处理等要求实时响应的场合,因此实时性成为嵌入式操作系统的又一特点。

(5)可裁减、可配置:应用的多样性要求嵌入式操作系统具有较强的适应能力,能够根据应用的特点和具体要求进行灵活配置和合理裁减,以适应微型化和专业化的要求。

2.嵌入式操作系统的分类
嵌入式操作系统的种类繁多,可以从不同角度对其进行分类。从嵌入式操作系统的获得形式上,可以分为商业型和免费型两类:

(1)商业型。商业型嵌入式操作系统一般功能稳定、可靠,有完善的技术支持、齐全的开发工具和售后服务。如 WindRiver 公司的 VxWorks 、pSOS 和 Palm 公司的 Palm OS 等。但是,价格昂贵,用户通常得不到系统的源代码。

(2)免费型。免费型嵌入式操作系统的优势在于价格方面,另外,应用系统开发者可以获得系统源代码,给开发带来了方便。但免费型的操作系统功能简单、技术支持差、系统的稳定性也不够好。典型代表系统有嵌入式 Linux、uC/OS 等。 从嵌入式操作系统的实时性上,可以分为实时嵌入式操作系统和非实时嵌入式操作系统两类。

(1)实时嵌入式操作系统(Real-Time Embedded OS,RTEOS)。实时嵌入式操作系统支持实时系统工作,其首要任务是调度一切可利用资源,以满足对外部事件响应的实时时限,其次着眼于提高系统的使用效率。实时嵌入式操作系统主要用在控制、通信等领域。目前,大多数商业嵌入式操作系统都是实时操作系统。

(2)非实时嵌入式操作系统。这类操作系统不特别关注单个任务响应时限,其平均性能、系统效率和资源利用率一般较高,适合于实时性要求不严格的消费类电子产品,如个人数字助理、机顶盒等。

12.6.3 实时嵌入式操作系统

整体上看,一个嵌入式系统的实时性能是由硬件、实时操作系统及应用程序共同决定的,其中,嵌入式实时操作系统内核的性能起着关键的作用。通常,有两种类型的实时嵌入式操作系统:实时内核型的 RTEOS 与通用型的 RTEOS。

实时内核型的 RTEOS:这类操作系统,驱动程序传统嵌在内核之中,应用程序和中间件实现在标准的应用程序接口(APIs,Application Programming Interfaces)之上。

实时通用型的 RTEOS:这类操作系统,驱动程序并非深度嵌入到内核中,而是在内核之上实现,并且仅包含少数必要的驱动程序,应用程序和中间件可以直接在驱动程序之上实现,而不必在标准的 APIs 实现。它们的区别如图 12-8 所示。
实时嵌入式操作系统和通用操作系统之间的功能有很多相似之处,例如,它们都支持多任务,支持软件和硬件的资源管理,以及都为应用提供基本的操作系统服务。
在这里插入图片描述
1.嵌入式实时操作系统的关键特性
与通用操作系统相比,实时嵌入式操作系统在功能上具有很多特性。实时嵌入式操作系统特有的不同于通用操作系统的关键特性主要有:

  • 满足嵌入式应用的高可靠性;
  • 满足应用需要的可裁减能力;
  • 内存需求少;
  • 运行的可预测性;
  • 采用实时调度策略;
  • 系统的规模紧凑;
  • 支持从 ROM 或 RAM 上引导和运行;
  • 对不同的硬件平台均有更好的可移植性。

2.嵌入式实时操作系统的实时性能指标在评估实时操作系统设计性能时,时间性能指
标是最重要的一个性能指标,常用的时间性能指标主要有如下几个:

(1)任务切换时间:是指 CPU 控制权由运行态的任务转移给另外一个就绪任务所需要的时间,包括在进行任务切换时,保存和恢复任务上下文所花费的时间及选择下一个待运行任务的调度时间,该指标跟微处理器的寄存器数目和系统结构有关。相同的操作系统在不同微处理器上运行时所花费的时间可能不同。任务切换时间所对应的时序图如图 12-9 所示。
在这里插入图片描述
(2)中断处理相关的时间指标,对应的中断时序图如图 12-10 所示
在这里插入图片描述
中断延迟时间,是指从中断发生到系统获知中断的时间,主要受系统最大关中断时间的影响,

关中断时间越长,中断延迟也就越长;
中断处理执行时间,该时间由具体的应用决定;
中断响应时间,是指从中断发生到开始执行用户中断服务例程的时间;
中断恢复时间,是指用户中断服务例程结束回到被中断的代码之间的时间;

最大关中断时间,包含两个方面:一是内核最大关中断时间,即内核在执行临界区代码时关中断;二是应用关中断时间,关中断最大时间是这两种关中断时间的最大值;任务响应时间,是指从任务对应的中断产生到该任务真正开始运行的时间;
对于可抢占式调度,中断恢复的时间还要加上进行任务切换和恢复新的任务上下文的时
间。

(3)系统响应时间:指系统在发出处理请求到系统做出应答的时间,即调度延迟,这个时间的大小主要由内核任务调度算法所决定。 作为总结,典型的可抢占实时内核的性能指标计算方法如表 12-3 所示。
在这里插入图片描述

12.6.4 主流嵌入式操作系统介绍

迄今为止,据不完全统计,世界上现有的嵌入式操作系统的总数达几百个之多。其中最常用的有十几种,这些操作系统在各自的应用领域都有很高的知名度和广大的用户群。表 12-4 选取了一些业界常见的嵌入式操作系统加以比较。
在这里插入图片描述
在这里插入图片描述

12.7 嵌入式系统开发设计

嵌入式系统设计的主要任务是定义系统的功能、决定系统的架构,并将功能映射到系统实现架构上。这里,系统架构既包括软件系统架构也包括硬件系统架构。一种架构可以映射到各种不同的物理实现,每种实现表示不同的取舍,同时还要满足某些设计指标,并使其他的设计指标也同时达到最佳化。

嵌入式系统的设计方法跟一般的硬件设计、软件开发的方法不同,是采用硬件和软件协同设计的方法,开发过程不仅涉及软件领域的知识,还涉及硬件领域的综合知识,甚至还涉及机械等方面的知识。要求设计者必须熟悉并能自如地运用这些领域的各种技术,才能使所设计的系统达到最优。

虽然嵌入式系统应用软件的设计方案随应用领域的不同而不同,但是嵌入式系统的分析与设计方法也遵循软件工程的一般原则,许多成 熟的分析和设计方法都可以在嵌入式领域得到应用。嵌入式系统的开发过程同样也包括需求分析、系统设计、实现和测试几个基本阶段,并且每个阶段都有其独有的特征和重点。

本节主要介绍嵌入式系统开发设计的技术与方法,并从嵌入式系统应用和计算模型的角度分析应用软件设计的方法及设计过程中面临的主要问题。最后,讨论嵌入式领域软件移植的相关问题。

12.7.1 嵌入式系统设计概述

进行嵌入式系统设计前,应明确嵌入式系统设计本身的特点及衡量嵌入式系统设计的一些主要的技术指标。

1.嵌入式系统设计的特点
与通常的系统设计相比,嵌入式系统设计具有以下特点:

  • 软、硬件协同并行开发;
  • 微处理器的类型多种多样;
    -实时嵌入式操作系统具有多样性;
  • 与通用系统开发相比,可利用系统资源很少;
  • 应用支持少;
  • 要求特殊的开发工具;
  • 软、硬件都要很健壮;
  • 调试很困难。

2.嵌入式系统的技术指标
嵌入式系统设计的常用指标有:
(1)NRE 成本(非重复性工程成本):设计系统所需要支付的一次性货币成本,即一旦设计完毕,不需要支付额外的设计费用,就可以制造任意数目的产品。

(2)单位成本:生产单个产品所需要支付的货币成本,不包含 NRE 成本。

(3)大小:指系统所占的空间,对软件而言,一般用字节数来衡量;对硬件而言,则用逻辑门或晶体管的数目来衡量。

(4)性能:系统完成规定任务所需要的时间,是设计时最常用的设计指标,主要有两种衡量方式,一是响应时间,即开始执行到任务结束之间的时间。二是完成量,即单位时间内所完成的任务量。

(5)功率:系统所消耗的功率,它决定了电池的寿命或电路的散热需求。

(6)灵活性:在不增加 NRE 成本的前提下,改变系统功能的能力。

(7)样机建立时间:建立系统可运行版本所需的时间,系统样机可能比最终产品更大更昂贵,但可以验证系统的用途和正确性,改进系统的功能。

(8)上市时间:从系统开发到可以上市卖给消费者的时间,最主要的影响因素包括设计时间、制造时间和检测时间。

(9)可维护性:系统推出或上市后进行修改的难易程度,特别是针对非原始开发人员进行的修改。

(10)正确性:正确实现了系统的功能,可以在整个设计过程中检查系统的功能,也可插入测试电路检验是否正确。

(11)安全性:系统不会造成伤害的概率。各个设计指标之间一般是互相竞争的,改良了某个指标常常会导致其他指标的恶化,为了最好地满足设计最佳化,设计者必须了解各种软、硬件的实现技术,并且能够从一种技术转移到另一种技术,以便找到特定约束下的最佳方案。

3.嵌入式系统的设计挑战
嵌入式系统设计所面临的挑战有以下几个方面。
(1)需要多少硬件:设计者对用于解决问题的计算能力有较强的控制能力,不仅可以选择使用何种处理器,而且可以选择存储器的数量、所使用的外设等,因为设计不仅要满足性能的需求,还要受到制造费用的约束,硬件的选择十分重要,硬件太少,将达不到功能和性能的要求,硬件过多又会使产品过于昂贵。

(2)如何满足时限:使用提高处理器速度的方法使程序运行速度加快来解决时间约束的方法是不可取的,因为这样会使系统的价格上升。同时,提高了处理器的时钟频率,有时并不能提高执行速度,因为程序的速度有可能受存储系统的限制。

(3)如何减少系统的功耗:对采用电池供电的系统,功耗是一个十分敏感的问题。对于非电池供电的系统,高功率意味着高散热。降低系统功耗的一种方法是降低它的运算速度,但是单纯地降低运算速度显然会导致性能不能满足,因此,必须认真设计在降低功耗的同时满足性能的约束。

(4)如何保证系统的可升级性:系统的硬件平台可能使用几代,或者使用同一代的不同级别的产品,这些仅需要一些简单的改变,设计者必须通过改变软件来改变系统的特性,设计一种机器使它能够提供现在仍未开发的软件的性能。

(5)如何保证系统的可靠性:可靠性是产品销售时一项重要的指标,产品能够很好地工作是消费者的合理要求,可靠性在一些系统中尤为重要,如安全控制系统。

(6)测试的复杂性:测试一个嵌入式系统比仅仅输入一些数据困难得多,所以不得不运行整台机器以产生正确的数据,数据产生的时间是十分重要的,即不能离开嵌入式系统工作的整个环境来测试嵌入式系统。

(7)可视性和可控制性有限:嵌入式系统通常没有显示设备和键盘,这将导致开发者很难了解系统内部发生了什么,也不能响应系统的动作,有时候不得不通过观察微处理器的信号来了解。在实时系统中,一般无法为了观察而让系统停机。

(8)开发环境受限:嵌入式系统的开发环境,如开发软件、硬件工具通常比通用计算机或工作站上的可用环境更为有限,故只能采用交叉式开发,给开发进度带来很大影响。

12.7.2 开发模型与设计流程

与通用系统的开发类似,嵌入式系统的开发也可以采用软件工程中常见的开发模型,主要包括瀑布模型、螺旋模型、逐步求精模型及层次模型。

1.常用开发模型
设计流程是系统设计期间应遵循的一系列步骤,其中一些步骤可以由自动化工具完成,而另外一些只可用手工完成。在嵌入式系统领域,有如下几种常用开发过程模型。

(1)瀑布模型。瀑布模型由五个主要阶段构成:需求分析阶段确定目标系统的基本特点;系统结构设计阶段将系统的功能分解为主要的构架;编码阶段主要进行程序的编写和调试;测试阶段检测错误;最后一个是维护阶段,主要负责修改代码以适应环境的变化,并改正错误、升级。各个阶段的工作和信息总是由高级的抽象到较详细的设计步骤单向流动,是一个理想的自顶向下的设计模型。

(2)螺旋模型。螺旋模型假定要建立系统的多个版本,早期的版本是一个简单的试验模型,用于帮助设计者建立对系统的直觉和积累开发此系统的经验,随着设计的进展,会创建更加复杂的系统。在每一层设计中,设计者都会经过需求分析、结构设计、测试三个阶段。在后期,当构成更复杂的系统版本时,每一个阶段都会有更多的工作,并需要扩大设计的螺旋,这种逐步求精的方法使设计者可以通过一系列的设计循环加深对所开发的系统的理解。螺旋的顶部第一个循环是很小很短的,而螺旋底部的最后的循环加入了对螺旋模型的早期循环的细节补充,螺旋模型比瀑布模型更加符合实际。

(3)逐步求精模型。逐步求精模型是一个系统被建立多次,第一个系统被作为原型,其后逐个将系统进一步求精。当设计者对正在建造的系统的应用领域不是很熟悉时,这个方法很有意义。通过建造几个越来越复杂的系统,从而精炼系统,使设计者能检验架构和设计技术。此外,各种迭代技术也可仅被局部完成,直到系统最终完成。

(4)层次模型。许多嵌入式系统本身是由更多的小设计组成的,完整的系统可能需要各种软件构件、硬件构件。这些部件可能由尚需设计的更小部件组成,因此从最初的完整系统设计到为个别部件的设计,设计的流程随着系统的抽象层次的变化而变化,从最高抽象层次的整体设计到中间抽象层次的详细设计,再到每个具体模块的设计,都是逐层展开的,其中每个流程可能由单个设计人员或设计小组来承担,每个小组依靠其他小组的结果,各个小组从上级小组获得要求,同时上级小组依赖于各个分组设计的质量和性能。而且,流程的每个实现阶段都是一个从规格说明到测试的完整流程。

2.嵌入式系统的设计方法
一个良好的嵌入式系统设计方法是十分重要的,这是因为:
(1)良好的设计方法可以使设计者清楚地了解他们所做工作的进度,这样可以确保不遗漏其中的任何一项工作。
(2)允许使用计算机辅助工具帮助设计者进行工作,将整个过程分成几个可控的步骤进行。
(3)良好的设计方法方便设计团队的成员之间相互交流,通过定义全面的设计过程,使团队里的每个成员可以很好地理解他们所要做的工作及完成分配给他们的任务时所达到的目标。

嵌入式系统软件的开发过程可以分为项目计划、可行性分析、需求分析、概要设计、详细设计、程序建立、下载、调试、固化、测试及运行等几个阶段。

项目计划、可行性分析、需求分析、概要设计及详细设计等几个阶段,与通用软件的开发过程基本一致,都可按照软件工程方法进行,如采用原型化方法、结构化方法等。

由于嵌入式软件的运行和开发环境不同,开发工作是交叉进行的,所以每一步都要考虑到这一点。程序建立阶段的工作是根据详细设计阶段产生的文档进行的。这一阶段的工作主要是源代码编写、编译、链接等几个子过程,这些工作都是在宿主机进行的,不需要用到目标机。 产生应用程序的可执行文件后,就要用到交叉开发环境进行调试,根据实际情况可以选
用可用的几种调试方法之一或它们的有效组合来进行。嵌入式系统设计不同于传统的软件设计,如图 12-11 所示。经常包含硬件设计和软件设计,其中前端活动,如规格说明和系统架构,需要同时考虑硬件和软件两个方面。
在这里插入图片描述
类似的,后端设计,如系统集成和测试要考虑整个系统。在中间阶段中,软件和硬件构件的开发彼此相互独立,并且大多数的硬件和软件的工作能够相对独立地进行。最后,要将经调试后正确无误的可执行程序固化到目标机上。根据嵌入式系统硬件上配置的不同,固化有几种方式,可以固化在 EPROM 和 FLASH 等存储器中,也可固化在 DOC 和 DOM 等电
子盘中。通常还要借助一些专用编程器进行。

由于嵌入式系统对安全性和可靠性的要求比通用计算机系统要高,所以在对嵌入式系统进行白盒测试时,要求有更高的代码覆盖率。在系统开发流程的各个阶段,分别要进行系统的确认和性能评估、安全性评估及风险性评价,并对系统的实现进行测试验证。

12.7.3 嵌入式系统设计的核心技术

嵌入式系统的开发是软、硬件综合开发,与通用系统的开发存在巨大差异,一方面是因为每个嵌入式系统都是一个软硬件的结合体;另一方面,嵌入式系统一旦研制完成,软件便随着硬件固化到产品中,具有很强的专用性。在这些特点的影响下,必然要有一种不同于通用软件开发过程的工程方法学来支持嵌入式系统的开发过程,同时,这些特点也决定了嵌入式系统开发所采用的独特的核心技术。

总体来看,在嵌入式开发领域,主要有三种核心技术:处理器技术、IC 技术、设计/ 验证技术。

1.处理器技术
处理器技术与实现系统功能的计算引擎结构有关,很多不可编程的数字系统也可以视为处理器,这些处理器的差别在于其面向特定功能的专用化程度,导致其设计指标与其他处理器不同。

(1)通用处理器。这类处理器可用于不同类型的应用,一个重要的特征就是存储程序,由于设计者不知道处理器将会运行何种运算,所以无法用数字电路建立程序。另一个特征就是通用的数据路径,为了处理各类不同的计算,数据路径是通用的,其数据路径一般有大量的寄存器及一个或多个通用的算术逻辑单元。设计者只需要对处理器的存储器编程来执行所需的功能,即设计相关的软件。

在嵌入式系统中使用通用处理器具有设计指标上的一些优势。上市时间和 NRE 成本较低,因为设计者只需编写程序,而不需做任何数字设计,灵活性高,功能的改变通过修改程序进行即可。与自行设计处理器相比,数量少时单位成本较低。

当然,这种方式也有一些设计指标上的缺陷,数量大时单位成本相对较高,因为数量大时,自行设计的 NRE 成本分摊下来,可降低单位成本。同时,对于某些应用,性能可能很差。由于包含了非必要的处理器硬件,系统的体积和功耗可能变大。

(2)单用途处理器。单用途处理器是设计用于执行特定程序的数字电路,也指协处理器、加速器、外设等。如 JPEG 编码解码器执行单一程序,压缩或解压视频信息。嵌入式系统设计者可通过设计特定的数字电路来建立单用途的处理器。设计者也可以采用预先设计好的商品化的单用途处理器。

在嵌入式系统中使用单用途处理器,在指标上有一些优缺点。这些优缺点与通用处理器基本相反,性能可能更好,体积与功率可能较小,数量大时单位成本可能较低,而设计时间与 NRE 成本可能较高,灵活性较差,数量小时单位成本较高,对于某些应用,性能不如通用处理器。

(3)专用处理器。专用指令集处理器是一个可编程处理器,针对某一特定类型的应用进行最优化。这类特定应用具有相同的特征,如嵌入式控制、数字信号处理等。在嵌入式系统中使用专用处理器可以在保证良好的性能、功率和大小的情况下,提供更大的灵活性,但这类处理器仍需要昂贵的成本建立处理器本身和编译器。单片机和数字信号处理器是两类应用广泛的专用处理器,数字信号处理器是一种针对数字信号进行常见运算的微处理器,而单片机是一种针对嵌入式控制应用进行最佳化的微处理器。

2.IC 技术
从系统的集成电路设计描述得到实际芯片的物理映射过程的实现技术便是 IC(Integrated Circuits,集成电路)技术,当前在半导体领域的三类实现技术,即全定制、半定制和可编程技术均可应用于嵌入式系统的硬件设计。

(1)全定制/VLSI(Very Large Scale Integrated Circuites,超大规模集成电路)。在全定制IC 技术中,需要根据特定的嵌入式系统的数字实现来优化各层设计人员从晶体管的版图尺寸、位置、连线开始设计以达到芯片面积利用率高、速度快、功耗低的最优化性能。利用掩膜在制造厂生产实际芯片,全定制的 IC 设计也常称为 VLSI,具有很高的 NRE 成本、很长的制造时间,适用于大量或对性能要求严格的应用。

(2)半定制/ASIC(Application Specific Integrated Circuit,专用集成电路)。半定制 ASIC是一种约束型设计方法,包括门阵列设计法和标准单元设计法。它是在芯片制作好一些具有通用性的单元元件和元件组的半成品硬件,设计者仅需要考虑电路的逻辑功能和各功能模块之间的合理连接即可。这种设计方法灵活方便、性价比高,缩短了设计周期,提高了成品率。

(3)可编程/ASIC。可编程器件中所有各层都已经存在,设计完成后,在实验室里即可烧制出设计的芯片,不需要 IC 厂家参与,开发周期显著缩短。可编程 ASIC 具有较低的 NRE 成本,单位成本较高,功耗较大,速度较慢。

3.设计/验证技术
嵌入式系统的设计技术主要包括硬件设计技术和软件设计技术两大类。其中,硬件设计领域的技术主要包括芯片级设计技术和电路板级设计技术两个方面。

芯片级设计技术的核心是编译/综合、库/IP(Intellectual Property,知识产权)、测试/ 验证。编译/综合技术使设计者用抽象的方式描述所需的功能,并自动分析和插入实现细节。库/IP 技术将预先设计好的低抽象级实现用于高级抽象。测试/验证技术确保每级功能正确,减少各级之间反复设计的成本。

软件设计技术的核心是软件语言。软件语言经历了从低级语言(机器语言、汇编语言)到高级语言(例如,结构化设计语言、面向对象设计语言)的发展历程,推动其发展的是汇编技术、分析技术、编译/解释技术等诸多相关技术。软件语言的级别也从实现级、设计级、功能级逐渐向需求级语言发展过渡。

早期,随着通用处理器概念的逐渐形成,软件技术迅速发展,软件的复杂度也开始增加,软件设计和硬件设计的技术和领域完全分开。设计技术和工具在这两个领域同步得到发展,也使得行为描述可以在越来越抽象的级别上进行,以适应设计复杂度不断增长的需要。这种同步发展如今又使得这两个领域都使用同样的时序模型来描述行为,因而这两个领域即将可能再度统一为一个领域。

鉴于大多数嵌入式系统都是实时的反应式系统,反应式系统具有多任务并发、时间约束严格与可靠性高的特点,针对反应式系统的设计和描述,人们相继提出了多种描述语言和验证方法学。例如,采用时序逻辑用来刻画反应式系统的性质及推理反应式系统的行为,采用模型检验技术验证反应式系统设计的正确性等,这些技术已逐步在嵌入式开发过程中发挥着重要的作用。

12.7.4 嵌入式开发设计环境

嵌入式系统的开发环境种类很多,大体可以把它们分为如下几类:
(1)与嵌入式操作系统配套的开发环境,属于这一类的开发环境较多,如 PalmOS、THOS、VxWorks、Windows CE 等商业嵌入式操作系统都有与其配套的功能齐全的开发环境。

(2)与处理器芯片配套的开发环境。这类开发环境一般由处理器厂商提供,如 EPSON公司推出的一个专门为基于 S1C33 系列微控制器芯片的嵌入式系统开发的工具包便是这一类型的开发环境。

(3)与具体应用平台配套的开发环境。这类开发环境针对性较强,如高通公司的 Brew SDK 等。

(4)其他类的开发环境。这类开发环境主要指一些嵌入式系统供应商在 GNU 开源工具的基础上开发或定制的较为通用的开发环境。这类工具可以免费获得,而且支持的处理器类型繁多,功能齐全,但在技术支持方面比专业化商业工具略逊一些。

12.7.5 嵌入式软件设计模型

随着嵌入式系统的功能日益复杂,要描述这些功能复杂的系统的行为也越来越困难,实践证明通过采用计算模型的方法来对系统进行描述和分析是一种具有工程价值的方法。

本节介绍几种嵌入式领域常用的计算模型,并从计算模型的角度分析和阐述嵌入式应用设计和开发的相关问题。计算模型提供一组用简单对象来组合复杂行为的方法,可以帮助设计者理解和描述系统行为。嵌入式系统常用的计算模型有如下几种:时序计算模型、通信进程模型、状态机模型、数据流模型、面向对象模型、并发进程模型。 这些模型分别在不同的应用领域使用,如状态机模型特别适合描述以控制为主的系统,数据流模型可以很好地描述数据处理和转换问题。目前使用最广泛的是并发进程模型。

1.状态机模型
有限状态机(Finite-State Machine,FSM)是一个基本的状态模型,可以用一组可能的状态来描述系统的行为,系统在任何时刻只能处于其中一个状态,也可以描述由输入确定的状态转移,最后可以描述在某个状态下或状态转移期间可能发生的操作。
有限状态机 FSM 是一个六元组 F<S,I,O,F,H,S0>,其中 S 是一个状态集合{s0,s1,…,sl},I 是输入集合{I0,I1,…,Im},O 是输出集合{o0,o1,…,on},F 是次态函数或转移函数,将状态和输入映射到状态(S×I→S),H 是输出函数,将状态映射到输出 (S→O),S0 是初始状态。

图 12-12 是电梯的控制单元的状态机描述。在初始“空闲”态,将 up 和 down 设置为 0, open 设置为 1。在所请求的楼层不同于当前楼层之前,状态机一直停留在“空闲”状态。如果所请求的楼层大于当前楼层,则状态机转移到“上升”状态,并将 up 设置为 1。如果所请求的楼层小于当前楼层,则状态机转移到“下降”状态,并将 down 设置为 1。在当前楼层等于所请求的楼层之前,状态机一直留在“下降”或“上升”状态,然后状态转移到“开门”状态,并将 open 设置为 1。通常,系统有一个计时器 timer,因此,当状态机转移到“开门”状态时,还要将计时器启动,状态机停留在“开门”态,直到计时器超时,最后转移到“空闲”态。
在这里插入图片描述
当 FSM 被用于嵌入式系统设计时,其输入和输出的数据类型都是布尔类型,而函数表示含有布尔运算的布尔函数,这种模型对于没有数据输入或输出的很多纯控制系统而言已经足够。如果要处理数据,则将 FSM 扩展为带有数据路径的状态机(FSM with Datapath,FSMD)。另外,对状态机模型可以进一步扩展以支持分级和并发,这种模型称为分级/并发FSM(Hierarchical/Concurrent FSM,HCFSM)模型。

2.数据流模型
数据流模型是并发多任务模型派生出的一种模型,该模型将系统的行为描述为一组结点和边,其中结点表示变换,边表示从一个结点到另一个结点的数据流向。每个结点使用来自其输入边的数据,执行变换并在其输出边上产生数据。

每条边可能有或没有数据,出现在边上的数据称为令牌,当某个结点的所有输入边都至少有一个令牌时,该结点可触发。结点触发后,将使用来自每条输入边的一个令牌,对所有使用的令牌进行数据变换,并在输出边上产生一个令牌,结点的触发仅决定于令牌出现的情况。

图 12-13 所示是计算 z=(a+b)×(c-d)的数据流模型。 目前,已有若干商业化的工具支持用图形化语言表达数据流模型,这些工具可以自动将数据流模型转换为并发多任务模型,以便在微处理器上实现。其转换方法为将每个结点转换为一个任务,每条边转换为一个通道,其中并发多任务模型的实现方法是使用实时操作系统对并发任务进行映射。

图 12-14 是一个同步数据流模型,这个模型中,在结点的每条输入边和输出边上分别标注每次触发所使用和产生的令牌数。该模型的优点是,在实现时不需要将其转换为并发多任务模型,而是用静态方式调度结点,产生时序程序模型。该模型可以使用时序程序语言(如C 语言)来表达,不需要实时操作系统就可以执行,因此其执行效率更高。
在这里插入图片描述
3.并发进程模型
并发进程模型是由一组进程构成,每个进程是一个顺序执行的过程,各进程间可以并发执行。并发进程模型提供创建、终止、暂停、恢复和连接进程的操作。进程在执行中可以相互通信,交换数据。进程间通信可以采用两种方式:共享变量和消息传递。信号量、临界区、管程和路径表达式等用来对并发进程的操作进行同步。

通常,实时系统可以看成是由许多并发执行的进程构成的系统,其中每个进程都有时间要求。这样,很多嵌入式系统更容易用一组并发执行的任务来描述,因为这些系统本身就是多任务系统,并发进程模型便自然地可以由实时操作系统的多任务来实现。

4.面向对象模型
传统的并发进程模型是围绕进程的概念进行设计的,进程是一个实现级的概念,它是对客观世界活动的一种间接模拟,因此,采用进程模型来解决客观世界中的并发问题就显得极不自然,并且也使得并发程序难以设计和理解。

面向对象模型以一种更加直接的方式刻画客观世界中的活动,模型中存在着潜在的并发执行能力。一个对象向另一个对象发送消息后,若不需要或不立即需要消息的处理结果,前者不必等待后者处理消息,消息发送者和消息接受者可以并发执行。对象不都是处于被动的提供服务状态,它们中的一些除了能通过接收消息向外提供服务外,还可以有自己的事务处
理。一个对象往往可以同时处理多个消息。

对象是数据和操作的封装体,数据存放在对象的局部变量中,对象的状态由对象所有的局部变量在某一时刻的取值来表示。在并发环境中,还要考虑对象并发状态的描述问题,因为对象的并发控制是根据对象的并发状态来进行的。把并发与面向对象相结合,归结起来可分为两条途径:
(1)在面向对象模型中引进并发机制,充分利用面向对象技术刻画客观世界的良好模型能力和面向对象的各个重要特性,同时把其潜在的并发能力描述出来,使其适合于描述并发计算。

(2)在传统并发模型中引进面向对象思想。 面向对象的并发模型可以分为两种类型:隐式并发模型和显式并发模型。

(1)隐式并发模型。这种模型的特点是推迟并发设计,将对象建模作为建模基础。在进入运行阶段之前,将对象看成自主单元,各种对象的活动看成理想并发方式完成的特定工作。就像每个对象拥有一个自己的处理器,这个处理器可以为对象提供一个执行线程。进入系统的外部事件被看成一个处理请求,以广播方式传给一些对象,这些对象接着向其他对象进一步提出处理请求。理论上,对应一个请求,可以有任意多个对象执行相应的处理。在实现时,由调度程序最终决定其对象的操作顺序,如图 12-15 所示。

(2)显式并发模型。这种模型的特点是首先考虑并发,应先把并发概念和对象概念分开。在建立对象以后,用实时操作系统支持的进程概念来表示并发,形成对象和进程两个抽象层次,即先将系统分解为准并发进程作为开始,而在每个进程的内部采用面向对象的技术。对象间交互表示成嵌套的函数调用,通过加入锁、监视器、信号量等显式同步机制,来保证对象的完整。该模型将进程置于对象之上,对象中不必考虑并发、对象串行化,如图 12-16 所示。
在这里插入图片描述
早期,实时系统的设计方法主要是结构化设计方法,采用结构化方法的系统在复用性、可修改性等方面有很大的局限性。面向对象的实时系统设计方法显然在这些问题上具有明显的优势。较实用的面向对象的设计方法是诺基亚公司的 OCTOPUS 方法,该方法以 OMT 和融合方法(Fusion Method)为基础,提出了对实时系统响应时间、时间域及并发的处理方法,并具体提出了对并发、同步、通信、中断处理、ASIC、硬件界面、端对端响应时间等方面的处理。OCTOPUS 方法将软件开发的主要阶段很好地合并起来,从规格说明到运行模型之间的过渡紧密自然,还支持渐进式开发。OCTOPUS 方法是当前面向对象技术和实时系统相结合的一个典型的设计方法。另外,形式化的面向对象的开发技术和建模语言也逐渐在实时系统建模的初始阶段得到应用。

12.7.6 需求分析

在设计之前,设计者必须知道要设计什么。通常人们用需求和规格说明来描述设计过程的这两个相关而不同的步骤。需求是用户所想要的非形式化的描述,而规格说明是可以用来创建系统架构的更详尽、更精确、更一致的描述。当然,需求和规格说明都是指导系统的外部表示,而非内部表示。需求有两种类型:功能性需求和非功能性需求,功能性需求说明这个系统必须做什么,而非功能性需求说明系统的其他属性,如物理尺寸、价格、功耗、设计时间、可靠性等。

对一个大系统进行需求分析是一项复杂而费时的工作,但是,获取少量格式清晰、简单明了的信息是理解系统需求的一个良好开端。表 12-5 是在某项工程开始时填写的需求表格,在考虑系统的基本特征时可将该表格作为检查表。

在这里插入图片描述
这份需求表格内容是以 GPS(Global Position System,移动地图系统)为例编写的。移动地图系统是一种手持设备,针对在高速公路开车的用户或类似的用户而设计,该设备可从GPS 上得到位置信息,为用户显示当前所在的位置及周围的地形图,地图的内容随着用户及设备所在位置的改变而改变。

需求分析阶段最重要的文档输出就是系统的规格说明。
规格说明是精确反映客户需求并且作为设计时必须遵循的要求的一种技术文档。在软件开发的过程中,规格说明非常重要。系统分析人员接受用户需求产生目标软件系统的规格说明,设计与编码人员根据规格说明,进行模块设计并最终产生程序代码,测试和验收人员验证最终软件是否符合规格说明。规格说明应该是清晰的、无歧义的,否则由该规格说明建造系统可能不符合实际要求。

目前,业界较为流行的方法是采用 UML 进行规格说明的描述。UML 是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模。UML 适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。图 12-17 是一个显示操作的状态机规格说明示例,开始和结束是特殊的状态,状态机中的状态代表了不同的概念性操作。
在这里插入图片描述
在需求分析阶段,通过用例来捕获用户需求。通过用例建模,描述对系统感兴趣的外部角色及其对系统(用例)的功能要求。分析阶段主要关心问题域中的主要概念(如抽象、类和对象等)和机制,需要识别这些类及它们相互间的关系,并用 UML 类图来描述。在分析阶段,只对问题域的对象(现实世界的概念)建模,而不考虑定义软件系统中技术细节的类(如处理用户接口、数据库、通信和并行性等问题的类)。

12.7.7 系统设计

目前,嵌入式系统的设计工具可以分为两类:协同合成工具和协同模拟工具。
(1)协同合成工具。当前,用于嵌入式开发的主要的协同合成工具有 POLIS、COSYMA和 Chinook 等。

POLIS:POLIS 是 UC-Berkeley 开发的交互式嵌入式系统的软、硬件协同设计框架,它适用于小型控制系统的设计,系统描述支持基于 FSM(Finite State Machine)的语言。由于软、硬件均可透明地从同一 CFSM 描述中取得,设计空间的灵活性也相应增加,支持使用PTOLEMY 的协同模拟,在描述及实现层均支持正式的验证,架构的支持受限,即硬件 CFSMs 所包围的只有一个处理器,而且不支持共享内存。

COSYMA:COSYMA 是由德国 IDA 公司开发的一种探索硬件与软件协同设计合成进程的平台,它面向软件系统的描述较简单,支持自动分割和协同处理器合成,在合成时期可以对设计空间进行探索,系统合成取决于硬件限制,不支持并发模块,即一次只能有一个线程执行,架构同样受限,不支持正式验证,设计的成功与否取决于分割及开销估计技术。

Chinook:Chinook 是为控制系统而设计的,整个系统的描述作为一个输入提供给 Chinook,它的内部模式基于类似等级状态的模式,它不对代码进行分割,它为整个设计提供单一的模拟环境,Chinook 支持多种系统架构,尤其是多处理器结构。同样支持定时限制的描述,它能合成多种接口,包括系统之间的软、硬件接口,能直接从定时图表中合成设备驱动器,可以控制处理器之间的通信。

(2)协同模拟工具。协同模拟是嵌入式系统设计中至关重要的一个方面,在整个系统设计完成后,在统一框架下模拟不同种类的成分是必要的,协同模拟不仅提供检验,而且为用户提供各系统的性能信息,这有助于在系统的早期提出变更方案,不至于造成重大损失。目前,主要的协同模拟工具有如下两种。

PTOLEMY:PTOLEMY 的关键思想是混合使用面向对象内核的计算模型,可用于模拟多种的系统,在各种应用中被广泛地使用,但不适合于系统合成,硬件模拟也是它的一项功能。TSS:TSS(Tool for System Simulation)是模拟复杂硬件的工具,采用 C 语言编写,单个模块的提取可由用户控制,可以方便地进行添加与删除模块。但不支持分级模块,没有用于同步各处理器存取共享数据结构的机制,模块间的通信通过端口和总线进行。并且,TSS 支持多核系统的模拟。

1.系统架构设计
描述系统如何实现规格说明中定义的功能是系统架构设计的主要目的。但是在设计嵌入式系统的系统结构时,很难将软件和硬件完全分开。通常的处理是先考虑系统的软件架构,然后再考虑其硬件实现。系统结构的描述必须符合功能上和非功能上的需求。不仅所要求的功能要体现,而且成本、速度、功耗等非功能约束也要满足。从系统原始框图中的功能元素开始逐个考虑和细化,把原始框图转化为软件和硬件系统结构的同时考虑非功能约束,是一个切实可行的方法。下面以 GPS 移动地图系统的架构设计为例进行说明。

(1)原始框图。如图 12-18 所示,这个原始框图是移动地图系统的主要操作和数据流。
在这里插入图片描述
(2)软件系统架构。如图 12-19 所示,软件系统主要由用户界面、数据库搜索引擎和数据转换器组成。
在这里插入图片描述
(3)硬件系统架构。如图 12-20 所示,硬件系统采用通用微处理器、存储器和 I/O 设备组成。本系统选用两种存储器:通用数据、程序存储器和针对像素显示的帧缓冲存储器。
在这里插入图片描述
2.硬件子系统设计
嵌入式系统的开发环境由 4 部分组成:目标硬件平台、嵌入式操作系统、编程语言和开发工具,其中处理器和操作系统的选择应当考虑更多的因素,避免错误的决策影响项目的进度。

(1)选择处理器技术。嵌入式系统设计的主要挑战是如何使互相竞争的设计指标同时达到最佳化。设计者必须对各种处理器技术和 IC 技术的优缺点加以取舍。一般而言,处理器技术与 IC 技术无关,也就是说,任何处理器技术都可以使用任何 IC 技术来实现,但是最终器件的性能、NRE 成本、功耗、大小等指标会有很大的差异,如图 12-21 所示。
在这里插入图片描述
更通用的可编程技术提供了较大的灵活性,降低了 NRE 成本,建立产品样机与上市的时间较快。定制的技术能够提供较低的功耗、较好的性能、更小的体积和大批量生产时的低成本。

通常,一个公司要推出一种产品,如机顶盒、家庭路由器或通用处理器等,可以先推出半定制产品,以尽快占领市场,然后再推出全定制的产品。也可先用较可靠的老技术实现处理器,再用新制程的技术实现下一代。同样,嵌入式系统的设计者可以使用可编程的器件来建立样机,以加速上市时间,批量时再采用定制器件。 根据这些原则,设计者便可以对采用的处理器技术和处理器做出合理选择。一般,全定制商品化的“通用处理器 软件”是大多数情况下都适用的一个选择。

(2)通用嵌入式处理器的选择。根据用户的需求和项目的需要选择合适的通用嵌入式处理器,选择时需要考虑如下指标。
处理器的速度。一个处理器的性能取决于多个方面的因素:时钟频率,内部寄存器的大小,指令是否对等处理所有的寄存器等。对于许多需用处理器的嵌入式系统设计来说,目标不是在于挑选速度最快的处理器,而是在于选取能够完成作业的处理器和 I/O 子系统。处理器的性能满足系统的需求,并有一定的余量,但也不必选得太高。技术指标。当前,许多嵌入式处理器都集成了外围设备的功能,从而减少了芯片的数量,进而降低了整个系统的开发费用。开发人员首先考虑的是,系统所要求的一些硬件能否无须过多的组合逻辑就可以连接到处理器上。其次是考虑该处理器的一些支持芯片,如 DMA 控制器、内存管理器、中断控制器、串行设备、时钟等的配套。开发人员对处理器的熟悉程度,即项目的开发人员需要在处理器本身的成本和开发成本之间做一个权衡。

处理器的 I/O 功能是否满足系统的需求,即许多处理器提供内置的外部设备,以减少芯片数量、降低成本,应尽量考虑这种方案。处理器的相关软件支持工具,即该款处理器是否具有完善的嵌入式操作系统、编程语言和开发工具的支持等。

处理器的调试,即处理器是否集成了调试功能,如是否支持 JTAG、BDM 等调试方式。处理器制造商的支持可信度。在产品的生命周期里选择某种处理器时,设计者必须确认它有足够的供货量、技术支持等处理器的低功耗。

嵌入式微处理器最大并且增长最快的市场是手持设备、电子记事本、PDA、手机、GPS 导航器、智能家电等消费类电子产品,这些产品中选购的微处理器的典型特点是要求高性能、低功耗。许多 CPU 生产厂家已经进入了这个领域。

(3)硬件设计的注意事项。首先,将硬件划分为部件或模块,并绘制部件或模块连接框图。其次,对每个模块进行细化,把系统分成更多个可管理的小块,可以被单独实现。通常,系统的某些功能既可用软件实现也可用硬件实现,没有一个统一的方法指导设计者决定功能的软硬件分配,但是可以根据约束清单,在性能和成本之间进行权衡。设计软、硬件之间的接口时,需要硬件设计者和软件设计者协同工作才能完成,良好的接口设计可以保证硬件简洁、易于编程。 设计时需要注意以下几点。

  • I/O 端口:列出硬件的所有端口、端口地址、端口属性、使用的命令和序列的意义、端口的
    状态及意义。
  • 硬件寄存器:对每个寄存器设计寄存器的地址、寄存器的位地址和每个位表示的意义,以及
  • 对寄存器读写的说明、使用该寄存器的要求和时序说明。
  • 内存映射:共享内存和内存映射 I/O 的地址,对每个内存映射,说明每个 I/O 操作的读/写序列、地址分配。
  • 硬件中断:如何使用硬件中断,列出所使用的硬件中断号和分配的硬件事件。
  • 存储器空间分配:列出系统中程序和数据占用的空间大小、位置,以及存储器类型和访问方式等。

总之,硬件设计者应该给软件设计者更多、更详细的信息,以便于进行软件设计和开发。

3.软件子系统设计
根据需求分析阶段的规格说明文档,确定系统计算模型,对软件部分进行合理的设计即可。
(1)操作系统的选择。在选择嵌入式操作系统时,需要做多方面的考虑:
操作系统的功能。根据项目需要的操作系统功能来选择操作系统产品,要考虑系统是否支持操作系统的全部功能或部分功能,是否支持文件系统、人机界面,是实时系统还是分时系统及系统是否可裁减等因素。

配套开发工具的选择。有些实时操作系统(rtos)只支持该系统供应商的开发工具。也就是说,还必须向操作系统供应商获取编译器、调试器等。有些操作系统使用广泛且有第三方工具可用,因此,选择的余地比较大。操作系统的移植难易程度。操作系统到硬件的移植是一个重要的问题。它是关系到整个系统能否按期完工的一个关键因素,因此要选择那些可移植性程度高的操作系统,从而避免操作系统难以向硬件移植而带来的种种困难,加速系统的开发进度。操作系统的内存需求如何。均衡考虑是否需要额外 ram 或 eeprom 来迎合操作系统对内存的较大要求。有些操作系统对内存的要求是与目标相关的。如 tornado/vxworks,开发人员能按照应用需求分配所需的资源,而不是为操作系统分配资源。从需要几 k 字节存储区的嵌入设计到需求更多的操作系统功能的复杂的高端实时应用,开发人员可任意选择多达 80 种不同的配置。

操作系统附加软件包。是否包含所需的软件部件,如网络协议栈、文件系统、各种常用外设的驱动等。操作系统的实时性如何。实时性分为软实时和硬实时。有些嵌入式操作系统只能提供软实时性能,如 microsoft windows ce 2.0 是 32 位,windows 兼容,微内核,可伸缩实时操作系统,可以满足大部分嵌入式和非嵌入式应用的需要。但实时性不够强,属于软实时嵌入式操
作系统。操作系统的灵活性如何。操作系统是否具有可剪裁性,即能否根据实际需要进行系统功能的剪裁。有些操作系统具有较强的可剪裁性,如嵌入式 linux 、 tornado/vxworks 等。

(2)编程语言的选择。在选择编程语言时,也需要做多方面的考虑:

通用性。随着微处理器技术的不断发展,其功能越来越专用,种类越来越多,但不同种类的微处理器都有自己专用的汇编语言。这就为系统开发者设置了一个巨大的障碍,使得系统编程更加困难,软件重用无法实现,而高级语言一般和具体机器的硬件结构联系较少,比较流行的高级语言对多数微处理器都有良好的支持,通用性较好。

可移植性。由于汇编语言和具体的微处理器密切相关,为某个微处理器设计的程序不能直接移植到另一个不同种类的微处理器上使用,因此,移植性差。高级语言对所有微处理器都是通用的,因此,程序可以在不同的微处理器上运行,可移植性较好。这是实现软件重用的基础。执行效率。一般来说,越是高级的语言,其编译器和开销就越大,应用程序也就越大、越慢。但单纯依靠低级语言,如汇编语言来进行应用程序的开发,带来的问题是编程复杂、开发周期长。因此,存在一个开发时间和运行性能之间的权衡。

可维护性。低级语言如汇编语言,可维护性不高。高级语言程序往往是模块化设计,各个模块之间的接口是固定的。因此,当系统出现问题时,可以很快地将问题定位到某个模块内,并尽快得到解决。另外,模块化设计也便于系统功能的扩充和升级。
基本性能。在嵌入式系统开发过程中使用的语言种类很多,比较广泛应用的高级语言有 Ada、C/C++、Modula-2 和 Java 等。Ada 语言定义严格,易读易懂,有较丰富的库程序支持,目前,在国防、航空、航天等相关领域应用比较广泛,未来仍将在这些领域占有重要地位。C 语言具有广泛的库程序支持,是嵌入式系统中应用最广泛的编程语言,在将来很长一段时间内仍将在嵌入式系统应用领域中占重要地位。 C++是一种面向对象的编程语言,在嵌入式系统设计中也得到了广泛的应用,如 GNU C++。Visual C++是一种集成开发环境,支持可视化编程,广泛应用于 GUI 程序开发。但 C 与 C++相比,C++的目标代码往往比较庞大和复杂,在嵌入式系统应用中应充分考虑这一因素。

(3)软件开发过程。嵌入式软件的开发过程不同于一般通用软件的开发过程,主要有如下步骤:

  • 选择开发语言,建立交叉开发环境;
  • 根据详细设计说明编写源代码,进行交叉编译、链接;
  • 目标代码的重定位和下载;
  • 在宿主机或目标机调试、验证软件功能;
  • 进行代码的优化。

(4)软件开发文档。在嵌入式产品的开发设计过程中,开发阶段完成系统产品的实现,这一阶段同时需要完成一系列的文档,这些文档对完成产品设计、维护相当重要,这些文档分别为技术文件目录、技术任务书、技术方案报告、产品规格、技术条件、设计说明书、试验报告、总结报告等。

12.7.8 系统集成与测试

通常嵌入式系统测试主要包括软件测试、硬件测试、单元测试三个部分。 一般系统的硬件测试包括可靠性测试和电磁兼容性测试,关于电磁兼容性目前已经有了强制性国内和国际标准。

嵌入式系统软件测试方法和原理跟通用软件的测试基本一致,软件测试时,一般需要测试实例或测试序列,序列有两种来源:一种是需要用户进行设计,另一种是标准的测试序列。无论哪种测试实例,都要求实例能够高概率发现更多的错误,但在测试的内容上有些差别:
(1)嵌入式软件必须长时间稳定运行。
(2)嵌入式软件一般不会频繁地版本升级。
(3)嵌入式软件通常使用在关键性的应用中。
(4)嵌入式软件必须和嵌入式硬件一起对产品的故障和可靠性负责。
(5)现实世界的条件是异步和不可预测的,使得模拟测试非常困难。
由于这些差别,使得嵌入式系统软件测试主要集中在以下 4 个不同的方面:
(1)因为实时性和同时性很难同时满足,所以大多数测试集中于实时测试。
(2)大多数实时系统都有资源约束,因此需要更多的性能和可用性测试。
(3)可以使用专用实时跟踪工具对代码覆盖率进行测试。
(4)对可靠性的测试级别比通用软件要高得多。
另外,性能测试也是设计嵌入式系统中需要完成的最主要的测试活动之一,对嵌入式系统有决定性的影响。
由于嵌入式系统的专用性特点,系统的硬件平台和软件平台多种多样,每种都针对不同的应用而专门设计,因此,应用软件在各个平台之间很少具有通用性,并且嵌入式系统的更新换代速度相对较快。为了保护已有的投资、充分利用现有的软件资源和加快产品研制速度,软件的移植在嵌入式领域变得非常频繁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/44120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 忘记root密码,通过单用户模式修改

银河麒麟桌面操作系统 V10&#xff08;sp1&#xff09;”忘记用户密码&#xff0c;需要修改用户密码所写&#xff0c;可用于 X86 架构和 arm 架构。 2. 选择第一项&#xff0c;在上图界面按“e”键进行编辑修改。 3. 在以 linux 开头这行的行末&#xff0c;添加“init/bin/bas…

SSE(Server-Send-Event)服务端推送数据技术

SSE&#xff08;Server-Send-Event&#xff09;服务端推送数据技术 大家是否遇到过服务端需要主动传输数据到客户端的情况&#xff0c;目前有三种解决方案。 客户端轮询更新数据。服务端与客户端建立 Socket 连接双向通信服务端与客户建立 SSE 连接单向通信 几种方案的比较&…

Nginx上配置多个网站

一、需求描述 我们只有一台安装了Nginx的服务器,但是我们需要实现在这台服务器上部署多个网站,用以对外提供服务。 二、Nginx上配置多个网站分析 一般网站的格式为:【http://ip地址:端口号/URI】(比如:http://192.168.3.201:80),IP地址也可用域名表示;那么要实现在Nginx…

i18n、L10n、G11N 和 T9N 的含义

注&#xff1a;机翻&#xff0c;未校对。 Looking into localization for the first time can be terrifying, if only due to all of the abbreviations. But the meaning of i18n, L10n, G11N, and T9N, are all very easy to understand. 第一次研究本地化可能会很可怕&…

如何做一个迟钝不受伤的打工人?

一、背景 在当前激烈的职场环境中&#xff0c;想要成为一个相对“迟钝”且不易受伤的打工人&#xff0c;以下是一些建议&#xff0c;但请注意&#xff0c;这里的“迟钝”并非指智力上的迟钝&#xff0c;而是指在应对复杂人际关系和压力时展现出的豁达与钝感力&#xff1a; 尊重…

【测开能力提升-fastapi框架】fastapi路由分发

1.7 路由分发 apps/app01.py from fastapi import APIRouterapp01 APIRouter()app01.get("/food") async def shop_food():return {"shop": "food"}app01.get("/bed") async def shop_food():return {"shop": "bed&…

js前端隐藏列 并且获取值,列表复选框

列表框 <div class"block" id"psi_wh_allocation_m"><table id"result" class"list auto hover fixed" style"width:100%;border-collapse:collapse"><thead><tr><%--<th></th>--%&…

LabVIEW滤波器性能研究

为了研究滤波器的滤波性能&#xff0c;采用LabVIEW设计了一套滤波器性能研究系统。该系统通过LabVIEW中的波形生成函数&#xff0c;输出幅值及频率可调的正弦波和白噪声两种信号&#xff0c;并将白噪声与正弦波叠加&#xff0c;再通过滤波器输出纯净的正弦波信号。系统通过FFT&…

Python从0到100(三十八):json字符串的数据提取

JSON的数据提取 1.学习目标 掌握JSON相关的方法&#xff08;load, loads, dump, dumps&#xff09;了解JSONPath的使用&#xff08;提取JSON中的数据&#xff09; 2 复习什么是JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;它使得人们很容…

富文本braft-editor插件分享

效果展示 安装插件 npm install braft-editor 或者 yarn add braft-editor 主要代码 import React, { useState, forwardRef } from react //引入富文本编辑器 import BraftEditor from braft-editor // 引入编辑器样式 import braft-editor/dist/index.css import { B…

thinkphp8框架源码精讲

前言 很开心你能看到这个笔记&#xff0c;相信你对thinkphp是有一定兴趣的&#xff0c;正好大家都是志同道合的人。 thinkphp是我入门学习的第一个框架&#xff0c;经过这么多年了&#xff0c;还没好好的研究它&#xff0c;今年利用了空闲的时间狠狠的深入源码学习了一把&…

硅谷甄选运营平台-vue3组件通信方式

vue3组件通信方式 vue2组件通信方式&#xff1a; props:可以实现父子组件、子父组件、甚至兄弟组件通信自定义事件:可以实现子父组件通信全局事件总线$bus:可以实现任意组件通信pubsub:发布订阅模式实现任意组件通信vuex:集中式状态管理容器&#xff0c;实现任意组件通信ref:父…

camunda最终章-springboot

1.实现并行流子流程 1.画图 2.创建实体 package com.jmj.camunda7test.subProcess.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable; import java.util.ArrayList; import java.util.List;Data …

C语言 | Leetcode C语言题解之第230题二叉搜索树中第K小的元素

题目&#xff1a; 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/int search_num(struct TreeNode* root, int k, int *result, int num) {if(num k 1){retu…

FastGPT连接OneAI接入网络模型

文章目录 FastGPT连接OneAI接入网络模型1.准备工作2.开始部署2.1下载 docker-compose.yml2.2修改docker-compose.yml里的参数 3.打开FastGPT添加模型3.1打开OneAPI3.2接入网络模型3.3重启服务 FastGPT连接OneAI接入网络模型 1.准备工作 本文档参考FastGPT的官方文档 主机ip接…

记一次若依框架和Springboot常见报错的实战漏洞挖掘

目录 前言 本次测实战利用图​ 1.判段系统框架 2.登录页面功能点测试 2.1 弱口令 2.2 webpack泄露信息判断 2.3 未授权接口信息发现 3.进一步测试发现新的若依测试点 3.1 默认弱口令 3.2 历史漏洞 4.访问8080端口发现spring经典爆粗 4.1 druid弱口令 4.2 SwaggerU…

浅析Kafka-Stream消息流式处理流程及原理

以下结合案例&#xff1a;统计消息中单词出现次数&#xff0c;来测试并说明kafka消息流式处理的执行流程 Maven依赖 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusio…

音频语言学习领域数据集现状、分类及评估

Audio Language Learning (Audio-Text Learning) 是一个新兴的研究领域&#xff0c;专注于处理、理解和描述声音。它的发展动力是机器学习技术的进步以及越来越多地将声音与其相应的文本描述相结合的数据集的可用性。 Audio Language Models (ALMs) 是这个领域的关键技术&#…

MATLAB中的SDPT3、LMILab、SeDuMi工具箱

MATLAB中的SDPT3、LMILab、SeDuMi工具箱都是用于解决特定数学优化问题的工具箱&#xff0c;它们在控制系统设计、机器学习、信号处理等领域有广泛的应用。以下是对这三个工具箱的详细介绍&#xff1a; 1. SDPT3工具箱 简介&#xff1a; SDPT3&#xff08;Semidefinite Progra…

基于QT开发的反射内存小工具

前言 最近项目需要需要开发一个反射内存小工具&#xff0c;经过2天的修修改终于完成了。界面如下&#xff1a; 功能简介 反射内存指定地址数据读取反射内存指定地址数据写入反射内存指定地址数据清理十进制、十六进制、二进制数据相互转换 部分代码 void RfmMain::setWOthe…