问答题 (一共5题,共5分)

1.

阅读以下关于数据采集与处理系统的说明,回答下列问题。

[说明] 某公司承接了一个数据采集与处理系统的项目,由刘工负责系统的方案设计,刘工的设计方案如图1所示。该方案是基于PCI总线的多功能处理系统,PCI设备1是以太网,PCI设备2用于数据采集,PCI设备3、PCI设备4用于和该系统中的其他处理模块进行互联,LEGACY设备1、LEGACY设备2用于处理系统中一些慢速设备。

中级嵌入式系统设计师,章节练习,案例分析

1、在以下描述PCI总线的基本概念中,正确的表述有______、______、______、______、______、______。 A.PCI总线是一个与处理器有关的高速外围总线 B.PCI总线的基本传输机制是猝发式传送 C.PCI设备一定是主设备 D.PCI的物理地址与其他总线一样,是由内存地址空间和I/O地址组成 E.PCI设备的地址译码不能对配置空间直接寻址 F.PCI设备识别主要是对开发商代码和设备代码进行识别 G.访问配置空间时,PCI桥应提供IDSEL信号以选择PCI设备 H.系统中只允许有一条PCI总线 I.PCI总线是高速串行总线 J.PCI总线有3种桥,即HOST/PCI桥,PCI/PCI桥,PCI/LEGACY桥 K.PCI桥是可以把一条总线的地址空间映射到另一条总线的地址空间

2、PCI设备2和主CPU之间采用双口RAM方式交换数据,双口RAM是常见的共享式多端口存储器,其最大的特点是存储数据共享。它允许两个独立的CPU或控制器同时异步访问存储单元。既然数据共享,就必须存在访问仲裁控制,否则就会出现错误或冲突。内部仲裁逻辑控制提供以下功能:对同一地址单元访问的时序控制;存储单元数据块的访问权限分配;信令交换逻辑(例如中断信号)等。 两个端口对同一内存操作有4种情况: A.两个端口同时对同一地址单元读出数据; B.两个端口同时对同一地址单元写入数据; C.两个端口不同时对同一地址单元存取数据; D.两个端口同时对同一地址单元,一个写入数据,另一个读出数据。 在上述情况下,两个端口的存取不会出现错误的是______和______,会出现写入错误的是______,会出现读出错误的是______。

3、PCI设备2和主CPU之间通过双端口存储器进行数据交换。刘工设计了环形队列的实现方式。设备2向环形队列写入数据,主CPU从环形队列读取数据。环形队列是一个首尾相连的FIFO数据结构,采用数组存储,到达尾部时将转回到0位置,该转回是通过取模操作来实现的。因此环形队列逻辑上是将数组元素q[0]与q[MAX-1]连接,形成一个存放队列的环形空间。

为了方便读写,还要用数组下标来指明队列的读写位置,其中head指向可以读的位置,tail指向可以写的位置,环形队列如图2所示。

中级嵌入式系统设计师,章节练习,案例分析

使用环形队列时需要判断队列为空还是为满。当tail追上head时,队列为满,当head追上tail时,队列为空。

通常判断环形队列为空/为满有两种判断方法。

(1)附加一个标志位tag,当head赶上tail,队列空,则令tag=0,当tail赶上head,队列满,则令tag=1;

(2)限制tail赶上head,即队尾结点与队首结点之间至少留有一个元素的空间。队列空:head==tai;队列满:(tail+1)%MAXN==head。 如果采用第一种方法(即附加标志实现算法),则环形队列的结构定义如下: typedef struct ringg { int head; /*头部,出队列方向*/ int tail; /*尾部,入队列方向*/ int tag; int size; /*队列总尺寸*/ int space[RINGQ_MAX]; /*队列空间*/ }RINGQ; RINGQ p, *q; q=&p; 初始化环形队列的C语言代码为: q->head=q->tail=q->tag=0; q->size=RINGQ_MAX; 判断队列为空的C语言代码为______。 判断队列为满的C语言代码为______。 入队操作时,如果队列不满,则入队后更新尾指针的C语言代码为q->tail=______。出队操作时,如果队列不空,则出队后更新头指针的C语言代码为q->head=______。如果采用第二种方法,还采用上述数据结构,初始化环形队列的C语言代码为: q->head=q->tail=0; q->size=RINGQ_MAX; 判断队列为空的C语言代码为______。 判断队列为满的C语言代码为______。 入队操作时,如果队列不满,则入队后更新尾指针的C语言代码为q->tail=______。 出队操作时,如果队列不空,则出队后更新头指针的C语言代码为q->head=______。

