当前位置:首页 → 计算机类 → 软件水平考试 → 中级嵌入式系统设计师->案例分析
推荐等级:
发布时间: 2021-12-17 13:55
扫码用手机做题
王工在实验室负责自动电梯模拟控制系统的设计,自动电梯模拟控制系统需要完成电梯运行控制算法、输入界面和输出界面三项主要任务。系统结构图如图1所示。
根据电梯运行的流程,把电梯划分为停止状态、运行状态、开门状态和关门状态4种控制状态。停止状态是指电梯在没有任何请求的情况下静止状态,而不是指电梯在运行过程中开门前的停顿状况,本题忽略停顿状况,把电梯从运行状态直接迁移为开门状态。电梯根据控制状态的迁移规则进行状态迁移,系统初始时,电梯处于停止状态。
问题1:电梯根据控制状态的迁移规则进行迁移,其状态迁移图如图2所示。
请根据下面状态转移的条件,完成状态迁移图。可供选择的状态转移条件:a.其他楼层有呼叫请求;b.无呼叫请求;c.乘客进入电梯或等待一段时间后;d.到达请求楼层;e.电梯所在楼层有呼叫请求。
问题2:电梯运行处理程序的流程图如图3所示。请完成该流程图。
问题3:系统采用多级优先级中断结构,如图4所示。它要求CPU在执行完当前指令时转而对中断请求进行服务。设备A连接于最高优先级,设备B次之,设备C又次之。IRQx为中断请求信号,INTx为CPU发出的中断响应信号。
现假设:TDC为硬件中断周期时间;TM为一个指令执行周期时间;TA、TB、TC分别为A、B、C的中断服务程序执行时间;TS、TR为保护现场和恢复现场所需的时间。图5是中断处理过程示意图。
当三个设备同时发出中断请求时,依次处理设备A、B、C的时间是多少?这种结构下中断饱和时间是多少?
本题解析:
问题1:(1)其他楼层有呼叫请求,或a; (2)到达请求楼层,或d;(3)乘客进入电梯或等待一段时间后,或c; (4)无呼叫请求,或b;(5)电梯所在楼层有呼叫请求,或e;(6)其他楼层有呼叫请求,或a。
问题2:(1)改变状态为开门 (2)当前层上移一层 (3)改变状态为开门 (4)改变状态为向下 (5)改变状态为向上
电梯各个状态的处理过程是,根据电梯状态,调用相应的控制状态的处理程序来控制电梯的运行。图3为电梯运行状态的处理流程图。当进入电梯运行状态后,首先判断当前电梯的运行方向。
程序处理逻辑如下:
1.当电梯向上运行时:
(1)若当前层有内部请求,或外部有向上请求,或外部有向上和向下请求,则改变状态为开门,返回;否则,转(2);
(2)若当前层上方有内外请求,则当前层上移一层,返回;否则,转(3);
(3)若当前层有外部向下请求,则改变状态为开门状态,返回;否则,转(4);
(4)若当前层下方有内外请求,则改变状态为向下,返回。
2.当电梯向下运行时:
(1)若当前层有内部请求,或外部有向下请求,或外部有向上和向下请求,则改变状态为开门,返回;否则,转(2);
(2)若当前层下方有内外请求,则当前层下移一层,返回;否则,转(3);
(3)若当前层有外部向上请求,则改变状态为开门状态,返回;否则,转(4);
(4)若当前层上方有内外请求,则改变状态为向上,返回。
问题3:tA=TM+TDC+TS+TA+TR; tB=TDC+TS+TB+TR; tC=TDC+TS+TC+TR;
中断饱和时间为:T=tA+tB+tC或T=TM+3TDC+3TS+TA+TB+TC+3TR该问题是一个关于多级中断的问题,题中现假设TDC为硬件中断周期时间,TM为一个指令执行周期时间,TA、TB、TC分别为A、B、C的中断服务程序执行时间,TS、TR为保护现场和恢复现场所需的时间。
当三个设备同时发出中断请求时,依次处理设备A、B、C的时间分别为: tA=TM+TDC+TS+TA+TR; tB=TDC+TS+TB+TR; tC=TDC+TS+TC+TR;
注意,TM只执行1次。这种结构下中断饱和时间是:T=tA+tB+tC=TM+3TDC+3TS+TA+TB+TC+3TR
企业根据利润提成发放奖金。利润低于或等于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;iimage.pngn; i++){if (profit[i]image.png=100000)(1);else if(profit[i]image.png=200000)(2);else if(profit[i]image.png=400000)(3);else if(profit[i]image.png=600000)(4);else if(profit[i]image.png=1000000)(5) ;else(6) ;}/*以下代码计算年度总利润*/i=0;while(iimage.pngn)sum_profit += profit[++i];return sum_profit;}
问题:1 在程序中,使用关键字const修饰输入参数profit,请将这样修饰的作用写到(1)处。如果程序中bonus数组也使用const修饰,是否正确,并给出解释,请将答案写到(2)处。
问题:2 分析程序中的计算年度总利润的代码,指出错误的一行代码,将错误代码写到(1)处;然后用一条语句实现正确代码,将正确代码写到(2)处。
问题:3 根据题意分析程序,完成程序中的(1)~(6),每个空行只能写一行代码,即用一条语句来描述,将答案写到相应的位置。
本题解析:
问题1:(1)限定变量,不允许被修改(2)不正确,因为该数组需要被修改。
问题2:(1)sum_profit += profit[++i]; (2)sum_profit += profit[i++];
问题3:(1)bonus[i]=profit[i]*0.1
(2)bonus[i]=bonus1+(profit[i]-100000)*0.15
(3)bonus[i]=bonus2+(profit[i]-200000)*0.20
(4)bonus[i]=bonus4+(profit[i]-400000)*0.25
(5)bonus[i]=bonus6+(profit[i]-600000)*0.30
(6)bonus[i]=bonus10+(profit[i]-1000000)*0.35
问题1:const修饰的数据类型是常类型,只能读不能写。
问题2:根据题意,1月到12月的利润分别保存在profit[0]到profit[11]之中,所以年度总利润应该是这12个元素相加,下标从0到11,题中的sum_profit += profit[++i]是从1加到12,因为是先i++再计算。
问题3:根据题意,企业员工在1月到12月创造的利润分别保存在profit[0]到profit[11]中,作为计算每个月奖金的输入,用const修饰,在函数执行期间不能改变。而根据利润计算出的每个月的奖金则作为输出数组保存在bonus[0]到bonus[11]中。根据题目计算方法,前半部分为计算1到12月的奖金,并且是分段计算,逻辑十分简单。
某智能农业基地需要实时监控各个蔬菜大棚的温湿度,李工开发了一款温湿度监测仪,硬件系统设计部分如图2-1所示。
李工采用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所示。
问题: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 STM32处理器具有通用同步异步收发器(USART),USART利用分数波特率发生器提供宽范围的波特率选择。波特率的计算公式为:
其中,fck为给外设的时钟,USARTDIV是一个无符号数,其值设置在USART_BRR寄存器中。假设给外设提供的时钟频率fck=72MHz,GSM/GPRS/GPS三合一模块所需的波特率为115200,则USARTDIV的值应为(1),USART_BRR寄存器的十木进制值应为⑵。请完成其中的填空,将答案填写在对应栏中。
问题:3 RS485总线使用特制的RS485芯片,最大支持节点数可达128个以上。该系统的RS485总线上最多可以支持(1)个TS-FTM01传感器?请完成其中的填空,将答案填写在对应栏中。
问题: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>16F.addr>=16本方案利用低速串行总线遍历读取16个传感器的温湿度数据及GPS的定位信息,并通过GSM实现数据上报。该执行过程需要消耗一定的时间,导致现有的算法流程并不能精确实现以T为周期进行温湿度数据的采集和上报。为了修正该问题,需要把图2-4所示流程中的步骤(4)调整到步骤(5)后执行。请完成其中的填空,将答案填写在对应栏中。
本题解析:
问题1:(1)-(4):A D E G
问题2:(1)39.0625 (2)0x271
问题3:(1)64
问题4:(1)D(2)B(3)F(4)(m)(5)(c)
问题1:RS232和RS485特点RS232支持全双工通信,但只支持一对一的单站通信,典型的连接器包括DB9和DB25,仅使用三线也可以进行基本通信。RS485支持一点对多点的双向通信,有二线与四线两种方式,采用二线制可实现真正的一对多半双工通信,采用差分传输方式,抗干扰能力强。
问题2:根据波特率公式
已知外设提供的时钟频率fck=72MHZ,GSM/GPRS/GPS三合一模块所需的波特率为115200,代入公式可得115200=72MHZ/16*USARTDIV,可得USARTDIV=39.0625,注意MHZ单位换算。根据图2-3和表2-1对寄存器USART_BRR的功能描述,寄存器的4-15位对应USARTDIV的整数部分,0-3位对应USARTDIV的小数部分,由上面求出的值,可知本题中,USARTDIV整数部分为39,对应USART_BRR的4-15位十六进制就是0x27;USARTDIV的小数部分为0.0625,则寄存器USART_BRR的0-3位十六进制为0x1,组合可知为0x271.
问题3:根据图2-2所示,TS-FTM01传感器地址采用6位拨码开关进行编码,意味着该传感器的地址编码范围为0-63(最大2^6=64个)。在RS485通信机制中采用地址编码来区分不同的RS485设备。因此,该系统中可以支持的TS-FTM01传感器数目为64.
问题4:RS485采用二线制进行半双工通信,本题要求用两根GPIO口线来模拟二线制的RS485总线,通过两根GPIO口线上的信号的高低来模拟RS485的差分信号,本题并未考察RS485时序,只对半双工通信概念进行考察。因此,在利用模拟的RS485总线进行数据发送时,总线处于写状态,要把这两根GPIO口线配置成输出模式;当处理器通过RS485总线实现了数据发送后,要立即把RS485总线的状态从写状态切换到读状态,以便接收传感器的应答信息,实现半双工通信,因此此时应该把这两根GPIO口线配置为输入模式。根据题目要求,要实现16个TS-FTM01传感器(地址编码为0-15)的温湿度数据读取,采用循环方式依次读取,根据软件流程图,addr地址从0开始处理,因此循环结束条件应为addr>=16.
需要周期性的进行温湿度数据的采集和上报,周期T由硬件定时器来实现,为了实现精确定时,需要在一次定时时刻到后立即触发下一个周期的定时开始,但图2-4所示的软件流程是一次定时时刻到后,先进行16个传感器的读取,然后再触发下一个周期的定时开始,导致实际的采集间隔为预设的周期T加上读取16个传感器温湿度数据所需的时间。为了修正这个问题,需要在定时时间到后立即触发下一个定时周期,然后再进行温湿度数据的读取和上报。因此要把步骤m中的重置定时器操作提到步骤c定时超时后立即执行。
某舰载综合处理系统由若干数据处理模块、10处理模块、信号处理模块、图形处理模块、大容量处理模块和电源模块组成,各处理模块通过CAN总线连接,如图1-1所示。
为了提高综合处理系统的处理速度,主要处理模块都设计为多个处理器。其中,数据处理模块有
串行RapidlO协议即SRIO通信协议,构建了3层的协议体系。如图1-3所示,分别是物理层、传输层、逻辑层。物理层定义了硬件接口的电器特性,并包括链路控制、初级流量控制和低级错误管理等功能;传输层负责进行寻址和路由信息管理;逻辑层定义了服务类型和包交换的格式。逻辑层定义了数据包的格式,同时支持两种操作方式,分别是直接IO/DMA方式和消息传递方式。
直接IO/DMA是一种常用的数据传输方式,发送端需要知道被访问设备的存储空间地址映射,被访问端的操作基本由硬件实现。直接I0/DMA下,发起一次传输操作,需要有效数据、目标器件ID、数据长度、数据在被访问设备存储空间的地址以及包优先级等;同时,所有构成的包的长度为32bit的整数倍;若包长度不能满足要求,则添加附加位进行弥补。消息传递方式不要求发送节点知道目的节点的地址空间映射,当数据到达目的节点时,会根据邮箱号确定消息存储位置。在消息传递模式下进行数据传输时,除了有效载荷外还需要提供目的节点的ID、数据长度、包优先级和邮箱号等。
问题:1 可执行程序有严格的格式,一般分为text段、data段和bss段,请解释各段存放的内容,并将答案填写在(1)~(3)中。陈工程师写了一段图形图像相关的程序,在程序中他定义了一个大数组,如下所示:char arrMap[1024*1024];void main(void){...}请问此数组位于内存哪个位置(即在那个段中)?
问题:2 RapidlO逻辑层中直接IO/DMA和消息传递这两种传输方式的主要差异如表1-1所示。请完成表中的内容,将表1-1中的(1)~(5)答案填写在对应栏中。
问题:3 在IO处理模块等多个模块上,都采用中断方式处理输入输出。在中断处过程包括关中断、保存断点、识别中断源等一系列步骤,如图1-4所示,请完成其中的填空。
本题解析:
问题1:(1)text段:存放程序代码; (2)data段:存放有初值的全局变量和常量 (3)bss段:存放未被初始化的全局变量 (4)该数组是未初始化的全局变量,因此存放在bss段中。
问题2:(1)可以(2)不需要 (3)通过邮箱号间接寻址(4)读/写(5)无
问题3:(1)识别中断源 (2)设置新的屏蔽字 (3)执行中断服务程序主体 (4)关中断
某公司承接了一个数据采集与处理系统的项目,由刘工负责系统的方案设计,刘工的设计方案如图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=______。
本题解析:
1、B、E、F、G、J、K
2、A C B D
3、(q->head==q->tail)&&(q->tag=0) ((q->head=q->tail)&&(q->tag==1)) (q->tail+1)%q->size (q->head+1)%q->size (q->head==q->tail) (q->head==(q->tail+1)%q->size)) (q->tail+1)%q->size (q->head+1)%q->size
1、本题考查嵌入式系统中计算机总线、存储、环形队列等相关知识。
该方案是基于PCI总线的多功能处理系统。PCI(Peripheral Component Interconnect)总线是一种高性能局部总线,是为了满足外设间以及外设与主机间高速数据传输而提出来的。在数字图形、图像和语音处理,以及高速实时数据采集与处理等对数据传输率要求较高的应用中,采用PCI总线来进行数据传输,可以解决原有的标准总线数据传输率低带来的瓶颈问题。
PCI总线是一种树型结构,并且独立于CPU,可以和CPU并行操作。PCI总线上可以挂接PCI设备和PCI桥片,一个PCI设备可以既是主设备也是从设备,但是在同一个时刻,这个PCI设备或者为主设备或者为从设备。在PCI总线中有3类设备,PCI主设备、PCI从设备和桥设备。其中PCI从设备只能被动地接收来自HOST主桥,或者其他PCI设备的读写请求;而PCI主设备可以通过总线仲裁获得PCI总线的使用权,主动地向其他PCI设备或者主存储器发起存储器读写请求。而桥设备的主要作用是管理下游的PCI总线,并转发上下游总线之间的总线事务。PCI总线有3种桥,即HOST/PCI桥、PCI/PCI桥和PCI/LEGACY桥。
PCI总线的地址总线与数据总线是分时复用的。这样做的好处是,一方面可以节省接插件的管脚数,另一方面便于实现猝发数据传输。在做数据传输时,由一个PCI设备做发起者(主控,Initiator或Master),而另一个PCI设备做目标(从设备,Target或Slave)。总线上的所有时序的产生与控制,都由Master来发起。PCI总线在同一时刻只能供一对设备完成传输,这就要求有一个仲裁机构(Arbiter),来决定谁有权力拿到总线的主控权。
PCI总线有如下显著的特点:
(1)高速性,PCI局部总线以33MHz的时钟频率操作,采用32位数据总线,数据传输速率可高达132MB/s,远超过以往各种总线。而早在1995年6月推出的PCI总线规范2.1已定义了64位、66MHz的PCI总线标准。因此PCI总线完全可为未来的计算机提供更高的数据传送率。另外,PCI总线的主设备(Master)可与计算机内存直接交换数据,而不必经过计算机CPU中转,也提高了数据传送的效率。
(2)即插即用性,PCI设备识别主要是对开发商代码和设备代码进行识别,PCI设备的硬件资源,则是由计算机根据其各自的要求统一分配,绝不会有任何的冲突问题。作为PCI板卡的设计者,不必关心计算机的哪些资源可用,哪些资源不可用,也不必关心板卡之间是否会有冲突。
(3)可靠性,PCI独立于处理器的结构,形成一种独特的中间缓冲器设计方式,将中央处理器子系统与外围设备分开。这样用户可以随意增添外围设备,以扩充计算机系统而不必担心在不同时钟频率下会导致性能的下降。PCI总线增加了奇偶校验错(PERR)、系统错(SERR)、从设备结束(STOP)等控制信号及超时处理等可靠性措施,使数据传输的可靠性大为增加。
(4)复杂性,PCI总线强大的功能大大增加了硬件设计和软件开发的实现难度。硬件上要采用大容量、高速度的CPLD或FPGA芯片来实现PCI总线复杂的功能。软件上则要根据所用的操作系统,用软件工具编制支持即插即用功能的设备驱动程序。
(5)自动配置,PCI总线规范规定PCI设备可以自动配置。PCI定义了3种地址空间:存储器空间、输入/输出空间和配置空间,每个PCI设备中都有256字节的配置空间用来存放自动配置信息,在系统初始化时,通过idsel引脚片选决定PCI设备,自动根据读到的有关设备的信息,结合系统的实际情况为设备分配存储地址、中断和某些定时信息。
(6)共享中断,PCI总线是采用低电平有效方式,多个中断可以共享一条中断线。
(7)扩展性好,如果需要把许多设备连接到PCI总线上,而总线驱动能力不足时,可以采用多级PCI总线,这些总线上均可以并发工作,每个总线上均可挂接若干设备。因此PCI总线结构的扩展性是非常好的。
(8)多路复用,在PCI总线中为了优化设计采用了地址线和数据线共用一组物理线路,即多路复用。PCI接插件尺寸小,又采用了多路复用技术,减少了元件和管脚个数,提高了效率。
(9)严格规范,PCI总线对协议、时序、电气性能、机械性能等指标都有严格的规定,保证了PCI的可靠性和兼容性。由于PCI总线规范十分复杂,其接口的实现就有较高的技术难度。
2、双口RAM是在一个存储器上具有两套完全独立的数据线、地址线和读写控制线,并允许两个独立的系统同时对该存储器进行随机性的访问。每个读写口都有一套自己的地址寄存器和译码电路,可以并行地独立工作。两个读写口可以按各自接收的地址同时读出或写入,或一个写入而另一个读出。
与两个独立的存储器不同,两个读写口的访存空间相同,可以访问同一个存储单元。通常使双端口存储器的一个读写口面向CPU,另一个读写口则面向外设或输入/输出处理机。如图3所示。
双口RAM最大的特点是存储数据共享。一个存储器配备两套独立的地址、数据和控制线,允许两个独立的CPU或控制器同时异步地访问存储单元。因为数据共享,就必须存在访问仲裁控制。
当两个端口对同一内存操作时,当两个端口同时对同一地址单元读出数据,或者两个端口不同时对同一地址单元存取数据的情况下,两个端口的存取不会出现错误;当两个端口同时对同一地址单元写入数据的情况下,会出现写入错误;当两个端口同时对同一地址单元,一个写入数据,另一个读出数据的情况下,会出现读出错误。
3、环形队列是在实际编程极为有用的数据结构,它有如下特点:它是一个首尾相连的FIFO的数据结构,采用数组的线性空间;数据组织简单,能很快知道队列是否满或空;能以很快的速度来存取数据。因为简单高效,甚至在硬件都实现了环形队列。
内存上没有环形的结构,因此环形队列实际上是数组的线性空间来实现。那当数据到了尾部如何处理呢?它将转回到0位置来处理。这个转回是通过数组下标索引取模操作(Index% MAXN)来实现的。
因此环列队列的是逻辑上将数组元素q[0]与q[MAXN-1]连接,形成一个存放队列的环形空间。为了方便读写,还要用数组下标来指明队列的读写位置。定义Head/tail两个变量,其中head指向可以读的位置,tail指向可以写的位置。
环形队列的关键是判断队列为空,还是为满。当tail追上head时,队列为满;当head追上tail时,队列为空。但如何知道谁追上谁,还需要一些辅助的手段来判断。
如何判断环形队列为空、为满有两种判断方法。一是附加一个标志位tag,当head赶上tail,队列空,则令tag=0,当tail赶上head,队列满,则令tag=1;二是限制tail赶上head,即队尾结点与队首结点之间至少留有一个元素的空间。队列空时head==tail,队列满时(tail+1)%MAXN=head。
入队操作时,如队列不满,则写入q->tail=(q->tail+1)%q->size;出队操作时,如果队列不空,则从head处读出。下一个可读的位置在q->head=(q->head+1)%q->size。
某嵌入式系统中,存在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所示。
本题解析:
1、圈复杂度:7
2、
3、
1、本题考查软件测试的一些基本概念和通过代码审查查找软件缺陷以及设计测试用例的能力。
此题目要求考生认真阅读题目所给的软件设计说明信息和软件代码,熟悉结构体数据类型和不同代码覆盖率的要求,结合软件测试的一些基本概念,在此嵌入式软件中进行实际应用。
控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中。控制流图是McCabe复杂度计算的基础,McCabe度量标准是将软件的流程图转化为有向图,然后以图论的知识和计算方法来衡量软件的质量。McCabe复杂度包括圈复杂度(Cyclomatic complexity)、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。
在软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立线性路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的可能错误和高的圈复杂度有着很大关系。
嵌入式软件中通常使用圈复杂度来衡量程序的可维护性,一般要求圈复杂度不大于10。函数num_of_passer。的流程图如图1所示。
有以下3种方法计算圈复杂度:
(1)没有流程图的算法:基数为1,碰到以下项加1:分支数(如if、for、while和do while);switch中的case语句数;如果条件是2个复合条件的话,则加2,否则加1。
(2)给定流程图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量。
(3)给定流程图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。
按第1种没有流程图的算法,函数num_of_passer中一个for,两个if,但是一个if是3个复合条件应该加3,另一个if是两个组合条件,应该加2,所以圈复杂度为基数(1)+for(1)+if(3)+if(2)=7,圈复杂度为7。
按第2种圈复杂度V(G),定义为V(G)=E-N+2算法,函数num_of_passer流程图中E为16,N为11,所以V(G)=16-11+2=7。
按第3种圈复杂度V(G),定义为V(G)=P+1,函数num_of_passer流程图中P为6,所以V(G)=P+1=6+1=7。
上述3种算法中的任意方法,函数num_of_passer的圈复杂度都计算为7。
2、代码审查是不执行软件代码,而通过阅读软件代码发现代码可能存在的错误的过程。代码审查的测试内容包括检查代码和设计的一致性;检查代码执行标准的情况;检查代码逻辑表达的正确性;检查代码结构的合理性;检查代码的可读性。通过对说明的阅读,按照说明中描述的要求进行函数num_of_passer的代码审查。
阅读第1行代码,函数返回值定义为unsigned int;而在说明的第(2)条描述了当输入参数异常时,函数返回-1;这样发现说明和代码不一致,显然代码定义的unsigned int不能返回-1,此为第1处错误。修改函数返回值的定义为int类型即可。
阅读第3行代码,定义了无故障通道数目counter,在定义时未进行初始化,并且在第8行使用前依然未初始化。这就导致counter的初值为非确定值,可能出错,此为第2处错误。在第3行定义counter时初始化为0或者在使用前进行初始化为0均可。
阅读第4行代码,对模块输入参数进行合法性检查,num合法值为1至16;然后查找使用num之处,在第6行对num进行了使用,但第6行使用时却从0开始,而且是小于等于num,这就意味着如果第4行num值为最大值16,在第6行就需要循环判断17次(0到16),而本题的说明中描述很清楚,最多就16路通道,此为第3处错误。但此问题的更改有两种方案,方案1可以更改第4行num>16为num>=16,缩小此参数的合法范围;方案2可以更改第6行n<=num为n<num减少循环次数。
阅读第7行代码,对每个通道采集的双余度值进行有效性判断。按照说明,当余度设备采集值均不小于45时,才表示该路通道正常;但代码中使用当余度设备采集值均大于45时,表示该路通道正常,在对边界点45的处理上与说明不一致,此为第4处错误。将第7行代码中的两个“>”符号修改为“>=”即可与说明一致。
3、覆盖率是度量测试完整性的一个手段,也是度量测试有效性的一个手段。在嵌入式软件白盒测试过程中,通常以语句覆盖率、分支覆盖率和MC/DC覆盖率作为度量指标。语句覆盖率指程序中每条可执行语句至少被执行一次。分支覆盖指程序中每个判定取所有可能值至少一次。MC/DC覆盖率指在一个程序中每一种输入输出至少应出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每个判定中的每个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变。
对函数num_of_passer来说,为了使其中所有的语句至少执行一次,程序中的两种返回值必须各覆盖一次,所以为达到100%语句覆盖率,至少需要两个测试用例,即参数异常的测试用例和参数正常的测试用例。
函数num_of_passer在第4行和第7行有两处条件判断,为了使程序中每个判定取所有可能值至少一次,第4行需要取TRUE和FALSE,第7行需要取TRUE和FALSE。由于第4行取FALSE时,就能覆盖到第7行判定,同时又由于第7行的判定在一个大于一次的循环中,一个测试用例就可以覆盖到第7行的TRUE和FALSE,所以函数num_of_passer100%的分支覆盖也最少两个测试用例就可以满足,即一个第4行取TRUE的测试用例和一个第4行取FALSE、第7行取TRUE和FALSE的测试用例即可,由于第7行的条件判断在多次循环中,取TRUE和FALSE的测试用例也比较好构造。
函数num_of_passer的组合条件也出现在第4行和第7行。对第4行的组合条件需要4个测试用例来满足MC/DC覆盖,分别为①参数array为NULL,②array不为NULL且num为0,③array不为NULL且num为大于16的值,④array不为NULL且num为1到16之间的值。
对第7行的组合条件需要3个测试用例来满足MC/DC覆盖,分别为①Value1>45且Value2>45,②Value1>45且Value2<=45,③Value1<=45且Value2为任意值。由于取第4行array不为NULL且num为1到16之间值的测试用例时,程序将执行到第7行,这时由于第7行在一个多次循环中,第7行需要的3个测试用例都可以在此用例中进行覆盖,所以最少需要4个测试用例就可以使函数num_of_passer满足100%的MC/DC覆盖。
[说明]在开发某嵌入式系统时,设计人员根据系统要求,分别编写了如下程序,其中:
[程序1]:实现两个变量的值的互换;
[程序2]:完成某功能的C语言程序;
[程序3]和[程序4]:是P、V操作的形式化定义,设S为信号量。在多道程序系统中,进程是并发执行的。这些进程间存在着不同的相互制约关系,主要表现为同步和互斥两个方面。信号量是解决进程间同步与互斥的有效方法。 [程序1] void swap (int n1, int n2) { int tmp=n1; n1=n2; n2=tmp; [程序2] #include image.pngstdio.h> int fun (int n) { int f0=0, f1=1, f, i; if (n==0) return 0; if (n==1) return 1; for(i=2j; iimage.png=n; i++) { f=f0+f1; f0=f1; f1=f; } return f; } void main12 {int n=5; printf ("fun(%d)=%d\n", n, fun(n)); n=7; printf ("fun(%d)=%d\n", n, fun(n)); n=9; printf ("fun(%d)=%d\n", n, fun(n)); } [程序3] P操作的形式化定义:P (S) { ______; if(______){ 阻塞该进程;将该进程插入信号量S的等待队列; } } [程序4]V操作的形式化定义:V(S) { ______; if(______){ 从信号量S的等待队列中取出队首进程;将其插入就绪队列; } }
1、执行[程序1]后,没有能够实现两个变量值的交换,为什么?请修改上述函数,实现两个变量值的交换,要求函数无返回值,形式为:void swap(...)。
2、请问[程序2]运行结果是什么?
3、请简述什么是临界资源?什么是临界区? 请完成[程序3]和[程序4]的形式化定义。
本题解析:
1、两个变量不能交换值的原因:因为函数是传值的,函数形参值的交换,并不影响到实参的值的变化。
正确的函数编写如下(下面只是范例,变量名称不作要求):void swap (int *pn1, int *pn2) { int tmp=*pn1; *pn1=*pn2; *pn2=tmp; }
2、第一次输出:fun(5)=5 第二次输出:fun(7)=13 第三次输出:fun(9)=34
3、临界资源:一次只能使一个进程访问的资源称为临界资源。临界区:进程中访问临界资源的那段代码称为临界区。 (1)S-- (2)S<0 (3)S++ (4)S<=0
1、本题考查嵌入式C/C++语言编程基础知识。
函数swap采用值传递,虽然将形参n1和n2交换了,但是并不影响到实参,所以执行[程序1]后,实参变量并没有完成数据交换。将值传递改成指针传递就可以了。
对应的swap函数应修改如下: swap (int *pn1, int *pn2) { int tmp; tmp=*pn1; *pn1=*pn2; *pn2=tmp; }
2、当n=5时,初始:f0=0,f1=1;for循环计算如下:i=2: f=0+1=1; f0=1; f1=1; i=3: f=1+1=2; f0=1; f1=2; i=4: f=1+2=3; f0=2; f1=3; i=5: f=2+3=5; f0=3; f1=5; 所以,调用fun(5),得到返回值5;同理,可计算出fun(7)=13; fun(9)=34。
3、在多道程序系统中,进程是并发执行的,这些进程之间存在着不同的相互制约关系。进程之间的这种制约关系来源于并发进程的合作以及对资源的共享。
进程在运行过程中,一般会与其他进程共享资源,而有些资源的使用具有排他性。系统中的多个进程可以共享系统的各种资源,然而其中许多资源一次只能为一个进程所使用,通常把一次仅允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,如打印机、绘图机等。除物理设备外,还有许多变量、数据等都可由若干进程所共享,它们也属于临界资源。进程中访问临界资源的那段代码称为临界区,也称为临界段。
访问临界资源应遵循如下原则:①空闲让进(或有空即进):当没有进程处于临界区时,可以允许一个请求进入临界区的进程立即进入自己的临界区;②忙则等待(或无空则等):当已有进程进入其临界区时,其他试图进入临界区的进程必须等待;③有限等待:对要求访问临界资源的进程,应保证能在有限时间内进入自己的临界区;④让权等待:当进程不能进入自己的临界区时,应释放处理机。
信号量是荷兰著名的计算机科学家Dijkstra于1965年提出的一个同步机制,其基本思想是在多个相互合作的进程之间使用简单的信号来同步。
在操作系统中,信号量是表示资源的实体,除信号量的初值外,信号量的值仅能由P操作(又称Wait操作)和V操作(又称Signal操作)改变。
设S为一个信号量,P(S)执行时主要完成:先执行S=S-1;若S≥0则进程继续运行;若S<0则阻塞改进程,并将它插入该信号量的等待队列中。
V(S)执行时主要完成:先执行S=S+1;若S>0则进程继续执行;若S≤0则从该信号量等待队列中移出第一个进程,使其变为就绪状态并插入就绪队列,然后再返回原进程继续执行。
P、V操作的形式化描述如下:P(S) { S --; IF(S<0){ 阻塞该进程; 将该进程插入信号量s的等待队列; } } V(S) { S++; IF(S<=0) { 从信号量S的等待队列中取出队首进程; 将其插入就绪队列; } }
某飞行器供油阀控制软件通过控制左右两边的油箱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)故障级别从低到高依次为二级故障、一级故障和特级故障,如果低级故障和高级故障同时发生,则只上报最高级别故障。
问题:1 在嵌入式软件测试中,一般采用的测试方法有白盒测试、黑盒测试和灰盒测试方法,白盒测试方法中需要基于(1)进行测试;根据本题给定的条件,最恰当的测试方法应选择(2)。
问题:2 覆盖率是度量测试完整性的一个手段,也是度量测试有效性的一个手段。在嵌入式软件白盒测试过程中,通常以语句覆盖率、分支覆盖率和MC/DC覆盖率作为度量指标。在实现第6条功能时,设计人员对部分功能采用了下列算法:if((BL==故障)&&(EL==故障)){BR供油ER;BL断油;EL断油;}请指出对上述算法达到100%语句覆盖、100%分支(DC)覆盖和100%MC/DC覆盖所需的最少测试用例数目。请完成表3-1中的(1)?(3)填空。
问题:3 为了测试此软件功能,测试人员设计了表3-2所示的测试用例,请填写该表中的空(1)?(9)。
本题解析:
问题1:(1)软件源代码(2)黑盒
问题2:(1)1(2)2(3)3
问题3:(1)BR (2)BL (3)BR(4)BL(5)BL (6)BL(7)BR (8)故障 (9)特级故障
在某嵌入式系统设计中,使用8片RAM进行64KRAM的外部存储器扩展,如图所示。该CPU有16根地址线,8根数据线,在设计中,利用CPU的作为访问控制信号,该访问控制信号低电平有效。另外,R/W作为读写命令信号(高电平为读,低电平为写)。8片8Kx8位的RAM芯片与CPU相连,RAM芯片的片选内部为上拉电阻到电源,各个RAM芯片的片选信号和74138译码器的输出相连,译码器的地址选择端连接到CPU的A13,A14,A15地址线上。
问题1:根据上图所示,写出RAM0,RAM1和RAM7的地址范围(请用16进制进行表示)。RAM0: (1)RAM1: (2)RAM7: (3)若CPU操作的地址总线为A800H,结合上图所示的示意图,CPU访问的是哪个RAM存储器 ?(4) ?。
问题2:如果运行时发现不论往哪片RAM写入数据后,以C000H为起始地址的存储芯片都有与其相同的数据,假设芯片与译码器可靠工作,则说明:
(1)RAM0~RAM7中______的片选输入端总是处于低电平。
(2)如果有问题的存储芯片的片选输入端总是处于低电平,以下可能原因中描述不正确的是______。A.该存储芯片的CS端与存储芯片的端错连或短路B.该存储芯片的CS端与CPU的端错连或短路C.该存储芯片的CS端与地线错连或短路D.该存储芯片的CS端悬空
问题3:根据连接图,若出现地址线A15与CPU断线,并搭接到高电平上,下面描述中正确的是______。(该题为多选题)A.此时存储器只能寻址A15=1的地址空间B.此时存储器只能寻址总共64KB空间的高32KB地址空间C.此时访问64KB空间的高32KB地址空间时会错误地访问到低32KB地址空间D.此时访问64KB空间的低32KB地址空间时会错误地访问到高32KB地址空间
本题解析:
问题1:(1)0000H-1FFFH (2)2000H-3FFFH(3)E000H-FFFFH (4)RAM5
在该嵌入式系统设计中,使用8片RAM进行64KRAM的外部存储器扩展。该CPU共有16根地址线,8根数据线。在设计中,各个RAM的片选信号依次连接在74LS138的八位输出信号上,74LS138的地址选择线连接在CPU的地址线A15,A14,A13上,因此,对8个RAM的选择依赖于CPU的地址线A15,A14和A13的电平。
根据74LS138可知,对于RAM0~RAM7的8个RAM而言,依次对应的A15,A14,A13的值为000,001,010,011,100,101,110,111。同时,由于每个RAM的空间大小为8K,占据的地址线为A0~A12,因此,可以知道各个RAM的地址范围依次是:RAM0:0000H-1FFFHRAM1:2000H-3FFFHRAM2:4000H-5FFFHRAM3:6000H-7FFFHRAM4:8000H-9FFFHRAM5:A000H-BFFFHRAM6:C000H-DFFFHRAM7:E000H-FFFFH
问题2:(1)RAM6(2)D
由上题可知,对应C000H地址的片选为RAM6,也就是说RAM6一直处于被选通状态。从原理图中的连接情况可以看出,CS片选只有一直是低电平状态下才可以有效。从原理图中可以看出,WE以及MREQ信号都是低电平有效,同时由题目中知道,该管脚为片内上拉到电源,因此如果该CS一直有效,可能潜在的原因包括与WE信号或者MREQ信号接错,或者是直接与地短接。
问题3:ABD
如果A15与CPU断开,并且接到高电平,则说明A15一直为高,那么A15,A14,A13取值的可能范围为100,101,110,111。也就是说,此时存储器的寻址范围只能是A15=1的存储地址空间,与之前的8片RAM相比,现在只能寻址到4片RAM,因此先前的64KB空间中只能寻址到高32KB的地址空间。同时,由于高位A15一直为1,因此,如果按照用户期望访问总共64KB空间的低32KB空间时,会错误的访问到高32KB地址空间。
某直升机的显示控制计算机是其座舱显控系统的核心部件,将来自飞行员的参数和控制命令与载机的飞行参数信息进行融合处理后,在显示器上显示。该显示控制计算机由一个显示控制单元和一个输入输出单元组成,它们之间通过双口RAM进行数据交换,如图4-1所示。
显示控制单元采用Freescale公司的PowerPC8270高性能、低功耗32位处理器,并设计有系统FLASH存储器、用户FLASH存储器、SDRAM存储器。CPU内部宾成存储器控制器,提供地址译码、数据处理周期访问时序、SDRAM时钟等功能。输入输出单元采用Ti公司的DSP F2812高性能、低功耗16位处理器,采用AF.INC429总线用于接收导航计算机、大气数据计算机等外部设备的数据。
ARINC429解算程序严格遵循ARINC429规范,其通用字格式如表4-1所示,字长32Bit,不用的数据位填“0”。当接收到ARINC429数据后,首先判断状态位,只有在状态和标号正确的情况下,才进一步根据分辨率等进行解算数据的含义。
问题:1 系统FLASH存储器的存储容量是8MB,用于存储CPU模块引导程序、BIT测试程序,FLASH在板编程程序,网口操作系统,用户程序。系统FLASH地址分配在存储空间的高端,地址空间为(1)~OxFFFFFFFF。用户FLASH存储器的存储容量是为(2),用于记录数据的存储。FLASH地址分配在存储空间的高端,地址空间为0x78000000?0x7BFFFFFF。SDRAM的存储容量是256MB,用于运行操作系统和应用软件,地址空间位于存储器的低端0x00000000~3)。请完成(1)~(3)填空。
问题: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)填空。
问题: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)填空。
本题解析:
问题1:(1)0xFF800000 (2)64MB(3)0x0FFFFFFF
问题2:(1)200(2)0000.0000.0011.1110.1000
问题3:(1)67 (2)pBuf->head == pBuf->tail (3)pBuf->tail == (pBuf->head + 1)%32
问题1:计算机的内存出处容量的计量单位是字节,系统FLASH存储器的存储容量是8MB,二进制表示为0x800000,地址分配在存储空间的高端,地址空间为0Xff800000-0xFFFFFFFF。用户FLASH的地址空间为0x78000000-0x7BFFFFFF,存储容量是0x40000000,也即64MB。SDRAM的存储容量是256MB,二进制表示为0x10000000,地址分配在存储空间的低端,地址空间为0x00000000-0x0FFFFFFF。
问题2:基本的二进制和十进制的换算。
问题3:本题中由于是采取强制编译器按照字节对齐方式,因此该模式下,char正好字节对齐,short占用两个字节,共1+1+1+32*2=67B。环形队列是一个首位相连的FIFO数据结构,为了判断空和满,长度为n的环形队列会只存n-1个数据,空出一个不存(题中也是只存31个),其头指针指向第一个节点,尾指针指向最后一个节点的下一个节点,因此队列为空的时候头指针和尾指针相等。队列满的时候尾指针+1=头指针,实际使用时,考虑循环队列会转回0,要进行取模操作。
试卷分类:高级信息系统项目管理师
练习次数:0次
试卷分类:高级系统架构设计师
练习次数:0次
试卷分类:中级系统集成项目管理工程师
练习次数:0次
试卷分类:中级信息系统监理师
练习次数:0次
试卷分类:中级软件设计师
练习次数:0次
试卷分类:高级网络规划设计师
练习次数:0次
试卷分类:高级网络规划设计师
练习次数:0次
试卷分类:高级网络规划设计师
练习次数:0次
试卷分类:中级网络工程师
练习次数:0次
试卷分类:中级网络工程师
练习次数:0次