2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析



1
 
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某舰载综合处理系统由若干数据处理模块、10处理模块、信号处理模块、图形处理模块、大容量处理模块和电源模块组成,各处理模块通过CAN总线连接,如图1-1所示。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第1张

为了提高综合处理系统的处理速度,主要处理模块都设计为多个处理器。其中,数据处理模块有4片PowerPC8640处理器,通过RapidlO内部网络连接,如图1-2所示。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第2张
串行RapidlO协议即SR1O通信协议,构建了3层的协议体系。如图1-3所示,分别是物理层、传输层、逻辑层。物理层定义了硬件接口的电器特性,并包括链路控制、初级流量控制和低级错误管理等功能;传输层负责进行寻址和路由信息管理;逻辑层定义了服务类型和包交换的格式。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第3张
逻辑层定义了数据包的格式,同时支持两种操作方式,分别是直接IO/DMA方式和消息传递方式。
直接I0/DMA是一种常用的数据传输方式,发送端需要知道被访问设备的存储空间地址映射,被访问端的操作基本由硬件实现。直接I0/DMA下,发起一次传输操作,需要有效数据、目标器件ID、数据长度、数据在被访问设备存储空间的地址以及包优先级等;同时,所有构成的包的长度为32bit的整数倍;若包长度不能满足要求,则添加附加位进行弥补。
消息传递方式不要求发送节点知道目的节点的地址空间映射,当数据到达目的节点时,会根据邮箱号确定消息存储位置。在消息传递模式下进行数据传输时,除了有效载荷外还需要提供目的节点的ID、数据长度、包优先级和邮箱号等。

 
问题:1.1   可执行程序有严格的格式,一般分为text段、data段和bss段,请解释各段存放的内容,并将答案填写在答题纸的(1)〜(3)中。
陈工程师写了一段图形图像相关的程序,在程序中他定义了一个大数组,如下所示:
char arrMap[1024*1024];
void main(void)
{…}
请问此数组位于内存哪个位置(即在那个段中)?请将答案写到答题纸(4)处。
 
问题:1.2   RapidlO逻辑层中直接IO/DMA和消息传递这两种传输方式的主要差异如表1-1所示。请完成表中的内容,将表1-1中的(1)~(5)答案填写在答题纸的对应栏中。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第4张
 
问题:1.3   在IO处理模块等多个模块上,都采用中断方式处理输入输出。在中断处过程包括关中断、保存断点、识别中断源等一系列步骤,如图1-4所示,请完成其中的填空,将答案填写在答题纸的对应栏中。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第5张
 
 

2
 
某智能农业基地需要实时监控各个蔬菜大棚的温湿度,李工开发了一款温湿度监测仪,硬件系统设计部分如图2-1所示。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第6张
李工采用STM32作为主控处理器,利用TS-FTM01传感器进行温度和湿度采集,采用GSM/GPRS/GPS三合一模块来实现温湿度采集数据的上报。TF-FTM01传感器和主处理器之间采用RS485总线进行通信。在系统设计中,使用STM32处理器实现对多个TF-FTM01传感器的数据读取。GSM/GPRS/GPS三合一模块可以实现自我定位,并把采集到的温湿度数据进行上报,该模块和STM32处理器之间采用RS232进行数据通信。
TS-FTM01传感器使用RS485通信机制,每个传感器的RS485通信地址可以通过如图2-2所示的拨码开关进行配置。拨码开关一共有6位,实现对TS-FTM01传感器地址的编码。
STM32处理器具有通用同步异步收发器(USART),USART利用分数波特率发生器提供宽范围的波特率选择。STM32处理器的波特比率寄存器USART桞RR的定义如图2-3和表2-1所示。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第7张
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第8张
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第9张
 
