版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023/9/2华中科技大学计算机学院1第2章嵌入式系统开发技术
嵌入式系统的设计开发与一般计算机系统硬软件设计方法有很大不同.知识面同时覆盖硬件,软件,应用对象的特性(如机械方面,电机传动方面等).本章讨论下面问题: 1.嵌入式系统的结构分析
2.嵌入式系统的设计方法
3.嵌入式系统开发技术
4.嵌入式系统的调试技术
5.嵌入式系统的开发技术的发展趋势及其挑战2023/9/2华中科技大学计算机学院22.1嵌入式系统的结构分析一个嵌入式系统一般都由嵌入式计算机系统和执行装置(被控对象)组成.见P16图2-1而嵌入式计算机系统一般包括:硬件层,中间层,(系统)软件层,应用软件层(功能层)执行装置也称为被控对象,它接受系统发出的控制命令,执行规定的操作或任务.如手机中的微型电机,机床等设备中的伺服电机,冶炼中的热电耦,石油化工企业用的流量计,铁路信号连锁控制器等.本章分别介绍嵌入式计算机系统中的1.硬件层;2.中间层;3.系统软件层;以及4.应用软件层2023/9/2华中科技大学计算机学院3图2-1嵌入式系统的组成结构玻璃配料:参考资料\GLASSBATCHING.doc2023/9/2华中科技大学计算机学院42.1.1硬件层硬件层主要由嵌入式微处理器,存储器SDRAM、ROM、Flash等,电源电路、时钟电路、复位电路、存储器控制电路组成嵌入式基本系统.根据需要选定通用设备接口和I/O接口(A/D、D/A、开关、键盘按钮、传感器、LED/LCD等)等组成.形成完整的嵌入式系统.专用集成电路芯片(ASIC,ApplicationSpecificIntegratedCircuit),如打印机控制器,硬盘控制器等.可编程阵列芯片(FPGA和CPLD)FPGA(FieldProgrammableGateArray),即现场可编程门阵列2023/9/2华中科技大学计算机学院52.1.1硬件层-可编程芯片(FPGA)FPGA(Field-ProgrammableGateArray),即现场可编程门阵列.FPGA以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。FPGA中的可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(flip-flop)或者其他更加完整的记忆块。进一步阅读资料:参考资料\CPLD、FPGA、及IP核参考文献\FPGA介绍.doc2023/9/2华中科技大学计算机学院62.1.1硬件层-可编程芯片(CPLD)CPLD(ComplexProgrammableLogicDevice)复杂可编程逻辑器件,属于规模大,结构复杂的大规模集成电路范围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。CPLD的基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统.CPLD主要是由可编程逻辑宏单元(MC,MacroCell)围绕中心的可编程互连矩阵单元组成。其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。进一步阅读:参考资料\CPLD、FPGA、及IP核参考文献\CPLD介绍.doc2023/9/2华中科技大学计算机学院72.1.2中间层硬件层与软件层之间为中间层,也称为硬件抽象层(HardwareAbstractLayer,HAL)或板级支持包(BoardSupportPackage,BSP)。中间层将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。BSP具有以下两个特点。硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件联系紧密的软件模块。设计一个完整的BSP需要完成两部分工作:嵌入式系统的硬件初始化以及BSP功能,设计硬件相关的设备驱动。2023/9/2华中科技大学计算机学院82.1.2中间层-嵌入式系统硬件初始化
系统初始化可以分为3个主要环节,依次为:片级初始化、板级初始化和系统级初始化。片级初始化:完成嵌入式微处理器的初始化,包括设置嵌入式微处理器的核心寄存器和控制寄存器、嵌入式微处理器核心工作模式和嵌入式微处理器的局部总线模式等。片级初始化把嵌入式微处理器从上电时的默认状态逐步设置成系统所要求的工作状态。这是一个纯硬件的初始化过程。(F28XXDSP,内核先上电,外围后上电)板级初始化:完成嵌入式微处理器以外的其他硬件设备的初始化。另外,还需设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境。这是一个同时包含软硬件两部分在内的初始化过程。系统初始化:该初始化过程以软件初始化为主,主要进行操作系统的初始化。BSP将对嵌入式微处理器的控制权转交给嵌入式操作系统,由操作系统完成余下的初始化操作,包含加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,如网络系统、文件系统等。最后,操作系统创建应用程序环境,并将控制权交给应用程序的入口。2023/9/2华中科技大学计算机学院92.1.2中间层-硬件相关的设备驱动程序
BSP的另一个主要功能是硬件相关的设备驱动。硬件相关的设备驱动程序的初始化通常是一个从高到低的过程。尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP将它们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。与硬件相关的驱动程序是BSP设计与开发中另一个非常关键的环节。
参考资料\BSP\嵌入式系统中BSP的作用及其相关联环节的分析.pdf2023/9/2华中科技大学计算机学院102.1.3系统软件层系统软件层由实时多任务操作系统(Real-timeOperationSystem,RTOS)、文件系统、图形用户接口(GraphicUserInterface,GUI)、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。RTOS负责嵌人系统的全部软、硬件资源的分配、调度工作,控制协调并发活动;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。RTOS在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。
RTOS是相对于一般操作系统而言的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件功能等外,还有以下特点:
(1)可装卸性。开放性、可伸缩性的体系结构。(2)强实时性。
(3)统一的接口。提供各种设备驱动接日.(4)操作方便、简单、提供友好的图形GUI,(5)提供强大的网络功能,(6)强稳定性,弱交互性。(7)固化代码。嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。(8)良好的移植性.
2023/9/2华中科技大学计算机学院112.1.4应用软件层应用软件层也成为功能层.主要由基于RTOS开发的应用程序组成,完成对被控对象的控制功能.该层为方便用户操作,往往需要提供一个友好的人机界面.对复杂系统,要对系统进行需求分析,确定系统的功能.然后将其映射到整个系统的硬件,软件和执行装置的设计过程中.该过程称为系统的功能实现.2023/9/2华中科技大学计算机学院122.2嵌入式系统的设计方法
本节介绍如下三个方面的内容: 1.嵌入式系统的设计流程
2.嵌入式系统的一般设计方法
3.嵌入式系统的软、硬件协同设计技术2023/9/2华中科技大学计算机学院132.2.1嵌入式系统的设计流程如图2.2所示,嵌入式系统设计一般由5个阶段构成:需求分析;体系结构设计;硬件,软件设计;系统集成;系统测试。各个阶段之间往往要求不断的反复和修改,直至完成最终设计目标。2023/9/2华中科技大学计算机学院14图2.2嵌入式系统的设计流程2023/9/2华中科技大学计算机学院151.系统需求分析
确定设计任务和设计目标,并提炼出设计规格说明书。系统的需求一般分功能性需求和非功能性需求两方面。功能性需求是系统的基本功能,如输入输出信号、操作方式等;非功能需求包括系统性能、成本、功耗、体积、重量、等因素。2.体系结构设计
对硬件、软件和执行装置的功能划分以及系统的软件、硬件选型等。一个好的体系结构是设计成功与否的关键。3.硬件,软件设计
基于体系结构,对系统的软件、硬件进行详细设计。为了缩短产品开发周期,设计往往是并行的。应该说,嵌入式系统设计的工作大部分都集中在软件设计上,采用面向对象技术、软件组件技术、模块化设计是现代软件工程经常采用的方法。4.系统集成
把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进单元设计过程中的错误。5.系统测试
对设计好的系统进行测试,看其是否满足规格说明书中给定的功能要求。针对系统的不同的复杂程度,目前有一些常用的系统设计方法,如自顶向下的设计方法、自下向上的设计方法、逐步细化设计方法和并行设计方法等。2023/9/2华中科技大学计算机学院162.2.2嵌入式系统的一般设计方法通常在单片机系统的开发和应用中,按照下面图2.3所示的流程进行。
图2-3单片机系统的开发流程
用户需求选择处理器设计硬件平台按照设计的硬件平台编写软件遇到硬件问题?是修改硬件平台软件测试是否通过?整个系统测试开发结束否是否2023/9/2华中科技大学计算机学院172.2.2嵌入式系统的一般设计方法在嵌入式系统的应用开发中,开发过程将改变为如图2.4所示的过程。用户需求选择嵌入式处理器及硬件平台选择合适的嵌入式操作系统应用程序测试通过?整个系统测试开发结束是在操作系统上开发应用程序否图2-4嵌入式系统的开发流程2023/9/2华中科技大学计算机学院182.2.2嵌入式系统的一般设计方法在应用嵌入式系统开发的过程中,因为对应于每一个处理器的硬件平台都是通用的、固定的、成熟的。所以,在开发过程中减少了硬件系统错误的引入机会;同时,因为嵌入式操作系统屏蔽掉了底层硬件的很多复杂信息,使得开发者通过操作系统提供的API函数可以完成大部分工作,大大地简化了开发过程,提高了系统的稳定性。综上所述,嵌入式系统的开发可以说是把开发者从反复进行硬件平台的设计过程中解放出来,从而可以把主要的精力放在编写特定的应用程序上。这个过程更类似于在系统机(如PC机)上的某个操作系统下开发应用程序。(硬件平台的设计过程更加具有挑战性!)2023/9/2华中科技大学计算机学院192.2.3嵌入式系统的软、硬件协同设计技术传统的嵌入式系统设计方法如图2-5所示.硬件和软件分为两个独立的部分,由硬件工程师和软件工程师按照拟定的设计流程分别完成。这种设计方法只能改善硬件/软件各自的性能,而有限的设计空间不可能对系统做出较好的性能综合优化。2023/9/2华中科技大学计算机学院20需求分析、总体设计嵌入式硬件开发嵌入式软件开发嵌入式系统集成、测试、验证图2-5嵌入式系统的一般设计方法2023/9/2华中科技大学计算机学院212.2.3嵌入式系统的软、硬件协同设计技术从理论上来说,每一个应用系统,都存在一个适合于该系统的硬件、软件功能的最佳组合。如何从应用系统需求出发,依据一定的指导原则和分配算法对硬件/软件功能进行分析及合理的划分,从而使系统的整体性能、运行时间、能量耗损、存储能量达到最佳状态,已成为硬件/软件协同设计的重要研究内容之一。应用系统的多样性和复杂性,使硬件/软件的功能划分、资源调度与分配、系统优化、系统综合、模拟仿真存在许多需要研究解决的问题,因而使国际上协同设计领域的研究日益活跃。系统协同设计与传统设计相比有两个显著的特点:
(1)描述硬件和软件使用统一的表示形式;
(2)硬件,软件划分可以选择多种方案,直到满足要求。2023/9/2华中科技大学计算机学院222.2.3嵌入式系统的软、硬件协同设计技术传统的嵌入式系统开发采用的是软件开发与硬件开发分离的方式,其过程可描述如下:
(1)需求分析:
(2)软硬件分别设计、开发、调试、测试:
(3)系统集成:软硬件集成;
(4)集成测试:
(5)若系统正确,则结束,否则继续进行;
(6)若出现错误,需要对软、硬件分别验证和修改:
(7)返回(3),继续进行集成测试。虽然在系统设计的初始阶段考虑了软硬件的接口问题,但由于软硬件分别开发,各自部分的修改和缺陷很容易导致系统集成出现错误。由于设计方法的限制,这些错误不但难于定位,而且更重要的是,对它们的修改往往会涉及整个软件结构或硬件配置的改动。2023/9/2华中科技大学计算机学院232.2.3软、硬件协同设计技术软硬件协同设计方法。一个典型的硬件/软件协同设计过程如图2-6所示。首先,应用独立于任何硬件和软件的功能性规格方法对系统进行描述,采用的方法包括:有限态自动机(FSM)、统一化的规格语言(CSP、VHDL)或其他基于图形的表示工具,其作用是对硬件/软件统一表示,便于功能的划分和综合;(VHDL使用最多!)然后,在此基础上对硬件/软件进行划分,即对硬件,软件的功能模块进行分配。但是,这种功能分配不是随意的,而是从系统功能要求和限制条件出发,依据算法进行的。完成硬件/软件功能划分之后,需要对划分结果做出评估。方法之一是性能评估,另一种方法是对硬件、软件综合之后的系统依据指令级评价参数做出评估。如果评估结果不满足要求,说明划分方案选择不合理,需要重新划分硬件/软件模块,以上过程重复直到系统获得一个满意的硬件/软件实现为止。2023/9/2华中科技大学计算机学院24系统描述软硬件划分接口综合设计验证设计实现硬件综合软件综合图2-6嵌入式系统的软硬件协同设计2023/9/2华中科技大学计算机学院252.2.3嵌入式系统的软、硬件协同设计技术软硬件协同设计过程可归纳为:
(1)需求分析;
(2)软硬件协同设计;
(3)软硬件实现;
(4)软硬件协同测试和验证。这种方法的特点是在协同设计(co-design)、协同测试(c0-test)和协同验证(Co-verification)上,充分考虑了软硬件的关系,并在设计的每个层次上给以测试验证,使得尽早发现和解决问题,避免灾难性错误的出现。进一步阅读:参考资料\嵌入式系统的开发技术与设计方法参考文献\嵌入式系统的设计流程和一般设计方法.doc2023/9/2华中科技大学计算机学院262.3嵌入式系统开发技术
嵌入式系统开发技术方面主要介绍如下4个方面的内容: 1.需求分析
2.详细设计
3.系统实现
4.系统测试2023/9/2华中科技大学计算机学院272.3.1需求分析需求分析是在项目开始时了解项目的情况,解决用户需要做什么、需要完成什么功能和任务等问题,这一阶段主要包括:分析用户的需求、初步确定硬件和软件、检查需求分析的结果、确定项目的约束条件、概要设计等几个方面。2023/9/2华中科技大学计算机学院281、分析需求1)分析需求通过与客户交流,了解用户的需求、用户意图等,明确客户到底需要开发什么样的产品,包括产品的功能需求和非功能需求。通常,描述产品需求的文档是由嵌入式系统分析师从用户的视角来写的,由一系列的用户需求组成,以文字、图表等方式描述客户需求。再从客户的需求中获取一组一致性的需求,并整理成正式的规格说明书。2023/9/2华中科技大学计算机学院292)确认需求一般来说,客户对产品的需求主要包括功能、性能、价格、尺寸和重量、功耗等。
性能:主要指系统的性能,最重要的就是系统的处理速度,系统的处理速度通常是该系统的实用性和最终成本的主要决定因素(不一定!井下仪表,无线传感器网络等能耗最重要!)。
价格:产品最终的成本或者销售价格也是一个主要的考虑因素。产品的成本包含生产成本和不可再生工程成本(比如人力成本和设计系统的其他花费)(民用系统价格非常重要,国防系统性能第一!)。2023/9/2华中科技大学计算机学院30
系统的尺寸和重量:最终产品的物理特性会因为使用的领域不同而大不相同。手持设备对系统的尺寸和重量就有很严格的限制。国防上星、上机、上舰装备对尺寸、载荷有严格要求。
功耗:比如那些靠电池来供电的系统以及其他一些电器来说,功耗是十分重要的。如:油井的井下仪器仪表。在一些非电池供电的场合,如工业防爆现场(矿井、化工等),对电源也有严格的要求,以保证应用环境的安全。电源问题在需求阶段可以以电池寿命的方式(通常mAh,毫安小时)提出,也可以以系统的供电电流要求数值提出。2023/9/2华中科技大学计算机学院313)罗列需求下面列举的是一些能让设计者的思维细致化的问题,当然,并不是列出的每个问题都适合所有的嵌入式系统项目。(1)系统任务是什么?(2)系统输入是什么?(3)系统输出是什么?(4)用户接口如何,如何交互?(5)系统的重量和体积如何,尺寸如何?(6)系统需连接哪些或哪类外设?(7)系统是否需要其他软件?(8)系统处理的数据类型?(9)系统与其他系统的通信方式?2023/9/2华中科技大学计算机学院32(10)系统是单机系统还是网络系统?(11)系统的响应时间是多少?(12)系统的安全措施?(13)系统的运行环境?(14)系统存储器类型、容量?(15)系统的可拆装性、可靠性和牢固性?(16)系统的供电模式?(17)系统故障处理方式、方法以及用户如何处理故 障?(18)是否需要任何手动或机械代用装置?(19)系统是否将具有远程诊断或更正问题的功能?(20)其他问题。2023/9/2华中科技大学计算机学院334)需求表格如表2—1所示为一个需求表格的样本,这个表格在工程开始时填写。在考虑系统基本特征时可以将这个表格作为检查表。表2-1需求样本名称目的输入输出功能生产成本功耗性能物理尺寸和质量5)需求的内部一致性写完需求以后,应该对它们的内部一致性进行检查。2023/9/2华中科技大学计算机学院342、确定软硬件系统分析阶段需要考虑的一些项目如下。
处理器:首先选择处理器的速度(暂时可以不选择处理器的型号,处理器的速度一般以MIPS为度量标准)
总线吞吐量:总线的吞吐量在大量的数据传输应用(如多媒体应用)中非常重要。
操作系统:选择将使用的操作系统是另一个关键的决定。也许,做出这个决定可能为时过早,但可定下设计所需的操作系统的类型。2023/9/2华中科技大学计算机学院35
编程语言:选择系统开发语言,这一过程比较简单,目前在嵌入式系统开发中,使用比较多的语言是C语言,或C语言与汇编语言的混合;其次是Java、嵌式入C++等。
编译器选择:关于选择编译器方面,目前的选择比较多,一般分成商用和免费两种。目前的商用编译器一般以集成开发环境工具包的方式提供,其优点是代码优化比较好、效率高,缺点是价格贵;免费的工具使用最多的是GNU系列工具,如GCC编译器、GDB调试器,免费工具已经被移植到了许多常用的处理器上了,如ARM系列、PowerPC系列、MIPS系列等,但是它们的编译效率不高。2023/9/2华中科技大学计算机学院36
选择硬件:设计嵌入式系统硬件通常有两种方法。一种方案是使用第三方的硬件模块,典型的如PC104模块,用户只需要选择I/O模块,就可以很快地开发出嵌入式系统产品的原型。另一种方案是自己设计(上水平,完全自主。真正高精尖的产品必须采用自己设计方案)。一般地,商品化模块的成本比较高,如果开发的产品数量比较大,尽量采用自己设计的方案,可以降低成本。但是在开发阶段,可以使用第三方提供的开发板、评估板等缩短开发时间。2023/9/2华中科技大学计算机学院373、审视需求分析的结果(略)1)原因在嵌入式系统分析阶段可能会发生许多错误。一般地,在嵌入式系统项目中,超过一半的错误是在写系统需求和技术指标时出现的。审查系统需求分析阶段建立的资料的完整性和正确性是有利于提高开发效率。2)目的分析阶段审视的目的就是要确定在此阶段建立的资料是否全面,调研工作是否细致,是否清楚地描述系统将做什么。3)方法和内容《软件工程、方法与管理》一书建议使用下面的判据来审查需求分析资料:(1)噪声:不相干的信息。(2)只字不提:漏掉的信息。(3)超前规定说明:一些本应在设计阶段才能提出来 的信息。2023/9/2华中科技大学计算机学院38(4)矛盾:不相容的技术指标和约束。(略)(5)模棱两可:一个技术指标或约束条件可有多种解 释。(6)超前引用:某种性质特点在被明确定义说明前就 被引用到资料中。(7)一厢情愿:说明了某一要求,但对该要求没法 一种方法去实现。审视需求分析资料的最有效的方法是让对该项目有不同看法的人来评论你的资料。请用户、客户、技术人员和其他人按上述判据来检查你在分析阶段建立的资料。看法角度不同的人能找出不同的错误,而且多个人来看一个文件可降低错误遗漏的可能性。根据最后的审查结果,确定是接着进行设计阶段,还是对分析的某些部分重新改造。2023/9/2华中科技大学计算机学院39对于任何一个项目,都存在一定的约束条件,有的约束是人为造成的,有的是客观条件造成的,因此,对嵌入式系统项目而言,同样也存在约束条件。约束条件属于项目实施过程中的不利因素,指的是项目实施过程中限制项目按时圆满完成的内部和外部因素之总和。在项目实施之前,必须把约束条件找出来,考虑解决的办法。寻找约束条件思路要广,尽量找到将可能加到项目上的所有约束条件。不管约束是项目内部的还是外部的,是人为的还是客观存在的,都一一给列举出来。并在项目开发时牢记心中。4、项目约束(略)2023/9/2华中科技大学计算机学院40以下是可能的一些约束条件。(略)(1)阶段性和工期限制;(2)项目预算能否满足开发要求;(3)项目组人员结构、技术水平、经验等;(4)员工投入时间是多少;(5)员工对项目的熟悉程度;(6)项目采用的软硬件资源;(7)项目组人员到位时间;(8)项目管理、是否依赖某固定的供应商。2023/9/2华中科技大学计算机学院411)建立系统结构模型的方式概要设计主要是对系统的初步功能进行设计。这种设计是粗糙的、不具体的和不详细的,但又是嵌入式系统开发中十分重要的阶段。在需求分析建立之后,就需要建立完整的功能模型,并根据现有的系统结构库对系统模型进行设计。一般而言,在系统结构模型和系统功能模型之间可以通过建立一个映射层,来完成从功能需求到结构模型之间的转化。在映射层上完成的任务主要是选择映射的方式,考虑在性能和应用需求环境方面的因素。如图2—7所示描述了在功能层、映射层和模型层之间的关系。在完成需求分析后就要建立功能需求库,功能需求库是需求分析的结果。5、概要设计2023/9/2华中科技大学计算机学院42功能需求库功能需求库将功能转换为结构验证性能和应用需求将功能转换为结构将功能转换为结构功能层(略)映射层模型层图2-7系统结构模型建立方式2023/9/2华中科技大学计算机学院432)系统结构模型建立系统结构模型包括硬件和软件两个部分,在系统结构的实现中采用硬件/软件协同设计(Hardware/SoftwareCo-design)方式完成。如图2-8所示是一个典型的从上至下的设计、实现过程。不必完全照搬硬件/软件协同设计,有时单片机方式更实在!2023/9/2华中科技大学计算机学院44系统结构模型功能设计任务寄存器传输设计模块高层语言逻辑门级设计物理设计目标代码系统集成通信进程结构化描述详细逻辑设计系统测试图2-8软硬件协同设计的结构模型这实际是FPGA开发方式!2023/9/2华中科技大学计算机学院45硬件设计包括以下三个部分:(1)功能性设计:根据模型确定硬件需要实现的功能。(2)结构化设计:确定硬件的组成,并确定数据的控 制流程。(3)物理设计与实现:硬件逻辑设计,包括硬件电路 图的设计,最后是物理硬件实现,以开发板的形式出现。软件设计包括以下三个部分:(1)功能分析和设计:分析系统需要实现的任务。(2)软件模块划分:根据任务划分使用的模块。(3)模块开发与实现:通过编程语言实现各个高层模 块,并通过交叉开发环境实现目标代码。在系统集成时,需要实现硬件底层代码(包括板级支持包代码和硬件抽象层代码),完成软、硬件的集成任务。然后进行系统测试。2023/9/2华中科技大学计算机学院46详细设计阶段是利用需求分析的结果,设计满足用户需求的嵌入式系统产品的阶段。这一阶段主要工作是审查需求分析获得的资料,进行体系结构设计、硬件和软件功能的划分、硬件和软件的设计、检查设计等。1、审查需求分析资料
审查分析资料:在着手设计系统前,应仔细审查问题陈述和用户要求。着手某个项目前,应该时刻记住系统实现的目标。因此,必须通过审查那些定义等待解决的问题和需达到的目标的文档资料来整理一下自己的记忆。2.4.2详细设计2023/9/2华中科技大学计算机学院47审查约束条件:约束条件将决定可做何选择以及如何建立系统。例如,系统要求浮点运算,但预算不允许处理器中含一个浮点运算协处理器。这就意味着设计必须规定浮点运算将由软件来完成。也意味着必须写一个浮点函数库或买一个第三方产品。2、体系结构设计体系结构设计的目的是描述系统的功能应如何实现。体系结构是系统整体结构的一个计划。系统的体系结构取决于如下因素。1)系统实时方案系统实时方案是指客户要求系统具有实时性时,应该选择什么样的实时方案,是选择硬实时系统还是软实时系统。比如在硬实时系统的情况下,对定时的要求非常严格(如实时工业控制),因此,需要详细地进行定时分析。2023/9/2华中科技大学计算机学院482)操作系统方案在嵌入式系统项目中,根据客户需求来分析是否需要嵌入式实时操作系统,如果客户的应用非常简单或只有一项或少数的任务,就不需要选择操作系统,要不然,就必须考虑嵌入式操作系统的选择问题。3)非功能要求是否重要非功能性需求主要是指嵌入式系统产品的重量、物理尺寸等方面。如果是消费类电子产品,航空航天产品,传感器网络产品等,则这些因素就是非常关键的。2023/9/2华中科技大学计算机学院494)硬件方案在硬件方案选择时,主要是选择处理器和相关的硬件部分。使用比较多的处理器主要有微控制器、微处理器和DSP。对于小型应用系统,选择微控制器就足够了,否则,需要一个微处理器,如果应用涉及到信号处理,比如音频或视频处理,就需要选择DSP了。如果应用系统是一个多功能的系统,就可以选择包含一个微控制器或微处理器和一个DSP,来满足不同的功能。3、确定系统的软硬件界线从嵌入式系统概念可知,嵌入式系统本身就是软硬件的统一体、综合体,也许软件和硬件之间没有明显的界线,但是,在进行嵌入式系统设计时,必须对硬件与软件进行定界,设计人员必须决定问题的哪一部分在硬件中解决,哪一部分在软件中解决,这种选择称为软硬件定界或称为软硬件划分决策。2023/9/2华中科技大学计算机学院50在嵌入式系统设计中,到底是先设计硬件还是先设计软件,或是软硬件同时进行设计,这在嵌入式系统设计中没有设计次序的限制,有的系统可以先设计硬件,也可以先设计软件,也可以同时进行,具体可根据项目的要求、进度和约束条件来确定设计次序。4、确定软硬件设计次序2023/9/2华中科技大学计算机学院515、硬件设计1)设计硬件子系统硬件设计的方法很多,主要有自顶向下(Top-Down)、自底向上、模块设计方法和硬件设计外包等。但硬件设计中,最常用的方法是自顶向下(Top-Down)设计法。用自顶向下(Top-Down)方法:先将硬件分成各部件或模块,并画出一张或多张硬件部件的框图。用一个框图表示一个单独的电路板或电路板的一部分(比如处理器子系统、存储器子系统可以作为一个模块,数据采集电路和现场驱动电路可以作为输入/输出电路的一部分。在某些情况下,还可将框图用于一个或多个电路板。把电路逻辑分割成大致对应于各功能的一些部件,这些功能将由某个成品芯片,某个需要制备的PAL(可编程阵列逻辑)芯片等提供。参考资料\电路原理图\EB44B0_Sch.pdf框图提供了一个快速直观的参考,框图给出如何同硬件通信,硬件各部件如何互连,而且,框图帮助设计者在头脑中构建出一个高级的系统框架。2023/9/2华中科技大学计算机学院52在硬件设计阶段,定义专门的接口电路和接口软件;而接口的设计是硬件设计者和软件设计者协同工作才能完成。硬件接口的定义和设计主要对I/O端口、硬件寄存器、内存的共享与映射、硬件中断的中断号及分配、处理器指标等进行定义和设计。对硬件接口的定义和设计的基本要求是尽可能多的信息提供给软件开发者,便于进行软件设计和编程。2)硬件接口的定义和设计2023/9/2华中科技大学计算机学院531)设计软件子系统在进行软件设计时,先设计软件的体系结构。在嵌入式系统中比较普遍的体系结构有:层次结构、动态层次结构、正交体系结构静态模块结构等。对于小的应用系统,一般使用层次结构即可;对于大的应用系统软件设计,就应该使用多种体系结构,才能更好的完成设计任务。6、软件设计2023/9/2华中科技大学计算机学院54在设计好系统的软件体系结构后,就应该选择一种适合应用开发需求的软件设计方法。软件设计的方法很多,主要有原型法、结构化设计方法、面向对象设计方法、自低向上、自顶向下等。软件设计一般采用自顶向下(Top-Down)的设计方法,在定义了硬件接口后,将系统的软件分解成一些适当定义好的子系统或模块。自顶向下设计方法的目的是找出自成一体的模块或子系统,考虑这些模块或子系统之间的关系比整个系统考虑和讨论起来更容易些;并且分离出的软件模块可以并行开发,然后进行组装。例如设计一个嵌入式系统,包括LCD显示、UART通信端口、以太网端口。设计时把这些模块分开,分别进行设计和实现,将会大大加快项目的进展。2023/9/2华中科技大学计算机学院55将模块进行分解,分解后独立开发,就可以复用以前的设计工作,避免重复开发每一个子系统。也许可以购买注册第三方的软件(如开发网络设备),购买商品化的TCP/IP协议栈会缩短产品上市的时间。然后就是详尽描述各个子系统和模块的功能。其实在找出子系统时,设计者已经开始做这种工作了,因为这个任务本身就需要理解各个子系统的功能。软件设计者需要加强对各子系统的了解,如各子系统做什么用,它能提供什么服务和需要别的哪个子系统提供什么服务。这些子系统的功能描述应该以设计文档的形式提供。需要说明的是,在设计嵌入式软件模块时,设计者必须用专业技能和专业知识确保系统实时性良好并且在允许的范围内不占用更多的存储空间。2023/9/2华中科技大学计算机学院56软件接口定义的主要任务是规定各个子系统的软件接口和详细的API(应用程序编程接口),如规定函数调用、数据结构以及各子系统接口用到的全局数据。该部分采用函数原型、数据结构声明、类声明等建立头文件实现软件接口定义。软件系统的总设计师还应该给出模块之间的依赖关系,如果给出函数之间的依赖关系,那么设计就很详细了。通常在较大的系统设计时,给出函数之间的依赖关系比较困难,一般只给到模块之间的依赖关系就足够了,函数之间的依赖关系留给各个模块的实现部门来解决。2)软件接口的定义2023/9/2华中科技大学计算机学院573)规定系统启停过程规定系统启停过程就是说明系统启动和关闭过程中事件发生的顺序。对于启动,说明硬件和软件子系统初始化的细节,以及初始化的顺序。4)定义出错处理方案某些嵌入式系统需要连续数日或数周地无人值守运行,因此出错处理在一个嵌入系统中是很关键的。比如无人值守的铁路道口可知系统,就是一个典型的嵌入式系统设备作为道口控制的核心,如果不规定或定义错误处理方案,就完全可能出现重大交通安全事故,甚至出现人身伤亡。在设计阶段建立出错处理策略是非常重要的。尽早定义出错处理程序有助于确保程序员在设计一开始就纳入出错处理代码,而不会在实现过程中,因出错处理功能的定义工作还没到位而忽略出错条件。2023/9/2华中科技大学计算机学院585)看门狗计时器看门狗计时器(Watchdog)涉及到硬件和软件的内容,在后面的章节中还要详细讨论。有些的嵌入系统被部署在恶劣环境中工作,在这样的环境中,任何事都有可能发生。设计人员必须有所准备,以应付系统严重失败而导致的崩溃,而且还必须想法从崩溃中完美地恢复系统。系统的这种恢复是借助看门狗计时器(Watchdog)完成的。看门狗计时器是一个设计者建在某种CPU中的小报警时钟。当CPU通电后,软件打开它的监视计时器,在正常运行期间软件定期地对监视计时器复位。监视计时器始终不会数到零,即没什么事发生。然而如果发生了某些问题,以致于软件不能对监视计时器复位,监视计时器将重新启动整个系统。有些具有监视功能的CPU甚至提供一种方法,用这种方法,正在经历初始化的软件能够确定系统只是在通电,还是在从监视器诱发的复位中恢复。如果是后者,软件可检查环境并试着判断是什么导致了崩溃。2023/9/2华中科技大学计算机学院59在需求分析阶段需要检查的是完成资料的质量和完整性,而设计阶段需要检查的是系统设计的正确性、准确性。在小的嵌入式系统项目,可以按噪声、只字不提、超前规定、矛盾、模棱两可、超前引用和一厢情愿7个判据来审查设计文档。中等规模的项目中,要按一种非正式的排练方式来审查设计文档,这个任务可以很简单,如拿给同事朋友并向他们解释你的设计,在解释你的设计时,让同事们用那7条判据夹检查。大型嵌入式系统项目中,设计者应作一个更正式的报告。召开一个设计审查会,成员主要由工程师组成,并尽可能包括一些对项目有不同看法角度的成员,如做市场的人员、最终用户,向其解释他们要借以评判本设计的7条判据,然后向他们讲解你的设计。虽然向那些非技术人员解释技术性问题有困难,但你会发现,他们往往会发现一些被设计者忽视的错误。7、检查设计(略)2023/9/2华中科技大学计算机学院608、嵌入式系统设计的自动化(略)嵌入式系统的设计工作是一个涉及到多个方面的复杂工程,完成一个嵌入式系统的设计项目,包括需求分析、系统设计、系统实现、系统测试等阶段。系统设计阶段是依据需求分析的资料,完成符合客户需求的系统设计,然后将设计方案提交给开发部门,开发部门完全按照设计方案进行实现(主要包括硬件设计、软件设计和编码等)。由此可见,系统设计是整个嵌入式系统工程中至关重要的一个环节,系统设计的缺陷会严重影响开发工作,而且,完善的系统设计会花费大量的时间。为减少设计开销并提高性能和设计效率,人们一直在强调嵌入式系统设计过程的自动化。设计嵌入式系统的设计人员需要具有软、硬件两方面的知识。由于软、硬件设计组之间缺乏交流,往往不能达到设计的最优化。嵌入式系统设计工具不支持设计任务的分离,从而使问题更加复杂化。所以,嵌入式系统自动化设计工具的出现是大势所趋。总之,嵌入式系统的设计框架包括系统定义、系统设计分割、软硬件合成、软硬件估计和设计确认。2023/9/2华中科技大学计算机学院619、硬件平台(略)嵌入式系统的开发人员在选择最好的硬件时,由于缺乏完整或精确的信息而使选择硬件成为复杂且困难的工作。硬件成本经常是关键的议题,在考虑成本时,需要确信在考虑产品的整个成本而不仅是CPU的成本,这是因为好的CPU一旦加上总线逻辑和延时电路使之与外设一起工作时,硬件系统可能变成非常昂贵的产品。比如,CAN总线,就其本身而言,应该时非常容易实现,且费用不高,但如果是将CAN总线进行分析,也就是CAN总线分析仪,那就非常昂贵,少的几万,多的要十多万人民币。嵌入式系统的硬件平台比较多,有ARM系列(目前有几十种基于ARM内核的处理器被使用)、Motorola公司的PowerPC系列、Coldfire系列、DragonBall系列,NEC公司的VR系列,Hitachi公司的SH3、SH4系列等,都可选为硬件平台。但最好在选适合系统应用功能和所需的速度,并且制定好外接设备和接口标准。这样可准确地定位所需要的硬件方案,得到性价比最高的系统。2023/9/2华中科技大学计算机学院62嵌入式系统的开发平台由硬件平台、操作系统、编程语言和开发工具组成。嵌入式系统开发先选择处理器,用处理器厂商提供的开发工具,然后就是选择嵌入式操作系统,有的嵌入式操作系统厂商也提供必要的开发工具,比如用在操作系统上编写应用程序的API、调试器等。最后就是确定编程语言,并进行开发工作。除了上述的开发工具,可能还需要编程器、ROM仿真器、内部电路仿真器、指令集模拟器、测试仪器(如示波器、逻辑分析仪和万用表等)用于调试程序和硬件。1)选择处理器选择处理器没有什么特殊的规定,根据开发者的意愿。一般来说,在选择嵌入式处理器时,主要是根据用户的需求和项目的要求选择处理器。同时兼顾开发人员对处理器的熟悉程度,以节省时间、提高系统设计开发效率。2.4.3系统实现1、选择开发平台2023/9/2华中科技大学计算机学院63
处理器的处理速度影响处理器速度的因素很多,主要是处理器的主频,还包括多方面时钟频率、内部寄存器的大小、寄存器是否被公平对待(即指令对等处理所有的寄存器)、有助于耗时操作的特殊的内置硬件(如一个硬件乘法单元)等。处理器的处理速度一般用MIPS来表示,如果系统需要大量的浮点运算需求,那么可以用每秒执行多少百万次浮点运算(Millionoffloat-PointOperationsPerSecond,MFLOPS)来表示。总的原则是应当让处理器的能力同项目的技术指标匹配。
对选择的处理器熟悉程度在开发嵌入式项目时,完全有可能碰到这样的情况,选择的处理器的各种指标(成本、处理速度等)都符合要求,但是项目组的人员对这种处理器不太熟悉,这就影响项目进度和项目开发效率。事实上,目前的嵌入式处理器种类非常多,项目中只能选择惟一的一种处理器的情况并不多见。因此选择处理器也可选择多个方案,根据开发人员的熟练程度做进一步的选择。2023/9/2华中科技大学计算机学院64
处理器上的I/O功能是否满足需求如果所选择的嵌入式处理器提供内置外设(如UART、以太网控制器、液晶控制器等),就可以减少芯片数量,进而降低整个系统的成本,提高了系统的可靠性。因此,在选择处理器时,尽量选择单芯片方案。
处理器的软件支持工具一种新的处理器并非所有的嵌入式操作系统都会支持。另外,还需要考虑开发语言与交叉编译器等的支持。
处理器的调试支持如果所选择的处理器没有集成的调试支持,就必须使用在线仿真器。低速处理器的在线仿真器比较便宜,但是高速处理器的在线仿真器非常昂贵,因此应尽量选择内置硬件调试功能的处理器,如JTAG调试方式、BDM调试方式等。如具备JTAG调试接口的处理器几乎成了嵌入式处理器的标准配置功能。
处理器制造商的支持可信度如何2023/9/2华中科技大学计算机学院652)选择硬件部件
产品的需求量嵌入式系统客户的产品需求量越大,越值得自己去设计和制备硬件,从而降低成本。相反,如果量很小,设计的费用淹没自制所节省的费用,这时从第三方购买成品的电路板可能是个好的方案,例如常用的PCI04模块、配套的I/O板卡和模块等。
目标市场的机会如果需要使产品尽快发售,从而获得竞争力,尽可能买硬件自制的越少越好。如果有富裕充足的设计时间,可以设计自己的硬件,以降低成本。
软件对硬件的依赖程度有的系统开发时,软件必须尽早地在硬件上进行开发,这时购买成品的硬件就是一个比较好的方案。如选择S3C44B0x进行中小规模的嵌入式系统开发时,当工期较短或数量巨大等,就可以先购买相应的开发板,发板上进行软件开发。大多数的嵌入式处理器的制造商提供了评估板提供用户使用,评估板的功能做得非常全面,只要设计者选择了该厂家的处理器,那么处理器上集成的功能在评估板上都有设计,方便了软件开发工作,这时硬件开发者参考评估板进行定制设计即可。2023/9/2华中科技大学计算机学院663)选择操作系统在选择嵌入式实时操作系统(real-timeoperationsystem,RTOS)时,应该根据具体项目,如果项目为实时性比较强的操作系统,该操作系统应该具备以下特征:基于优先级的多任务抢占式调度策略;内核短小,实时性好,能进行快速的上下文切换(小于5µs),效率高;开放源代码,并且支持一系列的处理器芯片;低的内存要求;具有可裁剪、可移植性。因此,在选择操作系统时,主要是根据操作系统的功能、配套的开发工具、移植难度如何、对调试的支持等来决定,具体判别如下:
功能选择根据项目需要的操作系统的功能来选择操作系统产品,考虑的具体问题有以下几点:2023/9/2华中科技大学计算机学院671、需要操作系统的全部功能还是部分功能。全部功能包括处理机管理、存储器管理;2、文件系统、人机界面等;3、实时系统还是分时系统;4、操作系统是否可裁剪;5、如果系统很小,是否可以不需要操作系统。
开发工具方面有的实时操作系统只支持该系统供应商的开发工具,即必须在操作系统供应商那里获取编译器、调试器等。相反,如果操作系统使用广泛的第三方工具(μC/OS-II操作系统,就可以在ARM公司提供的SDT2.51、ADS1.2和keilC51等环境下进行开发),那就有更多的选择余地。2023/9/2华中科技大学计算机学院68
移植难度在购买操作系统后,进行的开发工作主要是应用开发和板级支持包的开发。所谓板级支持包,指的是操作系统运行在用户的目标板上所需的软件,一般操作系统的供应商会提供流行的标准板的支持包,用户板的一些参数可能与标准板有差别,因此需要进行板级支持包的开发。通常这种差别不是太大,厂家也会提供一些移植的模板以供用户参考。不同的操作系统的移植难度不同,用户必须考虑到这一点。
调试支持有的操作系统允许用户打开特殊的调试层,并深入操作系统内部去调用一些有助于跟踪解决应用程序问题的功能。还有的操作系统提供源代码(比如μC/OS-II、嵌入式Linux等),这样的话,便于用户更好地解决调试的问题。需要指出,提供源代码的操作系统系统不一定更方便用户的使用,因为用户开发的重点在于应用,而不是操作系统。相反,提供功能强大的调试手段则是必要的。2023/9/2华中科技大学计算机学院69
内存要求如何操作系统对内存的需要,也是选择操作系统的重要指标之一。每一种操作系统的运行,都需要一定的内存支持,比如μC/OS-II操作系统最小只需要8KB的内存。操作系统需要的内存越多,意味着目标板需要设计更多的存储器,加大了系统的成本,有时也可能降低系统的运行速度,这时需要提高处理器的性能,无形中又增加了成本。
项目人员是否熟悉此操作系统在选择操作系统时,一定要考虑到项目人员对所选操作系统的熟悉程度。如果不熟悉,那么项目的进度将增加额外的时间,以便让程序员熟悉此操作系统。通常,嵌入式操作系统的API各不相同,但是差别也不会太大,目前大多数嵌入式操作系统的API符合POSIX标准。2023/9/2华中科技大学计算机学院70是否包括所有需要的部件所选择的操作系统是否包括项目必须的应用部件,如果没包括,必须自己开发或到别处去买,并要将它们集成。比如选择μC/OS-II操作系统后,由于μC/OS-II是开源的操作系统,没有TCP/IP协议、文件系统、图形系统等,如果项目又需要这些部件,那就只有自己开发或去购买,然后在集成。一般要求的部件包括网络支持(TCP/IP协议等)、文件系统、快速文件系统、计算机卡支持、CDROM支持、浮点仿真运算、人机界面以及串行I/O支持。2023/9/2华中科技大学计算机学院71
是否有目标硬件的驱动程序针对某一种嵌入式处理器的操作系统,一般会提供处理器上的设备驱动程序。如果用户的设备驱动程序没有支持,那么必须开发。一般操作系统会提供开发的模板代码。
操作系统是否具有可扩展性具有可扩展性的操作系统使用的灵活性比较好,用户功能方便地裁剪不需要的部分,从而降低对硬件的资源要求,否则不必要的系统功能会消耗内存资源。4)选择编程语言大多数系统的开发使用C语言和汇编语言,有的使用C++语言,有的选择Java语言、EmbeddedVisualBasic和EmbeddedVisualC/C++等其他语言。选择编程语言主要考虑软件开发人员的熟悉程度、语言使用的广泛程度以及语言的性能如何等。一般来说,越是高级的语言,其编译器和运行库附加的开销越大,应用程序也越大、越慢。例如,已经公认用汇编语言能写出最小最快的程序,其次是用C语言。2023/9/2华中科技大学计算机学院72嵌入式系统开发的一般方式采用是先在评估板进行开发,当在评估板上开发、运行、调试成功之后,再根据评估板使用的硬件,裁剪一般应用中不需要的硬件,最后做成产品板大量生产。嵌入式开发平台需要在评估板上提供微处理器、存储芯片以及其他的外围硬件等设备,在软件方面提供系统的开发平台和下载工具,还有驻留在硬件上的Bootloader工具。对于有嵌入式操作系统的开发平台,还需要提供操作系统开发工具。5)关于评估板2023/9/2华中科技大学计算机学院736)板级支持包在嵌入式系统中,虽然选择的嵌入式处理器完全相同(更多的情况是嵌入式处理器属于一个系列),但是具有不同的片上外部设备配置,不同嵌入式处理器的片上外部电路不同(因为用户的应用不同),这就造成操作系统不可能适应所有的嵌入式应用。通常操作系统的提供商的做法是把操作系统按照层次进行划分,分为上下两个层面;上层与硬件无关,下层与硬件有关。用户在把操作系统运行到目标板上时,需要针对自己的目标板的特殊情况,编写目标板的支持操作系统运行的代码,以适应操作系统的运行,这一部分代码通常称为板级支持包(BoardSupportPackage,BSP)。板级支持包通常不会太复杂,对于某种商业单板机(Single-BoardComputer,SBC),则BSP可能早己准备妥当。大多数操作系统的供应商会提供板级支持包的开发方法和开发模板。2023/9/2华中科技大学计算机学院741)嵌入式系统的软件开发过程软件开发主要分为建立交叉开发环境、交叉编译和连接、重定位和下载、联机调试等几个步骤。
建立交叉开发环境。在准备开发之前,必须先了解和认识或熟悉嵌入式编程中使用的交叉开发环境(CrossDevelopmentEnvironment)。交叉开发环境是嵌入式系统开发中必不可少的编程环境。交叉开发环境的原理很简单,只是在主机和目标机器体系结构不同的情况下,在主机上开发那些将在目标机器上运行的程序。比如说在PC机上利用ADS/SDT开发ARM目标板上运行的程序,就是在PC机上开发(程序编辑、编译、定位连接等),形成ARM目标板可运行的代码。这里提到的ADS/SDT加上桌面计算机就构成了交叉开发环境。2、软件开发过程2023/9/2华中科技大学计算机学院75按发布的形式,交叉开发环境可分为开放和商用两种类型。开放式交叉开发环境实例主要有gcc,它可以支持多种交叉平台的编译器,但要遵守GeneralPublicLicense的规定。商用交叉开发环境有MetrowerksCodeWarrior,ARMSoftwareDevelopmentToolkit,SDSCrossCompiler,WindRiverTornado等。按照使用方式,交叉开发工具主要分为使用Makefile和IDE开发环境两种类型。使用Makefile的开发环境需要编译Makefile来管理和控制项目的开发,可以自己手写,有时候也可以使用一些自动化的工具。这种开发工具是gcc,SDSCrossCompiler等。新类型的开发环境一般有一个用户友好的IDE界面,方便管理和控制项目的开发,如CodeWarrior等。有些开发环境既可以用Makefile管理项目,又可以使用IDE,给使用者很大的选择余地。2023/9/2华中科技大学计算机学院76
交叉编译和连接。使用建立好的交叉开发环境完成编译和连接工作。比如ARM的gcc交叉开发环境中,arm-linux-gcc是编译器,arm-linux-ld是连接器。但并不是说对于一种体系结构只有一种编译连接器,比如对M68K体系结构的gcc编译器而言,就有多种不同的编译和连接器。如果使用COFF的可执行文件格式的话,那么在编译Linux内核时需要使用m68k-coff-gcc和m68k-coff-ld的编译连接器;在编译应用程序时需要使用m68k-coff-pic-gcc和m68k-coff-pic-ld的编译连接器。这是因为应用程序代码需要编译成为可重定位代码。这样,虽然因为内核占用位置导致应用程序存放的位置不同,但仍可以使用相对地址运行应用程序。2023/9/2华中科技大学计算机学院77
重定位和下载编译连接后形成目标板的image文件,就可以通过相应的工具与目标板上的bootloader程序进行通信,可以使用bootloader提供的通讯工具与目标机相连接,也可以使用通用的终端工具与目标板相连接。一般在目标板上使用串口,通过主机端工具和目标板通信。bootloader中提供下载等控制命令,完成在嵌入式系统正式在目标板上运行之前对目标板的控制任务。bootloader指定image文件下载的位置。在下载结束之后,使用bootloader提供的运行命令,从指定地址开始运行嵌入式系统软件。2023/9/2华中科技大学计算机学院78
联机调试。嵌入式系统的调试有多种方法,有软件调试和硬件调试两种方法,前者使用软件调试器调试嵌入式系统软件,后者使用仿真调试器协助调试过程。就操作系统调试的层次而言,有时需要调试嵌入式操作系统的内核,有时需要调试嵌入式操作系统的应用程序。由于嵌入式系统特殊的开发环境,不可避免的是调试时必然需要目标运行平台和调试器两方面的支持。2)在主机系统上验证软件在主机系统上验证软件是必要的一个步骤,因此建议嵌入式开发人员进行该项工作。不过在主机上验证完成后,仍然需要在目标板上进行验证和测试。目前有的嵌入式系统的开发工具提供商提供了在开发主机上验证目标系统的手段,如ARM公司的软件仿真环境验证软件的执行时间,WindRiver公司的simlink工具可以仿真网络协议的开发,ATI的MNT也可以仿真网络协议的开发,这些公司也有文件系统的仿真开发工具,这些工具都可以作为嵌入式软件的验证平台。一般地,在主机上验证软件只能验证软件的一部分功能和一部分性能。2023/9/2华中科技大学计算机学院793)在目标系统上验证软件如果软件在主机系统上测试通过,就可以移植到目标板,在这里完成对功能和性能要求的完整测试。当然在这个阶段,硬件工程师和软件工程师必须一起工作以确保软件按照最初的要求工作。如果性能目标没有达到,代码优化就成为本阶段的首要任务。但是,随着好的仿真器的使用,软件验证很大程度上可以在主机系统上完成。2023/9/2华中科技大学计算机学院804)代码优化嵌入式系统的软件开发的目标不仅要实现预定的功能,而且要是最优的代码来完成需要的功能。这里的最优,主要是指代码的质量,包括三方面的含义,代码长度最短、执行时间最短和代码运行期间对内存的占用量要最少。有时这些方面是矛盾的,就需要在代码尺寸和执行速度两者之间取得平衡。根据具体应用,需要决定哪一个优先级更高。如果嵌入式系统有存储器限制,而速度不是主要关心的问题,那么代码尺寸很重要。如果要满足实时条件,那么执行速度就比代码尺寸更加重要。使用如下的检验标准进行代码优化。2023/9/2华中科技大学计算机学院81
删除程序中的无用代码,即清除那些从不执行的 代码。
删除调试代码。
避免使用大型的库例程。
避免使用递归式例程,因为它们需要很大的堆栈。
避免浮点操作。
优化算法。通过使用非常简单的诀窍来减少计算 要求,如乘法可以通过左移操作来完成。3、开发阶段的文档样例从软件的完整性来说,软件包括程序和文档两方面的内容,只有代码的软件不是完整的软件;而只有文档的软件不是软件。在嵌入式系统产品开发过程中,开发阶段完成系统产品的实现,这一阶段涉及了一些文档,这些文档对完成产品设计、维护等非常重要。2023/9/2华中科技大学计算机学院82这里给出推荐的文档种类和文档内容,如表2-2所列,可供读者参考。表2-2开发阶段的文档清单文件名称内容1、技术文件目录1、任务来源、设计依据、产品用途以及使用范围2、主要工作原理、软硬件分工、基本参数、主要功能、技术指标2、技术任务书3、总体布局、主要部件概述、提出国内外同类产品水平比较4、标准化综合要求、关键技术预测、开发周期估算3、技术方案报告4、产品标准(草案)1、产品范围、引用标准、基本参数及形式、技术要求、试验方法2、检验规则5、技术条件(进厂)使用范围、技术要求、试验方法6、可靠性技术设计描述系统采用的可靠性技术和措施的报告2023/9/2华中科技大学计算机学院837、技术设计说明书硬件1、总体方案、产品结构、产品性能2、电路工作原理分析、技巧、结构3、工艺合理性、主要故障鉴别方法软件1、总体方案及体系结构、任务调试原理或总控流程说明2、各种功能的实现方法、处理流程,数据库说明、逻辑结构3、数据格式说明、内存分配方案、各部分接口设计4、通用子程序和标准子程序设计8、试验报告9、总结1、技术水平、研制过程中出现的问题的解决措施2、对未达到的技术任务书要求的原因进行说明表2-2开发阶段的文档清单(续)2023/9/2华中科技大学计算机学院84host-target测试或cross-testing
开发环境被认为是主机平台,软件运行环境为目标平台。主机系统环境中进行的测试称为host-target测试或cross-testing.2.4.4系统测试2023/9/2华中科技大学计算机学院85单元测试;集成测试;系统测试;确认测试。这些方法在嵌入式系统的各个测试阶段有着通用性。嵌入式软件测试方法2023/9/2华中科技大学计算机学院86所有单元级测试都可以在主机环境上进行,除非少数情况,特别具体指定了单元测试直接在目标环境进行。最大化在主机环境进行软件测试的比例,通过尽可能小的目标单元访问所有目标指定的界面。在主机平台上运行测试速度比在目标平台上快的多,当在主机平台完成测试,可以在目标环境上重复作一简单的确认测试,以确认测试结果在主机和目标机上的不同之处。在目标环境上进行确认测试将确定一些未知的、未预料到的和未说明的主机与目标机的不同。例如,目标编译器可能有bug,但在主机编译器上没有。单元测试2023/9/2华中科技大学计算机学院87软件集成也可在主机环境上完成,在主机平台上模拟目标环境运行,当然在目标环境上重复测试也是必须的,在此级别上的确认测试将确定一些环境上的问题,比如内存定位和分配上的一些错误。在主机环境上的集成测试的使用,依赖于目标系统的具体功能有多少。有些嵌入式系统与目标环境耦合的非常紧密,若在主机环境做集成是不切实际的。一个大型软件的开发可以分几个级别的集成。低级别的软件集成在主机平台上完成有很大优势,越往后的集成越依赖于目标环境。
集成测试2023/9/2华中科技大学计算机学院88所有的系统测试和确认测试必须在目标环境下执行。当然在主机上开发和执行系统测试,然后移植到目标环境重复执行是很方便的。对目标系统的依赖性会妨碍将主机环境上的系统测试移植到目标系统上,况且只有少数开发者会卷入系统测试,所以有时放弃在主机环境上执行系统测试可能更方便。确认测试最终的实施舞台必须在目标环境中,系统的确认必须在真实系统之下测试,而不能在主机环境下模拟。这关系到嵌入式软件的最终使用。系统测试和确认测试2023/9/2华中科技大学计算机学院89Cross-test策略A)使用测试工具的插装功能(主机环境)执行静态测试分析,并且为动态覆盖测试准备好一插装好的软件代码。B)使用源码在主机环境执行功能测试,修正软件的错误和测试脚本中的错误。C)使用插装后的软件代码执行覆盖率测试,添加测试用例或修正软件的错误,保证达到所要求的覆盖率目标。D)在目标环境下重复(B),确认软件在目标环境中执行测试的正确性。E)若测试需要达到极端的完整性,最好在目标系统上重复(C),确定软件的覆盖率没有改变。通常在主机环境执行多数的测试,只是在最终确定测试结果和最后的系统测试才移植到目标环境。2023/9/2华中科技大学计算机学院90功能测试功能测试称为黑盒测试,这是因为其测试实例在设计时不引用程序的实际代码,也就是不用暴露盒子的内部。嵌入式系统包含输入、输出以及在两者之间实现的一些算法。在系统中哪些输入是可接受的?这些输入应当怎样联系到输出?黑盒测试是基于对以上问题的回答。黑盒测试根本不知道输入与输出之间的算法到底是如何实现的,只关心对于给定的输入,程序的输出与预计是否相同,2023/9/2华中科技大学计算机学院91黑盒测试内容1)极限情况测试:测试中有意使输入信道、内存缓 冲区、磁盘控制器、内存管理器等部件超载。(2)边界测试:输入表示特定输入范围边界的值(例 如,对于整数型输入,应选择最大值、最小值, 还有一1、0、+1)以及使输出产生输出范围边 界的值。(3)异常测试:测试应当触发失败模式或异常模式。(4)错误猜测:测试基于以前进行软件测试及测试类 似程序的工作经验。(5)随机测试:通常是测试中效率最低的形式,但现 在仍广泛使用在评估用户界面代码健壮性的测试 中。(6)性能测试:由于性能要求是产品需求的一部分,所以性能测试处于功能测试的范围之内。由于黑盒测试仅仅依赖于程序需求及其功能行为,所以它可以在需求工作完成后马上就进行开发。这就允许黑盒测试实例的开发与系统其余部分的设计同时进行。2023/9/2华中科技大学计算机学院92覆盖测试/白盒测试而覆盖测试是尽可能使每条代码语句、判定点或判定路径都最少被执行一次,这样就能够避免功能测试的弱点。覆盖测试也称作白盒测试或玻璃盒测试,它需要软件实现的全部知识来进行设计,测试时需要看到程序实现、执行的细节。也就是说,要“看到盒子里边”。设计白盒测试要在完成源代码的基础上进行,要用到程序员关于应用编程接口API(ApplicationProgrammingInterface)内部控制结构及异常处理能力的知识。由于白盒测试依赖于具体的实现决策,只有在代码编写完成后才能开始测试设计工作。在嵌入式系统测试方法和策略中,覆盖测试是测试方法中最重要的测试策略,这是由于可以从中看出有多少代码已经检查过。测试结果可以很准确地预言测试人员马上要面对多少程序设计的错误。2023/9/2华中科技大学计算机学院93白盒测试包括内容1)语句测试:选择的测试实例至少执行一次程序中 的每条语句。(2)判定或分支覆盖:选择的测试实例使每个分支 (包括真与假分支)至少运行一次。(3)条件覆盖:选择的测试实例使每个用于判定的条 件(项)具有所有可能的逻辑值。理论上,白盒测试能利用或操作它所需的一切进行测试。2023/9/2华中科技大学计算机学院94灰盒测试灰盒测试指的是那些仅仅知道部分程序内部细节的测试方法。由于白盒测试需要紧密联系到代码的内部细节,所以造成系
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论