2018年下半年嵌入式系统设计师考试下午真题(专业解析+参考答案)
第 1 题
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
智能家居系统以消费者的使用习惯为依据,利用信息系统和自动化控制系统实现人与家用设备之间的信息交换,也就是说,智能家居是对家庭环境中的各个子系统(家电、水电、窗帘、视频监控、服务机器人等)进行互通控制的一套体系。图1-1为某单位设计的以ZigBee、WiFi及GSM为基础构建的集智能控制、安全监控为一体的智能家居系统示意图,依次是:家庭内部以ZigBee为基础的无线系统、用来进行视频传输的WiFi 网络和用来外部交互的外部交互网络。
安全视频监控系统利用WiFi网络同家庭PC主机连接,用户可以通过外网或者内部WiFi连接,实吋监控家庭状态,或者当家庭内部出现紧急事件后,可以通过GSM网络向家庭用户发送短信或彩信。
王工计划为某小区设计一套智能家居系统,利用ZigBee技术的低功耗、自组织、可扩展等特点,组建家庭内部无线传感器网络,网络节点包括室内温湿度采集节点、火灾环境监测节点、模拟空调控制节点、模拟雨水窗户监控节点。王工在开发智能家居系统时采用V开发模型,V开发模型强调软件开发的协作和速度,将软件实现和验证有机结合起来,在保证较高的软件质量情况下缩短开发周期,图1-2为V模型示意图。该模型中,每个开发活动都有对应的验证活动,在进行客户需求分析时,测试人员可以了解产品设计特性、用户真正的需求,确定测试目标,可以准备用例并策划测试活动;在软件需求分析阶段,测试人员可以了解实现的过程、评审需求,设计测试方案和计划,并准备测试环境,设计系统或配置项测试用例;在软件概要设计阶段,测试人员可以评审概要设计,设计软件集成方案和用例;在详细设计阶段,测试人员可以评审详细设计,设计单元测试用例;在编码阶段,测试人员可以评审代码,并执行单元测试。
【问题1】(4分)
在图1-2所示的V模型中,与开发阶段中概要设计对应的测试阶段称为(1)。在系统或配置项测试阶段应采用(2)方法。
【问题2】(5分)
完成下面对图1-2所示的V模型的论述,将答案填写在答题纸的对应栏中。
1.客户需求分析对应验收测试。在进行需求分析、功能设计的同时,测试人员就可以阅读、审查分析结果,了解产品设计特性、用户真正的需求,从而确定(1)。
2.进行软件需求分析时,测试人员可了解实现的过程、评审需求,可设计(2)、(3)。
3.设计人员做详细设计时,测试人员可参与设计,对设计进行(4),同时(5),并基于用例开发测试脚本。
【问题3】(6分)
ZigBee协调器是整个ZigBee家庭内网的核心,负责管理各个ZigBee节点设备与 PC网关的信息和控制指令的传输。温湿度采集终端将传感器的数据以点播的形式发送给协调器,其他采集/控制节点以广播的形式与ZigBee协调器进行数据的交换,协调器和PC机采用串口通信协议。协调器上电后,首先进行系统初始化,信道扫描、创建信道并组建网络。如果组建网络成功,则进行各层事件扫描;如果失败,则继续创建,如果检测到应用层有事件,则对事件进行处理;否则反复扫描各层事件。当应用层有事件,则检查数据类型,如果是室内环境数据,则经过串口发送到网关;如果不是室内环境数据,则进一步判断是否为控制指令,如果是,则向控制节点发送控制指令。ZigBee协调器软件流程图如图1-3所示。补充图1-3中的(1)〜(4),并将答案填写在答题纸的对应栏中。
图1-3 ZigBee协调器软件流程图
答案与解析
- 试题难度:一般
- 知识点:嵌入式系统开发与维护知识>其它
- 试题答案:
【问题1】4分
(1)集成测试(2)灰盒测试
【问题2】5分
(1)测试目标(2)测试方案和计划(3)系统或配置项测试用例(4)评审(5)设计单元测试用例
【问题3】6分
(1)系统初始化(2)组建网络是否成功(3)对事件进行处理,检查数据类型
(4)向控制节点发送控制指令 - 试题解析:
本题考查软件工程的基础知识,以及软件设计的基础知识。
从上图所示的V模型中还可以看出,左边是设计和分析,是软件设计实现的过程,同时伴随着质量保证活动——审核的过程,也就是静态的测试过程;右边是对左边结果的验证,是动态测试的过程,即对设计和分析的结果进行测试,以确认是否满足用户的需求。
需求分析和功能设计对应验收测试,说明在做需求分析、产品功能设计的同时,测试人员就可以阅读、审查需求分析的结果,从而了解产品的设计特性、用户的真正需求,确定测试目标,可以准备用例(UseCase)并策划测试活动。
当系统设计人员在做系统设计时,测试人员可以了解系统是如何实现的,基于什么样的平台,这样可以设计系统的测试方案和测试计划,并事先准备系统的测试环境,包括硬件和第三方软件的采购。因为这些准备工作,实际上是要花去很多时间。
当设计人员在做在做详细设计时,测试人员可以参与设计,对设计进行评审,找出设计的缺陷,同时设计功能、新特性等各方面的测试用例,完善测试计划,并基于这些测试用例以开发测试脚本。
在编程的同时,进行单元测试,是一种很有效的办法,可以尽快找出程序中的错误,充分的单元测试可以大幅度提高程序质量、减少成本。
从中可以看出,V模型使我们能清楚地看到质量保证活动和项目同时展开,项目一启动,软件测试的工作也就启动了,避免了瀑布模型所带来的误区——软件测试是在代码完成之后进行。
第 2 题
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
在智能家居系统设计中,李工被分配进行ZigBee协调器、信息采集器节点、终端控制节点和安全视频监控系统的部分硬件电路原理设计。
李工在基于微处理器的ZigBee协调器设计中,使用四个LED灯(D1、D2、D3、D4)表示状态,四个LED灯分别接到处理器的P2_0,P2_l,P2_2和P2_3管脚,部分相关的硬件设计如图2-1所示。
【问题1】(4分)
在图2-1的ZigBee协调器设计中,按照需求李工定义了四个LED灯的状态含义, 分别是:D1亮表示协调器已启动,灭表示协调器未启动;D2亮表示有外围信息采集器节点已加入到ZigBee网络,灭表示目前无节点加入网络;D3亮表示有终端控制节点已加入到ZigBee网络,灭表示目前无节点加入网络;D4亮表示协调器正在通过串口和PC主机进行数据通信,灭时表示目前没有数据通信。
如果当前ZigBee协调器处于启动状态、且只有
外围信息采集器连入ZigBee网络,没有任何终端控制节点连接,协调器正在通过串口向PC主机发送
的采集信息, 在这种情况下,P2_0,P2_1,P2_2和P2_3应该分别输出什么电平(回答高电平或低电平)?
【问题2】(5分)
1. 在图2-2的
信息采集器设计中,两个IN4007(U3和U4)的作用是什么?
2. 为了使得红外发光二极管发射,图2-3中的Pl_4应该输出高电平还是低电平?
3. 在图2-4中,连接主处理器DM6446和TVP5146之间SN74AVC芯片的作用是什么?
【问题3】(6分)
在使用
接口对TVP5146进行配置时,DM6446为主,TVP5146为从。在每次写寄存器配置操作中,需要主先发送设备从地址、再发送待操作的寄存器地址、最后发送待写入的数据,并且每次主向从发送消息,都需要接收到从的应答后,才能进入下一步操作。
在调试过程中,李工希望通过
来配置TVP5146的视频标准模式,对应的寄存器地址和各个Bit位的含义如表2-1所示。
A. 通过 发送寄存器地址00h
B. 通过 发送寄存器地址02h
C. 通过 发送数据O1h
D. 通过 发送数据03h
E. 通过 发送设备从地址64h
F. 通过 发送设备从地址60h
G. 等待TVP5146应答
H. 向TVP5146发送回应
I. 是否有中断发生
图2-5 TVP5146寄存器配置流程图
答案与解析
- 试题难度:一般
- 知识点:嵌入式硬件设计>其它
- 试题答案:
【问题1】4分
P2_0为低电平,P2_1低电平,P2_2高电平,P2_3低电平
【问题2】
1.两个IN4007(U3和U4)的作用是把5V电压降到3.6V
2.图2-3中的P1_4应该输出高电平
3.采用SN74AVC芯片转换TVP5146输出信号的电压
【问题3】
(1)E(2)G(3)B(4)G(5)C(6)G - 试题解析:
DM6446通过IIC总线访问控制TVP5146的内部寄存器,因此在进入DM6446前需要将电压转换为1.8V,这里采用PCA9306芯片完成IIC电压转换,采用SN74AVC芯片转换TVP5146输出信号的电压,进入到DM6446后,通过VPFE模块送入DSP子系统进行压缩编码。此外,采用电感和电容组成的低通滤波器,来消除信号输入时的噪声干扰。
I2C总线的数据传输过程
①开始:主设备产生启动信号,表明数据传输开始。
②地址:主设备发送地址信息,包含7位的从设备地址和1位的数据方向指示位(读或写位,表示数据流的方向)。
③数据:根据指示位,数据在主设备和从设备之间进行传输。数据一般以8位传输,MSB先传;具体能传输多少量的数据并没有限制。接收器产生1位的ACK(应答信号)表明收到了每个字节。传输过程可以被中止和重新开始。
④停止:主设备产生停止信号,结束数据传输。
第 3 题
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
在智能家居系统软件设计中,家庭内网节点软件设计包括协调器、现场采集/执行器(室内温湿度采集节点、模拟台灯控制节点、模拟雨水窗户监控节点、模拟空调控制节点和火灾检测节点)的软件设计。软件功能组成如图3-1所示。
(1)创建信道,组建网络;如果失败,则继续创建;
(2)组建网络成功,则进行各层事件扫描;
(3)如果检测到应用层有事件,则转第(4)步,否则反复扫描各层事件;
(4)判断数据类型,如果是室内环境数据,则经串口发送到网关;如果是控制指令,则向控制节点发送控制指令;如果前面两者均不是,则不处理;
(5)继续扫描各层事件。
【问题1】(3分)
在本软件开发过程中,开发人员使用了基于模型的嵌入式代码生成技术,目前对模型验证最主要的方法是(1),通过此方法验证后,利用此验证结果可对模型的覆盖率进行分析,模型的覆盖率类型一般包括(2)(至少写出两种类型)。
【问题2】(6分)
为了测试此软件功能,测试人员设计了表3-1所示的测试用例,请填写该表中的空(1)〜(3)。
覆盖率是度量测试完整性的一个手段,也是度量测试有效性的一个手段。在嵌入式软件白盒测试过程中,通常以语句覆盖率、条件覆盖率和MC/DC覆盖率作为度量指标。
在实现第4条功能时,设计人员采用了下列算法:
if ((数据有效==TRUE) && (数据类型==室内环境数据))
{数据经串口发送到网关;}
if ((数据有效==TRUE) && (数据类型==控制指令))
{向控制节点发送控制指令;}
请指出对上述算法达到100%语句覆盖、100%条件覆盖和100%MC/DC覆盖所需的最少测试用例数目,填写在表3-2的空(1)〜(3)中。
【问题1】
(1)白盒测试(2)语句覆盖、判定覆盖、条件覆盖、条件判定覆盖、修正的条件判定覆盖、条件组合覆盖、路径覆盖。(能写出两个就行)
【问题2】
(1)进行各层事件扫描(2)室内环境数据(3)模拟台灯
【问题3】
(1)2(2)2(3)4
MC/DC是Modified Condition/Decision Coverage(MC/DC)的缩写,含义是修正条件判定覆盖。
MC/DC:条件表示不含有布尔操作符号的布尔表达式;判定表示由条件和零或者很多布尔操作符号所组成的一个布尔表达式;而修正条件判定覆盖方法要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变。
比如:IF( A||B||C )
|| 为或,即ABC只要一个为真,就能判定为真。因为判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变。
例如:ABC为TFF
改变BC的值并不影响判定结果,但改变A的值会影响判定结果。
同理 FTF,FFT FFF都符合要求。
第 4 题
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
随着汽车工业的飞速发展,越来越多的车上的原有机械控制装置正在被电子控制装置所取代,这是典型的实时控制系统,例如用于控制发动机、自动变速箱、防抱死系统、电子稳定控制系统、牵引力控制系统、刹车辅助系统的ECU和用于座位调整、车窗玻璃升降、车顶移动的电子产品,这在很大程度上提高和完善了汽车的性能和技术水平。但是,汽车上电控系统的多样化和系统结构的复杂化,也直接导致相应的汽车电子软件开发难度越来越高。
某汽车的ECU (Electronic Control Unit,电子控制单元)系统,采用某高性能的多核处理器,软件架构采用符合AUTOSAR ( AUTOmotive Open System Architecture,汽车开放系统架构)标准的多核操作系统,将多个控制应用集成在一个处理器上运行,降低了系统设计的成本、体积、功耗。
【问题1】(5分)
AUTOSAR中定义了应用任务有四种不同的状态,其状态之间的切换如图4-1所示。
A. 触发
B. 启动
C. 挂起
D. 被抢占
E. 创建
F. 激活
G. 删除
H. 时间片用完
【问题2】(4分)
(1)该系统中任务的优先级是静态分配的,在某些特定的情况下,多任务抢占资源会发生死锁,解决的策略一般是采用优先级天花板方式。请简述优先级天花板的原理。
(2)该系统采用了多核处理器,多核处理器一般有SMP和AMP两种不同的工作方式。请简述SMP和AMP的差异。
【问题3】(6分)
该ECU系统在上电、复位或唤醒后,首先进入Boot模式,进行开或者关,对FLASH 和RAM进行初始化,然后进入用户程序,用户程序是从cstart函数开始执行的,在多核 嵌入式系统中通常是先进行主核的cstart,主核自身进行部分初始化后将从核从HALT状态激活,然后主核和从核在完成各自必要的设置后分别进入各自的main函数。图4-2是该系统多核处理器的启动流程,请补充空(1)〜(3)的内容,将解答填写在答题纸的对应栏中。
答案与解析
- 试题难度:一般
- 知识点:操作系统概述>其它
- 试题答案:
【问题1】
(1)C(2)A(3)F(4)B(5)D
【问题2】
(1)优先级天花板是指将申请(占有)某资源的任务的优先级提升到可能访问该资源的所有任务中最高优先级任务的优先级(这个优先级称为该资源的优先级天花板) 。
(2)主要差异有:
SMP(对称多处理技术):将2颗完全一样的处理器封装在一个芯片内,达到双倍或接近双倍的处理性能。节省运算资源。如Power 4
AMP(非对称多处理技术):2个处理内核彼此不同,各自处理和执行特定的功能,在软件的协调下分担不同的计算任务。如OMAP5910
【问题3 】
(1)进入用户程序(2)将从核从HALT状态激活(3)从核初始化时钟、接口及其他资源。 - 试题解析:
(1)优先级继承
当一个任务阻塞了若干个任务时,若阻塞任务有高优先级任务,则将所有阻塞任务中的最高优先级作为其优先级。
(2)优先级天花板
给每个信号量设置一个优先级天花板,优先级天花板的值大于所有使用该信号的任务的优先级,当某个任务得到该信号量时,将其优先级置为优先级天花板的值。
优先级继承和优先级天花板,目的都是使得到信号量的任务的优先级,不低于其他在等待该信号量的任务的优先级,由此,当该任务释放资源后,任务结束前,也不会被其他较高优先级任务抢占,也就保障了如果有高优先级任务在等待该资源,那么该任务结束后高优先级任务立即就可使用该资源。
(3)优先级反转
假设有任务A,B,C,优先级:A > B > C,任务A,B,C都在等待各自的事件触发,并且A C运行中需要同一个临界资源。
首先,C的事件到来了,C开始运行,C得到了临界资源的信号量,此时,A等待的事件到来。
由于A的优先级更高,于是抢占了CPU的使用权,但是由于得不到临界资源的信号量,进入挂起状态,等待资源释放后唤醒。接着C继续得到CPU使用权。
在C释放信号量之前,B等待的事件到来了,B的优先级高于C,抢占CPU使用权,待B任务完成后,释放CPU,C继续运行,直到C释放信号量以后,A才得以被唤醒继续运行。
在这个过程中,A任务的优先级实际降到了和C相同的层次,究其原因,便是C得到了信号量后被不需要该信号量但是优先级更高的任务B抢占,故而使用优先级继承和优先级天花板,就是为了保障高优先级任务真正做到”高优先级“。
通常采用两种方式实现两个或多个内核协调工作。一种是采用对称多处理计数(SMP)symmetric multi-processing,就像IBM Power 4处理器一样,将两颗完全一样的处理器封装在一个芯片内,达到双倍或接近双倍的处理性能,由于共享了缓存和系统总线,因此这种做法的优点是能节省运算资源。另一种计数采用一种非对称多处理(AMP)(asymmetric multi-processing)的工作方式:即两个处理内核彼此不同,各自处理和执行特定的功能,在软件的协调下分担不同的计算任务,比如一个执行加密,而另一个执行TCP/IP协议处理。这种处理器的内部结构更像人的大脑,某部分区域在执行某种任务时具有更高的优先级和更强的能力。如 TI公司的OMAP5910双核处理器。
第 5 题
阅读下列说明和C语言代码,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
在某工厂的物流车间,设计一款智能监测系统,实现对车间进行24小时不间断图像采集的功能。王工设计了一个实时监测采集系统,主要由图像采集卡和数据存储卡组成。由于实时图像的数据量巨大,设计采用DMA方式进行数据传输,当DMA传输完成后,DMA控制器会发起一个硬件中断。操作系统接收到硬件中断,调用中断服务程序。
该系统的软件基于某嵌入式操作系统开发,支持中断管理、多任务调度等功能。与DMA相关的一段驱动程序示例代码如下。
【C语言程序声明与定义】
【程序1】
【程序2】
【程序3】
【问题1】(5分)
在操作系统的头文件中,有如下类型定义:
typedef void (*VOIDFUNCPTR)(); /* ptr to function returning void */ typedef int (*FUNCPTR) (); /* ptr to function returning int */
1.该类型定义了一组什么类型的变量,简述其功能。
2.在【程序1】的dma_init函数中,应该将intConnect函数的第二个参数转换成相应的类型,可以消除编译警告,请补充其中空(1)的内容。
【问题2】(4分)
DMA控制器的寄存器操作序列,必须为原子操作,该程序中使用了两个信号量,一个用于进行寄存器操作系统的临界区保护,一个用于在传输函数和DMA完成中断处理程序之间同步。请根据信号量创建时的不同初始值,在【程序2】的dma_trans函数和【程序3】dma_intHandle函数中,补充空(2)、(3)、(4)、(5)处的内容。
【问题3】(6分)
在该系统中有A、B两个应用任务同时从不同角度采集图像,都需要调用该DMA传输函数,任务A和任务B的优先级相同。该系统采用优先级抢占的调度策略。在任务A调用DMA传输函数进行DMA传输时,有时会出现函数返回值为0的情况。根据 DMA控制器的芯片手册定义,1表示正常完成,2表示传输超时,4表示奇偶校验错,所以返回值不应该为0。
王工经过认真排查后,分析该故障发生的原因是当任务A调用dma_trans函数时,会发生任务suspend的情况,此时如果任务B也调用dma_trans函数,则会发生上述故障。
1.请给出dma_trans函数中会导致任务发生阻塞的代码行号。
2.按照王工的分析,对全局变量的不正确操作会导致该函数的返回值错误,请给出发生错误的代码行号。
3.王工对该程序进行了改进,将上述会导致返回值错误的代码放在某一行程序之后执行,即可解决该问题,请给出代码行号。
注意:这里的行号是指【程序2】中注释所标的第1行到第5行,请在第1行到第5行之中选择。
答案与解析
- 试题难度:一般
- 知识点:嵌入式软件程序设计>嵌入式程序设计>面向过程的语言
- 试题答案:
【问题1】
1.该类型定义了一组函数指针类型的变量。使用typedef给函数指针类型一个别名。
(1)VOIDFUNCPTR
【问题2】
(2)sem_DMA1 (3)sem_DMA2 (4)sem_DMA1(5)sem_DMA2
【问题3】
1.第3行
2.第1行
3.第2行 - 试题解析:
1.简单的函数指针的应用
形式1:返回类型(*函数名)(参数表)
char (*pFun)(int);
char csFun(int a){ return;}
void main()
{
pFun = csFun;
(*pFun)(2);
}
第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。
第二行定义了一个函数csFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数——函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址
然后就是main()函数了,它的第一句您应该看得懂了——它将函数glFun的地址赋值给变量pFun。main()函数的第二句中“*pFun”显然是取pFun所指向地址的内容,当然也就是取出了函数glFun()的内容,然后给定参数为2。2.使用typedef更直观更方便
形式1:typedef 返回类型(*新类型)(参数表)
typedef char (*FUNCPTR)(int);
FUNCPTR pFun;
char csFun(int a){ return;}
void main()
{
pFun = csFun;
(*pFun)(2);
}
typedef的功能是定义新的类型。第一句就是定义了一种FUNCPTR的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用FUNCPTR了。
第二行的代码便使用这个新类型定义了变量pFun,此时就可以像使用形式1一样使用这个变量了。