问题:2.1   RS232和RS485都属于串行通信总线,以下关于串行通信、RS232、RS485的叙述中,正确的是(1)、(2)、(3)、(4)。请将答案填写在答题纸的对应栏中。
A.RS232支持全双工通信,只允许一对一通信
B.RS232采用差分传输方式进行数据信号的传输
C.RS232传输距离远,传输距离最远可达上千米
D.RS485—般采用两线制进行半双工通信,允许一对多通信
E.RS485采用差分传输方式,抗干扰能力强,传输距离远
F.在进行嵌入式开发时,常采用RS485作为调试串口使用
G.RS232典型的连接器包括DB9和DB25,仅使用三线也可进行基本逍信
 
问题:2.2   STM32处理器具有通用同步异步收发器(USART),USART利用分数波特率发生器提供宽范围的波特率选择。波特率的计算公式为:
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第10张
其中,fck为给外设的时钟,USARTDIV是一个无符号数,其值设置在USART_BRR寄存器中。假设给外设提供的时钟频率fck=72MHz,GSM/GPRS/GPS三合一模块所需的波特率为115200,则USARTDIV的值应为(1),USART_BRR寄存器的十木进制值应为⑵。请完成其中的填空,将答案填写在答题纸的对应栏中。
 
问题:2.3   RS485总线使用特制的RS485芯片,最大支持节点数可达128个以上。该系统的RS485总线上最多可以支持(1)个TS-FTM01传感器?请完成其中的填空,将答案填写在答题纸的对应栏中。
 
问题:2.4   基于图2-1所示的硬件设计,需要实现某地点的温湿度数据的定时上报功能。该功能要求以T为周期读取RS485总线上16个TS-FTM01传感器(地址编码为0〜15)的温湿度数据,通过GPS获取当前的位置信息,然后通过GSM网络把温湿度数据和定位信息发送到固定的手机号码上。需要特别指出的是,在图2-1所示的硬件设计中未使用专用的RS485芯片,STM32端的RS485总线是通过GPIO45和GPIO46两根G310口线模拟出的,即通过两根GPIO口线的高低电平变化来模拟RS485数据传输协议”
基于上述硬件和软件设计,请从以下选项中选择正确的操作,把图2-4所示的软件流程补充完整,将流程图2-4中的(1)〜(3)的答案填写在答题纸的对应栏口。
A.设置GPIO45为输入模式,设置GPIO46为输出模式
B.设置GPIO45和GPIO46为输入模式
C.设置GPIO45为输出模式,设置GPIO46为输入模式
D.设置GPIO45和GPIO46为输出模式
E.addr>16
F.addr>=16
本方案利用低速串行总线遍历读取16个传感器的温湿度数据及GPS的定位信息,并通过GSM实现数据上报。该执行过程需要消耗一定的时间,导致现有的算法流程并不能精确实现以T为周期进行温湿度数据的采集和上报。为了修正该问题,需要把图2-4所示流程中的步骤(4)调整到步骤(5)后执行。请完成其中的填空,将答案填写在答题纸的对应栏中。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第11张
 
 

3
 
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某飞行器供油阀控制软件通过控制左右两边的油箱BL、BR向左右发动机EL、ER供油,既要保证飞行器的正常飞行,又要保证飞行器的平衡,该软件主要完成的功能如下:
(1)无故障情况下,控制左油箱Bl向左发动机BL供油,右油箱EL向右发动机BR供油,不上报故障;
(2)当左油箱BL故障时,控制右油箱BR分别向左、右发动机EL和ER供汩,并上报二级故障——左油箱故障;
(3)当右油箱BR故障时,控制左油箱BL分别向左、右发动机EL和ER供汩,并上报二级故障——右油箱故障;
(4)当左发动机EL故障时,根据左右油箱的剩油量决定(如果左右油箱剩油量之差大于等于50升,则使用剩油量多的油箱供油,否则同侧优先供油)左油箱BL还是右油箱BR向右发动机Er供油,并上报一级故障——左发动机故障;
(5)当右发动机ER故障时,根据左右油箱的剩油量决定(如果左右油箱剩油量之差大于等于50升,则使用剩油量多的油箱供油,否则同侧优先供油)左油箱BL.还是右油箱BR向左发动机El供油,并上报一级故障——右发动机故障;
(6)当一个油箱和一个发动机同时故障时,则无故障的油箱为无故障发动机供油,并上报一级故障——故障油箱和发动机所处位置;
(7)当两个油箱或两个发动机同时故障或存在更多故障时,则应进行双发断油控制,并上报特级故障——两侧油箱或两侧发动机故障;
(8)故障级别从低到高依次为二级故障、一级故障和特级故障,如果低级故障和高级故障同时发生,则只上报最高级别故障。
 
