嵌⼊式系统开发设计---嵌⼊式系统开发设计
嵌⼊式系统设计的主要任务是定义系统的功能、决定系统的架构,并将功能映射到系统实现架构上。这⾥,系统架构既包括软件系统架构也包括硬件系统架构。⼀种架构可以映射到各种不同的物理实现,每种实现表⽰不同的取舍,同时还要满⾜某些设计指标,并使其他的设计指标也同时达到最佳化。
嵌⼊式系统的设计⽅法跟⼀般的硬件设计、软件开发的⽅法不同,是采⽤硬件和软件协同设计的⽅法,开发过程不仅涉及软件领域的知识,还涉及硬件领域的综合知识,甚⾄还涉及机械等⽅⾯的知识。要求设计者必须熟悉并能⾃如地运⽤这些领域的各种技术,才能使所设计的系统达到最优。
虽然嵌⼊式系统应⽤软件的设计⽅案随应⽤领域的不同⽽不同,但是嵌⼊式系统的分析与设计⽅法也遵循软件⼯程的⼀般原则,许多成熟的分析和设计⽅法都可以在嵌⼊式领域得到应⽤。嵌⼊式系统的开发过程同样也包括需求分析、系统设计、实现和测试⼏个基本阶段,并且每个阶段都有其独有的特征和重点。
本节主要介绍嵌⼊式系统开发设计的技术与⽅法,并从嵌⼊式系统应⽤和计算模型的⾓度分析应⽤软件设计的⽅法及设计过程中⾯临的主要问题。最后,讨论嵌⼊式领域软件移植的相关问题。
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)开发环境受限:嵌⼊式系统的开发环境,如开发软件、硬件⼯具通常⽐通⽤计算机或⼯作站上的可⽤环境更为有限,故只能采⽤交叉式开发,给开发进度带来很⼤影响。
2  开发模型与设计流程
与通⽤系统的开发类似,嵌⼊式系统的开发也可以采⽤软件⼯程中常见的开发模型,主要包括瀑布模型、螺旋模型、逐步求精模型及层次模型。
1.常⽤开发模型
设计流程是系统设计期间应遵循的⼀系列步骤,其中⼀些步骤可以由⾃动化⼯具完成,⽽另外⼀些只可⽤⼿⼯完成。在嵌⼊式系统领域,有如下⼏种常⽤开发过程模型。
(1)瀑布模型。瀑布模型由五个主要阶段构成:需求分析阶段确定⽬标系统的基本特点;系统结构设计阶段将系统的功能分解为主要的构架;编码阶段主要进⾏程序的编写和调试;测试阶段检测错误;最后⼀个是维护阶段,主要负责修改代码以适应环境的变化,并改正错误、升级。各个阶段的⼯作和信息总是由⾼级的抽象到较详细的设计步骤单向流动,是⼀个理想的⾃顶向下的设计模型。
(2)螺旋模型。螺旋模型假定要建⽴系统的多个版本,早期的版本是⼀个简单的试验模型,⽤于帮助设计者建⽴对系统的直觉和积累开发此系统的经验,随着设计的进展,会创建更加复杂的系统。在每⼀层设计中,设计者都会经过需求分析、结构设计、测试三个阶段。在后期,当构成更复杂的系统版本时,每⼀个阶段都会有更多的⼯作,并需要扩⼤设计的螺旋,这种逐步求精的⽅法使设计者可以通过⼀系列的设计循环加深对所开发的系统的理解。螺旋的顶部第⼀个循环是很⼩很短的,⽽螺旋底部的最后的循环加⼊了对螺旋模型的早期循环的细节补充,螺旋模型⽐瀑布模型更加符合实际。
(3)逐步求精模型。逐步求精模型是⼀个系统被建⽴多次,第⼀个系统被作为原型,其后逐个将系统进⼀步求精。当设计者对正在建造的系统的应⽤领域不是很熟悉时,这个⽅法很有意义。通过建造⼏个越来越复杂的系统,从⽽精炼系统,使设计者能检验架构和设计技术。此外,各种迭代技术也可仅被局部完成,直到系统最终完成。
(4)层次模型。许多嵌⼊式系统本⾝是由更多的⼩设计组成的,完整的系统可能需要各种软件构件、
硬件构件。这些部件可能由尚需设计的更⼩部件组成,因此从最初的完整系统设计到为个别部件的设计,设计的流程随着系统的抽象层次的变化⽽变化,从最⾼抽象层次的整体设计到中间抽象层次的详细设计,再到每个具体模块的设计,都是逐层展开的,其中每个流程可能由单个设计⼈员或设计⼩组来承担,每个⼩组依靠其他⼩组的结果,各个⼩组从上级⼩组获得要求,同时上级⼩组依赖于各个分组设计的质量和性能。⽽且,流程的每个实现阶段都是⼀个从规格说明到测试的完整流程。
2.嵌⼊式系统的设计⽅法
⼀个良好的嵌⼊式系统设计⽅法是⼗分重要的,这是因为:
(1)良好的设计⽅法可以使设计者清楚地了解他们所做⼯作的进度,这样可以确保不遗漏其中的任何⼀项⼯作。
(2)允许使⽤计算机辅助⼯具帮助设计者进⾏⼯作,将整个过程分成⼏个可控的步骤进⾏。
(3)良好的设计⽅法⽅便设计团队的成员之间相互交流,通过定义全⾯的设计过程,使团队⾥的每个成员可以很好地理解他们所要做的⼯作及完成分配给他们的任务时所达到的⽬标。
嵌⼊式系统软件的开发过程可以分为项⽬计划、可⾏性分析、需求分析、概要设计、详细设计、程序建⽴、下载、调试、固化、测试及运⾏等⼏个阶段。
项⽬计划、可⾏性分析、需求分析、概要设计及详细设计等⼏个阶段,与通⽤软件的开发过程基本⼀致,都可按照软件⼯程⽅法进⾏,如采⽤原型化⽅法、结构化⽅法等。
由于嵌⼊式软件的运⾏和开发环境不同,开发⼯作是交叉进⾏的,所以每⼀步都要考虑到这⼀点。
程序建⽴阶段的⼯作是根据详细设计阶段产⽣的⽂档进⾏的。这⼀阶段的⼯作主要是源代码编写、编译、链接等⼏个⼦过程,这些⼯作都是在宿主机进⾏的,不需要⽤到⽬标机。
产⽣应⽤程序的可执⾏⽂件后,就要⽤到交叉开发环境进⾏调试,根据实际情况可以选⽤可⽤的⼏种调试⽅法之⼀或它们的有效组合来进⾏。
嵌⼊式系统设计不同于传统的软件设计,如图 12-11 所⽰。经常包含硬件设计和软件设计,其中前端活动,如规格说明和系统架构,需要同时考虑硬件和软件两个⽅⾯。
类似的,后端设计,如系统集成和测试要考虑整个系统。在中间阶段中,软件和硬件构件的开发彼此
相互独⽴,并且⼤多数的硬件和软件的⼯作能够相对独⽴地进⾏。最后,要将经调试后正确⽆误的可执⾏程序固化到⽬标机上。根据嵌⼊式系统硬件上配置的不同,固化有⼏种⽅式,可以固化在 EPROM 和 FLASH 等存储器中,也可固化在 DOC 和 DOM 等电⼦盘中。通常还要借助⼀些专⽤编程器进⾏。
由于嵌⼊式系统对安全性和可靠性的要求⽐通⽤计算机系统要⾼,所以在对嵌⼊式系统进⾏⽩盒测试时,要求有更⾼的代码覆盖率。
在系统开发流程的各个阶段,分别要进⾏系统的确认和性能评估、安全性评估及风险性评价,并对系统的实现进⾏测试验证。
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 技术将预先设计好的低抽象级实现⽤于⾼级抽象。测试/验证技术确保每级功能正确,减少各级之间反复设计的成本。
软件设计技术的核⼼是软件语⾔。软件语⾔经历了从低级语⾔(机器语⾔、汇编语⾔)到⾼级语⾔(例如,结构化设计语⾔、⾯向对象设计语⾔)的发展历程,推动其发展的是汇编技术、分析技术、编译/解释技术等诸多相关技术。软件语⾔的级别也从实现级、设计级、功能级逐渐向需求级语⾔发展过渡。
早期,随着通⽤处理器概念的逐渐形成,软件技术迅速发展,软件的复杂度也开始增加,软件设计和硬件设计的技术和领域完全分开。设计技术和⼯具在这两个领域同步得到发展,也使得⾏为描述可以在越来越抽象的级别上进⾏,以适应设计复杂度不断增长的需要。这种同步发展如今⼜使得这两个领域都使⽤同样的时序模型来描述⾏为,因⽽这两个领域即将可能再度统⼀为⼀个领域。
鉴于⼤多数嵌⼊式系统都是实时的反应式系统,反应式系统具有多任务并发、时间约束严格与可靠性⾼的特点,针对反应式系统的设计和描述,⼈们相继提出了多种描述语⾔和验证⽅法学。例如,采⽤
时序逻辑⽤来刻画反应式系统的性质及推理反应式系统的⾏为,采⽤模型检验技术验证反应式系统设计的正确性等,这些技术已逐步在嵌⼊式开发过程中发挥着重要的作⽤。
4 嵌⼊式开发设计环境
嵌⼊式系统的开发环境种类很多,⼤体可以把它们分为如下⼏类:
(1)与嵌⼊式操作系统配套的开发环境,属于这⼀类的开发环境较多,如 PalmOS、THOS、VxWorks、Windows CE 等商业嵌⼊式操作系统都有与其配套的功能齐全的开发环境。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。