免费智能真题库 > 历年试卷 > 系统分析师 > 2022年上半年 系统分析师 上午试卷 综合知识
  第16题      
  知识点:   嵌入式系统开发   嵌入式软件
  章/节:   操作系统       

 
嵌入式软件开发方法与传统软件开发方法存在较大差异,()的说法对嵌入式软件开发而言是错误的。
 
 
  A.  嵌入式软件开发的结果通常需要固化在目标系统的储存器或处理器内部储存器资源中
 
  B.  嵌入式软件的开发一般需要专门的开发工具、目标系统和测试设备
 
  C.  嵌入式软件对安全性和可靠性的要求较高
 
  D.  嵌入式软件开发不用考虑代码的规模
 
 
 

 
  第15题    2022年上半年  
   29%
嵌入式系统已被广泛应用到各行各业。嵌入式系统是一个内置于设备中,对设备的各种传感器进行管理与控制的系统。通常,根据系统对..
  第14题    2022年上半年  
   29%
嵌入式系统已被广泛应用到各行各业。嵌入式系统是一个内置于设备中,对设备的各种传感器进行管理与控制的系统。通常,根据系统对..
  第52题    2019年上半年  
   77%
“从减少成本和缩短研发周期考虑,要求嵌入式操作系统能运行在不同的微处理器平台上,能针对硬件变化进行结构与功能上的配置。”..
   知识点讲解    
   · 嵌入式系统开发    · 嵌入式软件
 
       嵌入式系统开发
        嵌入式系统的软件开发方法不同于通用的开发方法,而是采用交叉式开发方法。本节主要介绍嵌入式系统软件开发的交叉编译环境的基本概念和特点,以及软件调试常用的几种方法。
                      开发环境与过程
                      嵌入式系统的软件开发采用交叉平台开发方法(Cross Platform Development, CPD),即软件在一个通用的平台上开发,而在另一个嵌入式目标平台上运行。这个用于开发嵌入式软件的通用平台称为宿主机系统,被开发的嵌入式系统称为目标机系统。而当软件执行环境和开发环境一致时的开发过程则称为本地开发。
                             开发环境
                             下图是一个典型的CPD环境,通常包含三个高度集成的部分:
                             (1)运行在宿主机和目标机上的强有力的交叉开发工具和实用程序。
                             (2)运行在目标机上的高性能、可裁剪的RTOS。
                             (3)连接宿主机和目标机的多种通信方式。例如,以太网、串口线、ICE(In-Circuit Emulator,在线仿真器)、ROM仿真器等。
                             宿主机提供的基本开发工具有交叉编译器、交叉链接器和源代码调试器等,作为目标机的嵌入式系统则可能提供一个动态装载器、链接装载器、监视器和一个调试代理等。在目标机和宿主机之间有一组连接,通过这组连接程序代码,映像从宿主机下载到目标机,这组连接同时也用来传输宿主机和目标机调试代理之间的信息。
                             
                             典型交叉平台开发环境
                             目前,嵌入式系统中常用的目标文件格式是COFF(Common Object File Format)和ELF(Executable Linking Format)。另外,一些系统还需要有一些专门工具将上述格式转换成二进制代码格式才可使用。典型地,一个目标文件包含:
                             (1)关于目标文件的通用信息,如文件尺寸、启动地址、代码段和数据段等具体信息。
                             (2)机器体系结构特定的二进制指令和数据。
                             (3)符号表和重定位表。
                             (4)调试信息。
                             开发过程
                             嵌入式系统软件的开发过程可以分为项目计划、可行性分析、需求分析、概要设计、详细设计、程序建立、下载、调试、固化、测试及运行等几个阶段。
                             项目计划、可行性分析、需求分析、概要设计及详细设计等几个阶段,与通用软件的开发过程基本一致,都可按照软件工程的方法来进行,如采用原型化方法、结构化方法等。
                             由于嵌入式软件的运行和开发环境不同,开发工作是交叉进行的,所以每一步都要考虑到这一点。
                             程序建立阶段的工作是根据详细设计阶段中产生的文档来进行的,主要是源代码编写、编译链接等子过程,这些工作都在宿主机上进行,不需要用到目标机。产生应用程序的可执行文件后,就要用到交叉开发环境中进行调试,根据实际情况可以选用4.6.2节中的调试方法之一或其有效组合来进行。由于嵌入式系统对安全性和可靠性的要求比通用计算机系统要高,所以,在对嵌入式系统进行白盒测试时,要求有更高的代码覆盖率。
                             最后,要将经调试后正确无误的可执行程序固化到目标机上。根据嵌入式系统硬件配置的不同,可以固化在EPROM和Flash等存储器中,也可固化在DOC(DiskOnChip)等电子盘中,通常还要借助一些专用编程器进行。
                      调试方法
                      通用系统与嵌入式系统的软件调试过程存在着明显的差异。对于通用系统,调试工具与被调试的程序位于同一台计算机上,调试工具通过操作系统的调试接口来控制被调试的程序。但是在嵌入式系统中,由于资源的限制,不能在其上直接开发应用程序,调试过程通常也以交叉方式进行的。在实际开发实践中,经常采用的调试方法有直接测试法、调试监控法、在线仿真法、片上调试法及模拟器法等。
                             直接调试法
                             直接调试法是将目标代码下载到目标机上,让其执行,通过观察指示灯来判断程序的运行状态。在嵌入式系统发展的早期,一般采用这种方式进行,其基本步骤是:
                             (1)在宿主机上编写程序。
                             (2)在宿主机上编译、链接生成目标机可执行程序代码。
                             (3)将可执行代码写入到目标机的存储器中。
                             (4)在目标机运行程序代码。
                             (5)判断程序的运行情况,如有错误则纠正错误,重复以上步骤,直到正确为止。
                             (6)将可执行代码固化到目标机上,开发完成。
                             这种方法是最原始的调试方法,程序运行时产生的问题,只有通过检查源代码来解决,因而开发效率很低。
                             调试监控法
                             调试监控法也叫插桩法。目标机和宿主机一般通过串口、并口或以太网相连接,采用这种方法还需要在宿主机的调试器内和目标机的操作系统上分别启动一个功能模块,然后通过这两个功能模块的相互通信来实现对应用程序的调试。在目标机上添加的模块叫做桩(调试服务器、调试监控器),主要有两个作用:监视和控制被调试的程序;与宿主机上的调试程序通信,接受控制指令,返回结果等。
                             在进行调试的时候,宿主机上的调试器通过连接线路向调试监控器发送各种请求,实现目标机内存读/写和寄存器访问、程序下载、单步跟踪和设置断点等操作。来自宿主机的请求和目标机的响应都按照预定的通信协议进行交互。
                             使用插桩法作为调试手段时,开发应用程序的基本步骤如下:
                             (1)在宿主机上编写程序的源代码。
                             (2)在宿主机编译、链接生成目标机可执行程序。
                             (3)将目标机可执行代码下载到目标机的存储器中。
                             (4)使用调试器进行调试。
                             (5)在调试器的帮助下定位错误。
                             (6)在宿主机上修改源代码,纠正错误,重复上述步骤直到正确为止。
                             (7)将可执行代码固化到目标机上。
                             相对于直接调试法,插桩法明显地提高了开发效率,降低了调试的难度,缩短了产品的开发周期,有效降低了开发成本。但是插桩法仍有明显的缺点,主要体现在以下几个方面:
                             (1)调试监控器本身的开发是个技术难题。
                             (2)调试监控器在目标机要占用一定的系统资源,如CPU时间、存储空间以及串口或网络接口等外设资源。
                             (3)调试时,不能响应外部中断,对有时间特性的程序不适合。
                             (4)在调试过程中,被调试的程序实际上在调试监控器所提供的环境中运行,这个环境可能会与实际目标程序最终的运行环境有一定的差异,这种差异有可能导致调试通过的程序最后仍不能运行。
                             为了克服插桩法的缺点,出现了一种改良的方法,即ROM仿真器法。
                             ROM仿真器可以认为是一种用于替代目标机上ROM芯片的硬件设备,ROM仿真器一端跟宿主机相连,一端通过ROM芯片的引脚插座和目标机相连。对于嵌入式处理器来说,ROM仿真器像是一个只读存储器,而对于宿主机来说,像一个调试监控器。ROM仿真器的地址可以实时映射到目标机的ROM地址空间里,所以它可以仿真目标机的ROM。ROM仿真器在目标机和宿主机之间建立了一条高速信息通道,其典型的应用就是跟插桩法相结合,形成一种功能更强的调试方法。该方法具有如下优点:
                             (1)不必再开发调试监控器。
                             (2)由于是通过ROM仿真器上的串行口、并行口或网络接口与宿主机连接,所以不必占用目标机上的系统资源。
                             (3)ROM仿真器代替了目标机上原来的ROM,所以不必占用目标机上的存储空间来保存调试监控器。
                             (4)另外,即使目标机本身没有ROM,调试依然可以进行,并且不需要使用专门工具向ROM写入程序和数据。
                             在线仿真法
                             ICE是一种用于替代目标机上CPU的设备。对目标机来说,ICE就相当于它的CPU,在线仿真器本身就是一个嵌入式系统,有自己的CPU、内存和软件。ICE的CPU可以执行目标机的所有指令,但比一般的CPU有更多的引脚,能够将内部信号输出到被控制的目标机上,ICE的存储器也被映射到用户的程序空间,因此,即使没有目标机,仅用ICE也可以进行程序的调试。
                             ICE和宿主机一般通过串口、并口或以太网相连接。在连接ICE和目标系统时,用ICE的CPU引出端口替代目标机的CPU。在用ICE调试程序时,在宿主机运行一个调试器界面程序,该程序根据用户的操作指令控制目标机上的程序运行。
                             ICE能实时地检查运行程序的处理器的状态,设置硬件断点和进行实时跟踪,所以提供了更强的调试功能。ICE支持多种事件的触发断点,这些事件包括内存读写、I/O读写及中断等。ICE的一个重要特性就是实时跟踪,ICE上有大容量的存储器用来保存每个指令周期的信息,这个功能使用户可以知道事件发生的精确时序,特别适于调试实时应用、设备驱动程序和对硬件进行功能测试。但是,ICE的价格一般都比较昂贵。
                             片上调试法
                             片上调试(In Circuit Debugger, ICD)是CPU芯片内部的一种用于支持调试的功能模块。按照实现的技术,ICD可以分为仿调试监控器、后台调试模式(Background Debugging Mode, BDM)、连接测试存取组(Joint Test Access Group, JTAG)和片上仿真(On Chip Emulation, OnCE)等几类。
                             目前使用较多的是采用BDM技术的CPU芯片。这种芯片的外面有跟调试相关的引脚,这些引脚在调试的时候被引出,形成一个与外部相连的调试接口。这种CPU具有调试模式和执行模式两种不同的运行模式。当满足了特定的触发条件时,CPU进入调试模式,在调试模式下,CPU不再从内存中读取指令,而是通过其调试端口读取指令,通过调试端口还可以控制CPU进入和退出调试模式。这样在宿主机上的调试器就可以通过调试端口直接向目标机发送要执行的指令,使调试器可以读/写目标机的内存和寄存器,控制目标程序的运行以及完成各种复杂的调试功能。
                             该方法的主要优点是:不占用目标机的通信端口等资源,调试环境和最终的程序运行环境基本一致,无须在目标机上增加任何功能模块即可进行;支持软、硬断点,支持跟踪功能,可以精确计量程序的执行时间;支持时序逻辑分析等功能。
                             该方法的主要缺点是:实时性不如ICE法强,使用范围受限,如果目标机不支持片上调试功能,则该方法不适用;实现技术多样,标准不完全统一,工具软件的开发和使用均不方便。
                             模拟器法
                             模拟器是运行于宿主机上的一个纯软件工具,它通过模拟目标机的指令系统或目标机操作系统的系统调用来达到在宿主机上运行和调试嵌入式应用程序的目的。
                             模拟器适合于调试非实时的应用程序,这类程序一般不与外部设备交互,实时性不强,程序的执行过程是时间封闭的,开发者可以直接在宿主机上验证程序的逻辑正确性。当确认无误后,将程序写入目标机上就可正确运行。
                             模拟器有两种主要类型:一类是指令级模拟器,在宿主机模拟目标机的指令系统。另一类是系统调用级模拟器,在宿主机上模拟目标操作系统的系统调用。指令级的模拟器相当于宿主机上的一台虚拟目标机,该目标机的处理器种类可以与宿主机不同。比较高级的指令级模拟器还可以模拟目标机的外部设备,如键盘、串口、网络接口等。系统调用级的模拟器相当于在宿主机上安装了目标机的操作系统,使得基于目标机的操作系统的应用程序可以在宿主机上运行。被模拟的目标机操作系统的类型可以跟宿主机的不同。两种类型的模拟器相比较,指令级模拟器所提供的运行环境与实际目标机更为接近。
                             使用模拟器的最大好处是在实际的目标机不存在的条件下就可以为其开发应用程序,并且在调试时利用宿主机的资源提供更详细的错误诊断信息,但模拟器有许多不足之处:
                             (1)模拟器环境和实际运行环境差别很大,无法保证在模拟条件下通过的应用程序也能在真实环境中正确运行。
                             (2)模拟器不能模拟所有的外部设备,但嵌入式系统通常包含诸多外设,但模拟器只能模拟少数部分。
                             (3)模拟器的实时性差,对于实时类应用程序的调试结果可能不可靠。
                             (4)运行模拟器需要宿主机配置较高。
                             尽管模拟器有很多的不足之处,但在项目开发的早期阶段,其价值是不可估量的,尤其对那些实时性不强的应用,模拟器调试不需要特殊的硬件资源,是一种非常经济的方法。
                             从软件工程的角度来看,调试与测试是不同的。而本节中的“调试”相当于测试和调试的统一体,而且更加侧重于测试。有关软件测试和软件调试的更加详细的知识,请阅读9.8节。
 
       嵌入式软件
        软件实际上是客观世界问题空间与解空间的具体实现,也是人类知识的提炼、抽象和固化。软件是计算机相关的:
        (1)完成预定功能和性能的可执行的指令(计算机程序)序列。
        (2)程序操作的信息或数据结构。
        (3)描述程序操作、数据和使用的文档。
        嵌入式软件是为完成某特定用途而开发的、驻留在预先定义的嵌入式计算机平台上的软件。随着微电子技术飞速发展带来的智能化需求的不断扩展,嵌入式软件无处不在,规模也越来越大。
        近三十年来,随着现代化战争信息化程度的不断提高,随着装备由机械化向信息化的战略转型,军用软件已经渗透到军事应用的各个方面,成为装备及其体系中不可或缺的组成部分,其发展和应用水平代表着一个国家的装备实力。美国国防部在2002年的《国防科学技术领域计划》中就把军用软件设计和改进作为重要研究领域,制定了军用软件发展的近、中、远期目标。2011年,美国政府、国防部、海陆空三军、洛克希德·马丁公司等26个组织组成工作组,专题研究军事装备中软件研制和部署存在的问题,形成《美国国防部与国防工业领域软件工程的重大问题报告》,对军用软件的发展提出建议。这些都说明了军用软件在现代化战争中的重要地位和作用。
        随着飞机机载计算机的广泛使用,机载软件从无到有、规模从小到大、复杂度从低到高。软件负责数据的采集、存储和处理。实时进行各种逻辑判断、数学运算、行为推导、状态转换等处理,帮助飞行员优化各种操作,实现飞行航路计算、姿态控制、环境控制、燃油输送、任务计算、状态监控、信息显示报警、人机界面控制等功能,不夸张地说,飞行员每一个操作、飞机的每一个动作的完成都离不开软件运行。而软件的复杂性、重要性还体现在:
        (1)从计算机理论和技术发展趋势来说,硬件和软件没有明确界限,原来使用硬件实现的功能在尽可能地向软件迁移,技术进步越来越显现在软件方面。
        (2)软件直接和飞机安全功能相关,而且这种相关性越来越高,如电传飞控软件。
        (3)软件的特殊性导致了需要有特殊的规则保证系统的安全性、可靠性。
        与硬件不同,软件至今尚未摆脱手工方式。更严重的是,软件在开发过程中涉及到了各行各业的工作人员,其中包括业务定义人员、系统分析员、系统设计人员、软件架构师、软件工程师、软件测试工程师以及质量工程师等。实际上这些人员中只有软件工程师是专业软件开发人员,其他人员都需要同时具备软件和其他行业的背景。因此与其他行业比较,软件行业具有以下鲜明的特点:
        (1)抽象性:软件直接反映了人的思维逻辑实体,同时几乎没有具体物理实体,且没有明显的制造过程。
        (2)客观问题越来越复杂,软件也随之越来越复杂,而且软件技术的进步速度落后于需求增长的速度。
        (3)相对于通用硬件,软件开发成本昂贵,随着问题规模的加大、成本急剧增加。
        (4)软件运行和使用没有磨损或老化现象。
        (5)软件对硬件和环境有着不同程度的依赖性。
        (6)大多数软件是新开发的,通过已有构件组装技术尚不成熟。
        (7)软件工作结果涉及到许多社会因素。
        以上特点使得软件开发进展情况较难衡量,软件质量不易评价,从而使软件产品的生产管理、过程控制及质量保证都相当困难。
        对于嵌入式软件而言,它除了具有通用软件的一般特性,同时还具有一些与嵌入式系统密切相关的特点。这些特点包括:
        (1)软件受资源的限制。由于嵌入式系统的资源一般比较有限,所以嵌入式软件必须尽可能地精简,才能适应这种状况。
        (2)开发难度大。嵌入式软件的运行环境和开发环境一般比较复杂,从而加大了它的开发难度。首先,由于硬件资源有限,使得嵌入式软件在时间和空间上都受到严格的限制,但要想开发出运行速度快、存储空间少、维护成本低的软件,需要开发人员对编程语言、编译器和操作系统有深刻的了解。其次,嵌入式软件一般都要涉及到底层软件的开发,应用软件的开发也是直接基于操作系统的,这就需要开发人员具有扎实的软、硬件基础,能灵活运用不同的开发手段和工具,具有较丰富的开发经验。最后,对于嵌入式软件来说,它的开发环境与运行环境是不同的。嵌入式软件是在目标系统上运行,但开发工作要在另外的开发系统中进行,当编程人员将应用软件调试无误后,再把它放到目标系统上去。
        (3)实时性和可靠性要求高。实时性是嵌入式系统的一个重要特征,许多嵌入式系统要求具有实时处理的能力,这种实时性主要是靠软件层来体现的。软件对外部事件做出反应的时间必须要快,在某些情况下还要求是确定的、可重复实现的,不管系统当时的内部状态如何,都是可以预测的。同时,对于事件的处理一定要在限定的时间期限之前完成,否则就有可能引起系统的崩溃。例如,火箭飞行控制系统就是实时的,它对飞行数据采集和燃料喷射时机的把握要求非常的准确,否则就难以达到精确控制的目的,从而导致飞行控制的失败。
        与实时性相对应的是可靠性,因为实时系统往往应用在一些比较重要的领域,如航天控制、核电站、工业机器人等等,如果软件出了问题,那么后果是非常严重的,所以要求这种嵌入式软件的可靠性必须非常高。
        (4)要求固化存储。为了提高系统的启动速度、执行速度和可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是像通常的计算机系统那样,存储在磁盘等载体中。
   题号导航      2022年上半年 系统分析师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第16题    在手机中做本题