问题:3.1   在嵌入式软件测试中,一般采用的测试方法有白盒测试、黑盒测试和灰盒测试方法,白盒测试方法中需要基于(1)进行测试;根据本题给定的条件,最恰当的测试方法应选择(2)。
 
问题:3.2   覆盖率是度量测试完整性的一个手段,也是度量测试有效性的一个手段。在嵌入式软件白盒测试过程中,通常以语句覆盖率、分支覆盖率和MC/DC覆盖率作为度量指标。
在实现第6条功能时,设计人员对部分功能采用了下列算法:
if((BL==故障)&&(EL==故障))
{BR供油ER;BL断油;EL断油;}
请指出对上述算法达到100%语句覆盖、100%分支(DC)覆盖和100%MC/DC覆盖所需的最少测试用例数目。请完成表3-1中的(1)〜(3)填空,并将答案填写在答题纸的对应栏中。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第12张
 
问题:3.3   为了测试此软件功能,测试人员设计了表3-2所示的测试用例,请填写该表中的空(1)〜(9),并将答案填写在答题纸的对应栏中。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第13张
 
 

4
 
阅读下列说明,回答问题1至问题3,将答案填入答题纸的对应栏内。
【说明】
某直升机的显示控制计算机是其座舱显控系统的核心部件,将来自飞行员的参数和控制命令与载机的飞行参数信息进行融合处理后,在显示器上显示。该显示控制计算机由一个显示控制单元和一个输入输出单元组成,它们之间通过双口RAM进行数据交换,如图4-1所示。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第14张
显示控制单元采用Freescale公司的PowerPC8270高性能、低功耗32位处理器,并设计有系统FLASH存储器、用户FLASH存储器、SDRAM存储器。CPU内部宾成存储器控制器,提供地址译码、数据处理周期访问时序、SDRAM时钟等功能。
输入输出单元采用Ti公司的DSP F2812高性能、低功耗16位处理器,采用AF.INC429总线用于接收导航计算机、大气数据计算机等外部设备的数据。ARINC429解算程序严格遵循ARINC429规范,其通用字格式如表4-1所示,字长32Bit,不用的数据位填“0”。当接收到ARINC429数据后,首先判断状态位,只有在状态和标号正确的情况下,才进一步根据分辨率等进行解算数据的含义。
2017年下半年嵌入式系统设计师下午试卷案例考试真题答案解析第15张
 
问题:4.1   系统FLASH存储器的存储容量是8MB,用于存储CPU模块引导程序、BIT测试程序,FLASH在板编程程序,网口操作系统,用户程序。系统FLASH地址分配在存储空间的高端,地址空间为(1)~OxFFFFFFFF。
用户FLASH存储器的存储容量是为(2),用于记录数据的存储。FLASH地址分配在存储空间的高端,地址空间为0x78000000〜0x7BFFFFFF。
SDRAM的存储容量是256MB,用于运行操作系统和应用软件,地址空间位于存储器的低端0x00000000~3)。
请完成(1)~(3)填空,并将答案填写在答题纸的对应栏中。
 
问题:4.2   根据ARINC429数据的标号(D8-D1)可知该数据为高度表数据。根据系统定义,高度表数据的分辨率为0.1米,即D9为1表示0.1米,D10为1表示0.2米,D11为1表示0.4米,依此类推。
若接收数据帧中D28-D9位是0000.0000.0111.1101.0000,则当前的高度是(1)米。若当前的高度是100米,则数据帧中D28-D9位应为(2)。
请完成(1)和(2)填空,并将答案填写在答题纸的对应栏中。
 