2.

阅读以下关于C语言编程方面的说明和程序,回答下列问题。

[说明] 在开发某嵌入式系统时,设计人员根据系统要求,分别编写了如下程序,其中: 程序1是关于文件操作的一段程序。 程序2是某信息管理系统的系统登录和密码验证程序,规定密码最长为20个字符。首先,打开密码文件sys_code,如果成功,则将文件中的密码信息与用户输入的密码进行比较,若相等,则身份验证通过并进入信息管理系统,否则输出错误信息并退出登录系统。如果打开文件sys_code失败,则由用户输入密码并保存到密码文件sys_code。

[程序1] #include image.pngstdio.h> #include image.pngstdlib.h> Void main15 { FILE *fp; char c, fname [20]; printf("输入文件名:"); Scanf("%S", fname); if((fp=fopen(fname, "r"))==______) { printf("不能打开文件:%sin", fname); exit16; } while (______) /*检测文件是否结束*/ { c=fgetc(fp); if (______) /*检测文件是否出错*/ { printf("文件读错误\n"); break; } putchar(c); } }

[程序2] void password15 { int sign=0; sign=checkcode15; if (______) { printf("\a\n\n\n\n\n\n\n\n\n\t\t密码错误, 请重新登录!"); getch 19; system("cls"); exit20; } system("cls"); printf ("\a\n\n\n\n\n\n\n\n\n\t\t"); printf("欢迎登录信息管理系统!\n"); getch 19; return; } int checkcode 15 { FILE *fp; char ch, syspwd[21]="\0"; char usrpwd[21]="\0"; int i; /*身份验证*/ if((fp=fopen("sys_code", "r"))==NULL) { system("cls"); printf("please set your identify\n"); printf("password(image.png=20): "); for(i=0; iimage.png20; i++){ ch=getchar19; if (ch=='\r' || ch=='\n') break; ______ =ch; } fp=fopen("sys_code", "w"); fputs(syspwd,fp); fclose(fp); return 0; else{ system("cls"); fgets(syspwd,21,fp); fclose(fp); printf("please enter your password:"); for(i=0; iimage.png20; i++){ ch=getehar19; if (ch=='\r' ||ch=='\n') break; usrpwd[i]=ch; } if(strcmp(______)!=0) return 1; } return 0; } }

1、变量存储类型是指数据在内存中存储的方法,即确定所定义的变量在内存中的存储位置,也确定了变量的作用域和生存期,内部变量有3种存储类型。假设有一个内部整型变量aa,请按不同存储类型给出相应的变量声明。

2、王工在编写某嵌入式程序时,用到对文件系统的操作,由于要保证系统的安全性,要求必须使用文件检测函数feof()和ferror(),完成[程序1]中的空。

3、王工根据系统的需求编写了[程序2],请填写其中的空。

3.

阅读以下关于某嵌入式系统多路数据采集的说明,回答下列问题。

[说明] 某嵌入式系统中,存在16路数据采集通道,为了提高数据采集的可靠性,对16路采集通道均采用双余度设计,为了监控采集通道是否发生故障,对各路双余度通道采集值进行比较,只有当该通道两个余度设备采集值均不小于45时,才表示该路通道正常。

设计人员设计函数num_of_passer用于统计无故障通道数目,在该函数的设计中考虑了如下因素:

