免费智能真题库 > 历年试卷 > 系统架构设计师 > 2012年下半年 系统架构设计师 上午试卷 综合知识
  第10题      
  知识点:   嵌入式系统软件开发环境   嵌入式系统
  关键词:   开发   嵌入式系统   嵌入式        章/节:   嵌入式系统       

 
以下关于嵌入式系统开发的叙述,正确的是(10)。
 
 
  A.  宿主机与目标机之间只需要建立逻辑连接
 
  B.  宿主机与目标机之间只能采用串口通信方式
 
  C.  在宿主机上必须釆用交叉编译器来生成目标机的可执行代码
 
  D.  调试器与被调试程序必、须安装在同一台机器上
 
 
 

 
  第12题    2019年下半年  
   64%
混成系统是嵌入式实时系统的一种重要的子类。以下关于混成系统的说法中,正确的是   (12)   
  第10题    2014年下半年  
   52%
以下嵌入式处理器类型中不具备内存管理单元(MMU)的是(10),嵌入式操作系统(11)可以运行在它上面。
  第1题    2016年下半年  
   39%
在嵌入式系统的存储部件中,存取速度最快的是(1)。
   知识点讲解    
   · 嵌入式系统软件开发环境    · 嵌入式系统
 
       嵌入式系统软件开发环境
        嵌入式系统的软件开发方法不同于通用的开发方法,而是采用交叉式开发方法。本节主要介绍嵌入式系统软件开发的交叉编译环境的基本概念和特点,以及软件调试常用的几种方法。
                      嵌入式系统开发概述
                      嵌入式系统的软件开发采用交叉平台开发方法(Cross Platform Development,CPD),即软件在一个通用的平台上开发,而在另一个嵌入式目标平台上运行。这个用于开发嵌入式软件的通用平台称为宿主机系统,被开发的嵌入式系统称为目标机系统。而当软件执行环境和开发环境一致时的开发过程则称为本地开发。
                      下图是一个典型的CPD环境,通常包含3个高度集成的部分:
                      
                      典型交叉平台开发环境
                      (1)运行在宿主机和目标机上的强有力的交叉开发工具和实用程序。
                      (2)运行在目标机上的高性能、可裁剪的RTOS。
                      (3)连接宿主机和目标机的多种通信方式,例如,以太网、串口线、ICE(In-Circuit Emulator,在线仿真器)、ROM仿真器等。
                      宿主机提供的基本开发工具有交叉编译器、交叉链接器和源代码调试器等,作为目标机的嵌入式系统则可能提供一个动态装载器、链接装载器、监视器和一个调试代理等。在目标机和宿主机之间有一组连接,通过这组连接程序代码映像从宿主机下载到目标机,这组连接同时也用来传输宿主机和目标机调试代理之间的信息。
                      目前,嵌入式系统中常用的目标文件格式是COFF(Common Object File Format,通用对象文件格式)和ELF(Executable Linking Format,可执行链接格式)。另外,一些系统还需要有一些专门工具将上述格式转换成二进制代码格式才可使用。典型地,一个目标文件包含:
                      (1)关于目标文件的通用信息,如文件尺寸、启动地址、代码段和数据段等具体信息。
                      (2)机器架构特定的二进制指令和数据。
                      (3)符号表和重定位表。
                      (4)调试信息。
                      开发过程
                      嵌入式系统软件的开发过程可以分为项目计划、可行性分析、需求分析、概要设计、详细设计、程序建立、下载、调试、固化、测试及运行等几个阶段。
                      项目计划、可行性分析、需求分析、概要设计及详细设计等几个阶段,与通用软件的开发过程基本一致,都可按照软件工程方法进行,如采用原型化方法、结构化方法等。
                      :由于嵌入式软件的运行和开发环境不同,开发工作是交叉进行的,所以每一步都要考虑到这一点。
                      程序建立阶段的工作是根据详细设计阶段产生的文档进行的,主要是源代码编写、编译链接等子过程,这些工作都在宿主机上进行,不需要用到目标机。产生应用程序的可执行文件后,就要用到交叉开发环境进行调试,根据实际情况可以选用3.6.3节中提到的调试方法或其有效组合来进行。由于嵌入式系统对安全性和可靠性的要求比通用计算机系统要高,所以,在对嵌入式系统进行白盒测试时,要求有更高的代码覆盖率。
                      最后,要将经调试后正确无误的可执行程序固化到目标机上。根据嵌入式系统硬件配置的不同,可以固化在EPROM(Erasable Programmable ROM,可擦除可编程ROM)和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,ICE本身就是一个嵌入式系统,有自己的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)运行模拟器需要宿主机配置较高。
                             尽管模拟器有很多的不足之处,但在项目开发的早期阶段,其价值是不可估量的,尤其对那些实时性不强的应用,模拟器调试不需要特殊的硬件资源,是一种非常经济的方法。
                             :从软件工程的角度来看,调试与测试是不同的。而本节中的“调试”相当于测试和调试的统一体,而且更加侧重于测试。有关软件测试和软件调试的更加详细的知识,请阅读8.8节。
 
       嵌入式系统
        嵌入式计算机系统是与特定功能的设备集成在一起、且隐藏在这个功能系统内部为预定任务而设计的计算机系统。该计算机可对设备的状态进行采集,包括操作者的命令和受控对象的状态,按照设备所要求的、预先设定的特定规律进行计算,计算结果作为命令输出到设备的某些部件,控制某些操作,同时将人所关心的信息显示给操作者。一个典型的嵌入式系统如下图所示。
        
        嵌入式系统组成
        上述嵌入式系统的输入、处理、输出的各个部分,一般情况下都是通过软件运行完成的。因此嵌入式软件是嵌入式系统的重要组成部分,而且体现了系统的思想、方法和规律。
        在当今社会中,嵌入式系统已经和我们的生活息息相关,人们每时每刻都离不了嵌入式系统,如下图所示。
        
        嵌入式系统基本分类
        嵌入式系统一般是实时系统,《牛津计算机字典》对实时系统解释是:“系统的输入对应于一个外部物理世界的运动,而系统输出对应着另外一个物理世界的运动,而这两个运动的时间差必须在可接受的足够小的范围内,实时性就体现在从输入到形成输出所需的时间。”实时系统又进一步定义为硬实时系统和软实时系统两种,如下表所示。
        
        实时系统分类及其特性
        一般认为,嵌入式计算机相对于个人计算机或超级计算机,在软件或硬件上的资源是有限的,硬件资源体现在处理速度、功耗、存储空间等方面,软件资源指有限的应用、有限的操作系统支持、应用代码量少等方面。
        第一款大批量生产的嵌入式系统是美国1961年发布的民兵Ⅰ型导弹内嵌的D-17自动制导计算机。
        随着20世纪60年代早期应用开始,嵌入式系统的价格迅速降低,同时处理功能和能力获得快速提高。以第一款单片机Intel 4004为例,在存储器和外围芯片的配套使用下,实现了计算器和其他小型系统。1978年,美国国家工程制造商协会发布了可编程单片机的“标准”,涵盖了几乎所有以计算机为基础的控制器,如单板计算机、数控设备以及基于事件的控制器,使得微处理器得到了快速发展。
        无一例外,不断发展中的嵌入式计算功能的实现都通过用户需求驱动、顶层定义、硬件定义开始,但核心是软件的算法处理,实际上类似硬件功能通过不同软件的控制就可以实现不同用户所需要的嵌入式功能,如下图所示。
        
        嵌入式计算机的层次化架构
        当基础硬件接口、计算和存储资源、总线与网络乃至各种传感器、作动器、液压等以模块化、通用化、组合化等变得越来越成熟,他们就可以方便地组合成硬件平台。而软件却恰恰相反,基本是为满足人类某种新的设想或应用要求开始进行新的设计。这些设计从诸如领域、实现功能、性能、可靠性、安全性等方面,可以是全新理念设备、或是适应性修改升级等途径,都会导致软件有不同程度的差异。
        嵌入式系统具有以下特征:
        (1)嵌入式系统的时间敏感性。嵌入式实时系统对时间响应都是有要求的。例如对于一个设备的运动控制系统,从操作指令发出,嵌入式计算机根据指令和外部条件计算并输出到动作器的动作,要保证在所有的条件下、在确定的时间内产生所需的输出。这对于设计者来说,一般的实时系统都会围绕这个关键需求进行系统设计。另外为了满足时间敏感性要求,确保在最复杂行为和最大延时情况下,系统操作不发生延迟,要求处理器的利用率要有40%左右的余量。有时为满足某些强实时嵌入式系统的应答时间限定在毫秒级或更低,需要在高级语言中嵌入低级语言编程实现。
        (2)嵌入式系统的可靠性和安全性。嵌入式计算机系统的失效带来的可能是个人娱乐系统故障的微小损失,可能是铁路信号失效的巨额经济损失,也可能是战略武器控制等经济损失以及重大的社会政治影响等。所以在某种设计缺陷被诱发后,对于不同的系统需要采取不同的策略,例如对具有重大影响的系统,要求计算机或计算机软件对设计缺陷、制造缺陷等失效采取“永不放弃”的安全性设计技术,将损失控制在可接受的范围内。在有人为输入情况下,嵌入式系统还需考虑最大可能地减少人为失误所引起的系统失效。这些算法或机制可以是输入有效性合理性检查、硬件容错、软件容错、错误后的系统缓慢降级、系统进入安全模式等。
        (3)嵌入式软件的复杂性。软件复杂度取决于问题规模和复杂度。简单问题的软件可由个人完成,甚至可以进行软件正确性证明;即使过程中更换人员,花费少许时间就可掌握和维护。但如汽车控制、飞机控制等大型复杂软件,其需要根据复杂的外部输入、按照多变量物理规律和人们的预期,实现预定的功能。软件需要根据系统的外部事件及其组合,考虑各种处理、逻辑、时序、边界、超出边界的鲁棒性等进行详细算法和策略研究。还需要考虑如安全性、可靠性、维护性等质量要求。更困难的是大规模软件需要团队联合定义、并行开发、持续维护,同时考虑处理平台限制条件。
   题号导航      2012年下半年 系统架构设计师 上午试卷 综合知识   本试卷我的完整做题情况  
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 /
 
第10题    在手机中做本题