问题:4.3   显示控制单元和输入输出单元通过双口交换信息,两个处理器上的软件采用相同定义的结构体来定义双口单元,方便交换信息。以下是双口结构体定义:
typedef struct
{
char ctrlWord; /*通道工作方式控制字*/
char head; /*F1FO 控制头指针*/
char tail; /*FIFO 控制尾指针*/
short fifo[32] ; /*FIFO 缓冲区*/
}SPM_CHAN_RX429; /*ARINC429 接收通道定义*/
为了避免由于不同的编译环境对上述数据结构产生不同的编译结果,建议对上述数据结构通过设置紧缩属性(packed属性),强迫编译器采用字节对齐方式,在该模式下,SPM_CHAN_RX429结构体占用(1)字节的存储空间。
ARINC429接收通道设计为由一个首尾相连的FIFO数组形成的环形队列。输入输出单元根据头指针向环形队列写入数据,头指针始终指向下一个要写入的位置,并且限制写入数据最多为31个,即队尾与队首之间至少保留一个元素的空间。
显示控制单元根据尾指针从环形队列读取数据,尾指针始终指向下一个要读取的位置。初始化环形队列的C语言为:
typedef struct
{
char ctrlWord; /*通道工作方式控制字*/
char head; /*F1FO 控制头指针*/
char tail; /*FIFO 控制尾指针*/
short fifo[32] ; /*FIFO 缓冲区*/
}SPM_CHAN_RX429; /*ARINC429 接收通道定义*/
SPM_CHAN_RX429 *pBuf;
pBuf= (SPM_CHAN_RX429 *) ADDR_3RAM_PPC; /*双口地址的宏定义*/ pBuf->ctrlWord=0;
pBuf->head=O; pBuf->tail=O;
判断队列为空的C语言为(2)。
判断队列为满的C语言为(3)。;
请完成(1)~(3)填空,并将答案填写在答题纸的对应栏中。
 
 

5
 
下面是关于C语言的基本概念和编程方面的叙述,回答问题1至问题3,埒答案填入答题纸的对应栏内。

【说明】
企业根据利润提成发放奖金。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成15%;利润在20万到40万之间时,高于20万元的部分,可提成20%;40万到60万之间时高于40万元的部分,可提成25%;60万到100万之间时,高于60万元的部分,可提成30%;高于100万元时,高于100万元的部分可提成35%o已知企业本年度12个月的月利润存储在数组profit中,程序要求根据月利润计算月奖金并存储到数组bonus中,然后计算并返回该企业的年度总利润total_profito该程序的实现如下:
【程序】
int calculate_bonus(const int profit[ ], int bonus[ ])
{
int n=12;
int i=0;
int sum_profit=0;
int bonus1,bonus2,bonus4,bonus6,bonuslO;
bonus1=100000*0.1;
bonus2=bonus1+100000*0.15;
bonus4=bonus2+200000*0.2;
bonus6=bonus4+200000*0.25; bonusl0=bonus6+400000*0.3;
for (i=0;i<n; i++)
{
if (profit[i]<=100000)
(1);
else if(profit[i]<=200000)
(2);
else if(profit[i]<=400000)
(3);
else if(profit[i]<=600000)
(4);
else if(profit[i]<=1000000)
(5) ;
else
(6) ;
}
/*以下代码计算年度总利润*/
i=0;
while(i<n)
sum_profit += profit[++i];
return sum_profit;
}

 
问题:5.1   在程序中,使用关键字const修饰输入参数profit,请将这样修饰的作用写到答题纸(1)处。
如果程序中bonus数组也使用const修饰,是否正确,并给出解释,请将答案写到答题纸(2)处。
 
问题:5.2   分析程序中的计算年度总利润的代码,指出错误的一行代码,将错误代码写到答题纸(1)处;然后用一条语句实现正确代码,将正确代码写到答题纸(2)处。
 
问题:5.3   根据题意分析程序,完成程序中的(1)~(6),每个空行只能写一行代码,即用一条语句来描述,将答案写到答题纸相应的位置。
 
 

,