9采用如下数据结构存储通道号及采集值: Struct value {unsigned int No; //通道号,1到16 unsigned short Value1; //余度1采集值 unsigned short Value2; //余度2采集值 }

10当输入参数异常时,函数返回-1;

11若正确统计了无故障通道数目,则返回该数目;

12该函数需要两个输入参数,第一个参数是用于存储通道号及余度采集值的数组,第二个参数为通道总数目。

开发人员根据上述要求使用ANSI C对代码实现如下(代码中第一个数字代表行号): 1)unsigned int num_of_passer(struct value array[], unsigned int num) { 2)unsigned int n=0; //循环变量 3)unsigned int counter; //无故障通道数目 4)if((array=NULL)||(num==0)||(num>16)) 5)return-1; //当输入参数异常时,函数返回-1 6)for(n=0; nimage.png=num; n++) { 7)if((array[n].Value1>45) && ((array[n].Value2>45))) 8)counter=counter+1; } 9)return counter; }

1、嵌入式软件中通常使用圈复杂度来衡量程序的可维护性(一般要求圈复杂度不大于10),请计算函数num_of_passer的圈复杂度。

2、作为测试人员,请参照表1序号1的方式使用代码审查的方法找出该程序中所包含的至少3处错误。

中级嵌入式系统设计师,章节练习,案例分析

3、覆盖率是度量测试完整性的一个手段,也是度量测试有效性的一个手段。在嵌入式软件白盒测试过程中,通常以语句覆盖率、分支覆盖率和MC/DC覆盖率作为度量指标,请指出对函数num_of_passer达到100%语句覆盖、100%分支(DC.覆盖和100%MC/DC覆盖所需的最少测试用例数目,如表2所示。

中级嵌入式系统设计师,章节练习,案例分析

4.

某公司承接了某嵌入式系统的研制任务。该嵌入式系统由数据处理模块、系统管理模块、FC网络交换模块和智能电源模块组成,系统组成如图1所示。数据处理模块处理系统的应用任务;系统管理模块除了处理系统的应用任务外,还负责管理整个嵌入式系统;FC网络交换模块采用消息机制,支持广播和组播,主要负责系统的数据交换;智能电源模块负责给其他模块供电,该模块根据系统命令可以给其他模块供电或停止供电。

中级嵌入式系统设计师,历年真题,2015年嵌入式系统设计师下午真题卷

1、该系统的软件大部分是用C语言编程的,编程人员经常会使用运算符,请按优先级由高到低的次序,重新排序下面的运算符:%, =, <=, &&。

2、该系统的开发要求按软件能力成熟度模型CMM 3级开发,请回答下列问题:

(1)CMM 3级包含多少个关键过程域?

(2)请写出CMM 3级的关键过程域。

(3)CMM2级包含多少个关键过程域?

(4)在对该开发软件单位进行CMM 3级达标评级时,只需检查3级的关键过程域还是3级和2级的关键过程域都需要检查?

3、(1)在本系统中,FC网络采用何种拓扑结构?请从如下4项中选择最为合适的。 A.总线 B.树型 C.星形 D.点对点

(2)FC网络除了用于交换的光纤基础架构,还必须有高性能的I/O通道结构支持,I/O通道在FC网络中的优势是什么?

4、智能电源模块首先进行系统初始化,初始化后各设备就可使用,再根据系统初始配置表对嵌入式系统的其他模块供电。

智能电源模块通常完成两件事情:

一、周期性地查询本模块温度、各路电流(给各模块供电的)以及电源模块的供电是否异常,如果异常,则进行异常处理,并报系统管理模块,由系统管理模块进行决策;

二、进入中断处理程序,处理系统管理模块的各种命令,如果系统管理模块命令关机下电,则智能电源模块对所有模块(也包括自己)进行下电处理

中级嵌入式系统设计师,历年真题,2015年嵌入式系统设计师下午真题卷

图2是智能电源模块上的管理软件处理流程图,请完成该流程图,给(1)~(5)处填空。

5.

阅读以下关于某四轴飞行器系统设计的说明,回答下列问题。

[说明] 在某四轴飞行器系统设计中,利用惯性测量单元(IMU)、PID电机控制、2.4G无线遥控通信和高速空心直流电机驱动等技术来实现一个简易的嵌入式四轴飞行器方案。整个系统的设计包括飞控板和遥控板两部分,两者之间采用2.4G无线模块进行数据传输。

飞控板采用高速单片机STM32作为处理器,采用含有三轴陀螺仪、三轴加速度计的运动传感器MPU16050作为惯性测量单元,通过2.4G无线模块和遥控板进行通信,最终根据PID控制算法以PWM方式驱动空心电机来控制目标。

中级嵌入式系统设计师,历年真题,2015年嵌入式系统设计师下午真题卷

图1为李工设计的系统总体框图。

飞控板和遥控板的核心处理器都采用STM32 F103。飞控系统的惯性测量单元采用MPU6050测量传感器,MPU6050使用IIC接口,时钟引脚SCL、数据引脚SDA和数据中断引脚分别接到STM32的对应管脚,图2为该部分原理图。

遥控板采用STM32单片机进行设计,使用AD对摇杆模拟数据进行采集,采用NRF2401无线模块进行通信,图3为该部分原理图。

李工所设计的系统软件同样包含飞控板和遥控板两部分,飞控板软件的设计主要包括无线数据的接收、自身姿态的实时计算、电机PID增量的计算和PWM的电机驱动。

遥控板主控制器软件通过ADC外设对摇杆数据进行采集,把采集到的数据通过2.4G无线通信模块发送至飞控板。图4为飞控系统的软件流程示意图。

中级嵌入式系统设计师,历年真题,2015年嵌入式系统设计师下午真题卷

中级嵌入式系统设计师,历年真题,2015年嵌入式系统设计师下午真题卷

中级嵌入式系统设计师,历年真题,2015年嵌入式系统设计师下午真题卷

1、由图1系统总体框图设计可知,飞控板和遥控板之间是用2.4G无线通信进行数据传输,各自主处理器和无线通信模块之间是SPI接口。同时,在飞控板上,处理器和惯性测量单元是通过IIC进行数据交互。以下关于SPI接口和IIC接口的描述中,正确的是:______ 、______、______、______。 A.SPI和IIC都是主从式通信方式 B.SPI的数据收发线是各自独立的,IIC也是同样 C.SPI和IIC的传输都不需要片选控制 D.IIC总线是一个多主机的总线,可以连接多于一个能控制总线的器件到总线 E.IIC总线包括标准模式,快速模式和高速模式,相互之间的传输速度差异并不大 F.在原理设计中,到底采用SPI和IIC哪种方式,需要依据外设芯片的接口而定 G.SPI是一种环形总线结构 H.在IIC总线上,可以有多个从设备具有相同的IIC地址

2、(1)图2飞控板部分原理图中,R4的作用是什么?

(2)图3遥控板部分原理图中,C11、C12、C13、C14的作用是什么?

3、在STM32处理器的PWM使用过程中,最为关键的就是PWM的频率和占空比。PWM的频率依赖于PWM模块的参考时钟频率,自动装载寄存器ARR的值加1之后再乘以参考时钟频率即可得到PWM的频率。

PWM的占空比是用捕获比较寄存器CCR和自动装载寄存器ARR获得的,PWM占空比=CCR/(ARR+1)。 假设当前主控板的STM32处理器PWM模块的参考时钟频率为1kHz,要将PWM模块的频率设置为100kHz,则ARR寄存器的值应设置为多少?如果此时占空比希望设置为20%,那么CCR寄存器的值应该设置为多少?

4、5毫秒进行一次定时器的触发,每次中断都会检查一次无线模块数据的接收,以确保飞控系统控制信息的实时性。每2次中断(即1毫秒)读取一次。MPU16050单元的数据,并进行算法处理。每4次中断(即2毫秒)通过计算当前飞控板系统的姿态,结合遥控端的目标姿态,根据两者的差值通过PID控制算法对各个电机进行调速控制。每200次中断(即100毫秒)采集一次电池电压,然后通过无线模块把电池电压发送给遥控板,以告知操作人员当前电压的大小。 图4为飞控系统软件实现的简要流程图,根据以上描述,请补全图4中的空(1)~(6)处的内容。