201611嵌入式下午真题

第 1 题

【说明】
某综合化智能空气净化器设计以微处理器为核心,包含各种传感器和控制器,具有检测环境空气参数(包含温湿度、可燃气体、细颗粒物等),空气净化、加湿、除湿、加热和杀菌等功能,并能通过移动客户端对其进行远程控制。
图1-1为该系统电气部分连接图,除微处理器外,还包括了片上32KBFLASH,以及SRAM和EEPROM。


【问题1】
该系统的SRAM的地址线宽度为11,数据线宽度为8,其容量为多少字节?
【问题2】
该系统分别设计了iOS和Android两种不同操作系统下的客户端程序,二者在开发上都使用MVC(模型(M)-视图(V)-控制器(C))设计模式。在典型的程序设计中,用户可以直接和视图进行交互,通过对事件的操作,可以触发视图的各种事件,再通过控制器,以达到更新模型或数据的目的。请完善图1-2所示的流程模型。
【问题3】
该系统采用数字式激光传感器检测PM2.5、PM10,并通过异步串行接口将数据上报给处理器,通信波特率为9600bps,上报周期为1.5秒,数据帧内容包括:报文头、指令号、数据(6字节)、校验和及报文尾,具体字段描述如表1-1所示。



王工根据数据报文通信协议,使用C语言编写了对应的数据接收和校验程序,请根据注释要求补全程序。
程序段如下:


注释:
Serial.available(  ):判断串口接收缓冲器的状态函数。读取串口接收缓冲器的值(128字节寄存器),以判断数据送达到串口。
返回:串口已经准备好的字节数。
Serial.read(  ):读取串口函数。
返回:串口的数据第一个字节,如果没有返回-1。
Serial.flush(  ):清除串口缓冲器内容函数。
返回:None。

答案与解析

  • 试题难度:一般
  • 知识点:嵌入式软件程序设计>嵌入式程序设计
  • 试题答案:

    【问题1】(3分)

    【问题2】(3分)
    (1)控制器(2)视图(3)模型
    【问题3】(9分)
    (1)0xAA(2)0xC0(3)mPkt[i+2](4)mPkt[8]
    (5)(uintl6_t)mPkt[2]丨(uintl6_t)(mPkt[3]«8)或其等价形式
    (6)(uintl6_t)mPkt[4]丨(uintl6_t)(mPkt[5]«8)或其等价形式

  • 试题解析:

    【问题1】

    该微处理器系统拥有一块11条地址线、8条数据线的SRAM,要求计算其容量。因为是11条地址线,所以地址的个数是2的11次方。然后有8条数据线,说明一次可以访问的数据为8bit,也就是一个单元存放了1个字节。因此存储的容量大小为:211*8bit=2KB。

    【问题2】
    mvc框架由模型(M),视图(V),控制器(C)组成,执行流程一般是:在控制器访问模型获取数据,通过视图渲染页面。
    (1)控制器(Controller):控制器接受用户的输入并调用模型和视图去完成用户的需求。该部分是用户界面与Model的接口。一方面它解释来自于视图的输入,将其解释成为系统能够理解的对象,同时它也识别用户动作,并将其解释为对模型特定方法的调用;另一方面,它处理来自于模型的事件和模型逻辑执行的结果,调用适当的视图为用户提供反馈。
    (2)模型(Model):模型是应用程序的主体部分。模型表示业务数据和业务逻辑。一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。
    (3)视图(View):视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。
    完整的流程模型如下图所述:

第 2 题

【说明】
王工在采用某16位嵌入式CPU进行A/D采集硬件电路设计时,利用8255控制器C口中的PCO输出控制信号,利用PC7读入AD574的状态信号,利用A口和B口读入AD574转换好的12位数据。图2-1为该A/D采集硬件系统设计的部分连接示意图。


其中,AD574各个管脚功能定义如表24所述。


AD574的控制功能状态表如表2-2所示。


8255控制器各个管脚及地址控制描述如表2-3所示。



【问题1】
在该嵌入式系统设计中,AD574是工作在12位转换模式还是8位转换模式?
【问题2】
图2-1中245为双向缓冲器,在该硬件设计中配置8255控制字时,CPU需要向245进行数据输出(245的A口传输给B口);在获取AD采集数据时CPU需要接收245所传输过来的数据(245的B口传输给A口)。根据硬件设计,描述DR分别为高、低电平时,245双向缓冲器在A、B口之间进行数据传输的方向。
【问题3】
在该A/D变换中,如果用1/2LSB(最低有效位)来表示量化误差,当该A/D控制器的量程范围为5V时,其量化误差是多大?
【问题4】
王工根据上述硬件设计,编写对应的数据采集程序,首先需要对8255进行初始体,然后进行数据采集,请根据注释要求补全如下X86汇编程序。



答案与解析

  • 试题难度:一般
  • 知识点:嵌入式硬件设计>其它
  • 试题答案:

    【问题1】
    12位
    【问题2】
    DR=高电平时,A口传向B口

    DR=低电平时,B口传向A口

    【问题3】
    5V÷4096÷2=0.61mv
    【问题4】
    (1)#C003H
    (2)#C002H#00H
    (3)#00H
    (4)#01H
    (5)#80H
    (6)#C000H
    (7)#C001H
    (8)#0FH

  • 试题解析:

    本题考查嵌入式硬件系统设计和基本的汇编程序编写知识。
    【问题1】
    根据表 2-1中AD574各个管脚功能定义表,可以得知A0=0时按照完整的12位数据进行输出,A0=1时按照8位数据进行输出。然后从图2-1的原理图可以看出,A0接地,即低电平。所以采用的是12位转换模式。
    【问题2】
    图2-1中245为双向缓冲器,在该硬件设计中配置8255控制字时,CPU需要向245进行数据输出(245的A口传输给B口);在获取AD采集数据时CPU需要接收245所 传输过来的数据(245的B口传输给A口)。根据硬件设计,根据表2-3中的RD非为读控制信号,WR非为写控制信号,都是低电平有效。而DR是跟RD非连接在一起,当DR为低电平的时候,也就是RD为低电平,所以RD是有效的,也就是读控制信号有效,是从B口传向A口。当DR为高电平的时候,RD是无效的,也就是WR为低电平有效的,也就是写控制信号有效,是从A口传向B口。
    【问题3】
    在该A/D变换中,如果用1/2LSB(最低有效位)来表示量化误差,当该A/D控制器的量程范围为5V时,其量化误差是5v*(1/212)*1/2=0.61mv。

第 3 题

【说明】
某嵌入式控制软件中,通过采集传感器数值来计算输出控制率,同时为提高数据采集的可靠性,对采集数值使用三余度采集方法进行三个通道的数据采集。
1.三余度数据采集及处理要求:
(1)如果某通道采集值超过[3.0,3.0]v正常范围内,且与任一相邻通道间差值不大于0.5v,则该通道数据满足要求;
(2)如果某通道采集值超过[-3.0,3.0]v正常范围,或者此通道采集值与其他两个通道的差值均大于0.5v,则该通道数据不满足要求;
(3)如果三通道值均满足要求,则取三通道中差值较小的两通道数据平均值;
(4)如果三通道值均满足要求,且相邻两数值的差值相等,则取三个采集值的中间值;
(5)如果仅有一个通道数据不满足采集要求,取满足要求的两个通道数据平均值;
(6)如果大于一个通道数据不满足采集要求,取安全值0v。
2.对计算输出控制率的具体处理算法如下:
(1)如果依据采集数据计算的控制率C1与目前实际控制率C0差值不大于0.01,则使用本周期计算控制率C1进行输出控制,否则使用目前实际控制率C0输出控制,连续超过范围计数加1,不上报传感器故障;
(2)如果连续3个周期计算的控制率C1与目前实际控制率C0差值大于0.01,则上报传感器三级故障,连续超过范围计数清零,使用目前实际控制率C0输出控制;如果已经连续3个周期控制率差值超过范围,并已上报三级故障,但第4个周期计算的控制率C1与目前实际控制率C0差值不大于0.01,则清除三级故障上报,并使用C1进行输出控制;
(3)如果累计大于等于10个周期计算的控制率C1与目前实际控制率C0差值大于0.01,则上报传感器二级故障,使用目前实际控制率C0输出控制;
(4)如果累计大于等于100个周期计算的控制率C1与目前实际控制率C0,差值大于0.01,则上报传感器一级故障,清除二级故障,并切断输出控制(输出安全值0);
(5)如果低级故障和高级故障同时发生,则按高级故障上报和处理。

【问题1】
为了测试采集算法,在不考虑测量误差的情况下,根据所设计测试用例的输入填写表3-1中的(1)~(6)空,预期输出结果精度为小数点后保留两位数字。


【问题2】
白盒测试方法和黑盒测试方法是目前嵌入式软件测试常用的方法,请简述白盒测试方法与黑盒测试方法的概念。同时依据本题说明,指明问题1中设计的测试用例使用了白盒测试方法还是黑盒测试方法。
【问题3】
为了测试控制率计算算法,在不考虑测量误差的情况下,请完善所设计的测试用例,填写表3-2中的空(1)~(6)。


答案与解析

  • 试题难度:一般
  • 知识点:嵌入式系统实施知识>软件测试
  • 试题答案:

    【问题1】
    (1)1.90v
    (2)1.55v
    (3)2.70v
    (4)-2.90v
    (5)0v
    (6)0v
    【问题2】
    白盒测试也称结构测试、逻辑测试或基于程序的测试,这种测试应了解程序的内部构造,并且根据内部构造设计测试用例。
    黑盒测试又称功能测试、数据驱动测试或基于需求规格说明的测试,这种测试不必了解被测对象的内容情况,而依靠需求规格说明中的功能来设计测试用例。
    问题1中设计的测试用例使用了黑盒测试方法。
    【问题3】
    (1)1.454
    (2)2
    (3)9到98都可以
    (4)二级故障
    (5)0
    (6)一级故障

  • 试题解析:

    本题考查大家对嵌入式软件测试的方法概念以及测试用例的设计能力。
    【问题1】
    根据题干的描述信息来进行答题。
    1.三余度数据采集及处理要求:
    (1)如果某通道采集值超过[3.0,3.0]v正常范围内,且与任一相邻通道间差值不大于0.5v,则该通道数据满足要求;
    (2)如果某通道采集值超过[-3.0,3.0]v正常范围,或者此通道采集值与其他两个通道的差值均大于0.5v,则该通道数据不满足要求;
    (3)如果三通道值均满足要求,则取三通道中差值较小的两通道数据平均值;
    (4)如果三通道值均满足要求,且相邻两数值的差值相等,则取三个采集值的中间值;
    (5)如果仅有一个通道数据不满足采集要求,取满足要求的两个通道数据平均值;
    (6)如果大于一个通道数据不满足采集要求,取安全值0v。
    根据以上的6条设计要求,根据表格中的值来设计测试用例。比如序号2,三个采集值都是在 [-3.0,3.0]v的正常范围内,且与任一相邻通道间差值不大于0.5v,根据第3条的说明,则取三通道中差值较小的两通道数据平均值,In_U[0]和In_U[2]的平均值为(2.0v+1.8v)/2=1.90v。
    【问题2】
    此题考查白盒测试方法和黑盒测试方法的概念及应用。
    白盒测试又称结构测试、透明盒测试、逻辑驱动测试、基于代码的测试。盒子指被测试的软件 ,白盒指盒子是可视的。白盒测试是一种测试用例设计方法,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例。白盒测试主要针对被测程序的源代码,主要用于软件验证,不考虑软件的功能实现,只验证内部动作是否按照设计说明书的规定进行。
    黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。
    问题1中设计的测试用例时,只是根据设计算法,进行功能方面的测试,不需要了解程序的内部构造,按照黑盒测试方法的概念,确定问题1使用了黑盒测试方法。
    【问题3】
    这道题类似于问题1,考查大家对测试用例的设计能力,只是难度稍微偏高点了,因为不仅要考虑输入数据,还要考虑 前置条件以及输出的情况。

第 4 题

【说明】
某公司承接了一个数据处理模块的项目,由沈工负责模块的方案设计,沈工的设计方案如图4-1所示。该数据处理模块以PowerPC处理器为核心,设计了存储器、以太网、温度传感器、调试接口等功能电路。
处理器外接FLASH存储器用于存储上电初始化程序和应用程序。处理器通过I2C接口连接测温电路,监控模块的工作温度。以太网、串口、调试离散量等用于软件调试和状态显示。
测温电路选用ADT7461AR芯片,用于测试模块温度,ADT7461AR是一个双通道数字温度计,工作电压3v至5v,具有低/超温报警功能,采用I2C接口实现主机对远程/本地温度数据的采集,采集数据存储在高/低两个数据寄存器中,每个寄存器为16位,高寄存器表示整数值,低寄存器表示小数值。


存储模块采用某公司的FLASH存储芯片。支持编程、擦除、复位等操作命令。该FLASH芯片的常用命令序列如表4-1所示。表中的地址和数据皆为16进制数。


【问题1】
ADT7461AR芯片支持两种测温模式,其中第一种模式为二进制模式,用0表示0度,测温范围为0℃~+127℃;第二种模式为偏移二进制模式,用64表示0度,测温范围为-55℃~+150℃,温度数据转换关系如表4-2所示。
请在(1)~(4)处写出对应温度的二进制数。


【问题2】
沈工用C语言实现对FLASH的操作,需按照表4-1中定义的命令序列顺序执行即可。仔细阅读下列代码,请在(1)~(4)处将对应的C语言代码补全。


【问题3】
该嵌入式系统对处理的性能要求较高,沈工在完成软件设计后,需要对每一个函数的执行性能进行测试,检测其是否满足系统设计的要求。沈工通过PowerPC处理器内部的高精度时钟寄存器(TimeBase)进行计时,该寄存器由高低两个32位的寄存器组成,根据总线频率自动递增,当低32位寄存器递增到0xFFFFFFFF时,向高32位寄存器进位。计数值可以换算成时间值,精确到微秒级。
在功能函数fimction10的执行体前后,进行时间统计,最后计算出该函数的执行时间值,请在(1)~(2)处将对应的C语言代码补全。



答案与解析

  • 试题难度:一般
  • 知识点:嵌入式软件程序设计>嵌入式系统开发与设计
  • 试题答案:

    【问题1】
    (1)0011 0110 0000 0000
    (2)0000 0000 0100 0000
    (3)0100 0001 0000 0000
    (4)0011 0010 0000 0000
    【问题2】
    (1)0x2AA
    (2)0x80
    (3)offset_addr
    (4)0x30
    【问题3】
    (1)tbl.lower–tb0.lower
    (2)0xFFFFFFFF–tb0.lower +tbl.lower+1

  • 试题解析:

    本题考查嵌入式系统中计算机模拟量表示、FLASH设备驱动、高精度计数器等方面的相关知识及应用。
    【问题1】

    根据题干的描述信息,该芯片的采集数据存储在高/低两个数据寄存器中,每个寄存器为16位,高寄存器表示整数值,低寄存器表示小数值。
    当芯片工作在第一种模式(二进制模式),用0表示0度。根据温度为0℃时为0000 0000 0000 0000,+1℃时为0000 0001 0000 0000 ,说明高8位寄存器的范围是从0到127,表示了0℃~127℃。
    然后根据+0.5℃时为0000 0000 1000 0000,低8位寄存器中从左到右分别表示了+0.5℃,+0.25℃,+0.125℃等。
    当芯片工作在第二种模式(偏移二进制模式),用64表示0度。低8位跟二进制模式是一样的。高8位寄存器从9(64-55)到214(64+150),表示-55℃~+150℃

    【问题2】
    根据表4-1以及C语言代码的注释,可以得知是需要对扇区进行擦除操作,而扇区擦除操作共需要6个命令的总线写操作完成,命令序列如下:
    (1)将0xAA写到FLASH芯片地址0x555;
    (2)将0x55写到FLASH芯片地址0x2AA;
    (3)将0x80写到FLASH芯片地址0x555;
    (4)将0xAA写到FLASH芯片地址0x555;
    (5)将0x55写到FLASH芯片地址0x2AA;
    (6)将0x30写到要擦除的扇区对应的地址。
    【问题3】

    Power Architecture的处理器提供了一个名为Time Base(TB)的计数寄存器,它用来记录系统时间。TB寄存器会以一种依赖于实现的总线频率周期性地增加,这个频率可能不是恒定的。操作系统(OS)要负责确定更新频率是否发生了变化,以及对内部结构进行必要的调整,从而将计数值换算为绝对时间值。一般TB寄存器的计时精度可以达到微妙级。
    本项目中用一个包含高低两个32位整型数的结构体来存储TB寄存器的值。当低32位寄存器发生溢出时,处理器会自动向高32寄存器加1。通过插桩的方式测量函数的执行时间时,需要在功能函数fimctionlO 的执行体前后,分别两次获取TB寄存器的值,最后计算两次的差值,即为该函数的执行时间值。本题中tb0为函数进入时的TB值,tb1为函数退出前的TB值,tb2为tb1和tb0的差值,即函数的执行时间。
    当tb1的低32位大于等于tb0的低32位时,tb2的高位等于tb1的高位与tb0的高位的差值,tb2的低位等于tb1的低位与tb0的低位的差值。
    当tb1的低32位小于tb0的低32位时,则需借用高位进行计算。tb2的高位等于tb1高位与tb0高位的差值再减1,tb2的低位等于0xFFFFFFFF-tb0的低位+ tb1的低位再加1。

第 5 题

【说明】
【程序1】是关于条件编译的一段程序示例;
【程序2】是一段switch语句应用示例。C语言要求switch之后圆括弧内的“表达式”
类型必须是整型或字符型。该程序代码中a与x的对应关系如表5-1所示。


【程序3】是冒泡排序算法的实现。假设有N个数据存放在数组aa中,用冒泡排序将这N个数从小到大排序。首先,在aa[0]到aa[N-1]的范围内,依次比较两个相邻元素的值,若aa[j]>aa[j+l],则交换aa[j]与aa[j+l],j的值取0,1,2,…,N-2;经过这样一趟冒泡,就把这N个数中最大的数放到aa[N-l]中。接下来对aa[0]到aa[N-2]中的数再进行一趟冒泡,这样就将该范围内的最大值换到aa[N-2]中。依次进行下去,最多只要进行N-1趟冒泡,就可完成排序。如果在某趟冒泡过程中没有交换相邻的值,则说明排序已完成,可以提前结束处理。




【问题1】
(1)什么是C语言的条件编译?
(2)请解释#ifndef的作用。
(3)分析【C程序代码1】,写出该段执行后的输出结果。
【问题2】
完成【C程序代码2】中的(1)~(3)空,将答案写到答题纸相应的位置。
【问题3】
完成【C程序代码3】中的(4)~(6)空,将答案写到答题纸相应的位置。

答案与解析

  • 试题难度:一般
  • 知识点:嵌入式软件程序设计>嵌入式程序设计>面向过程的语言
  • 试题答案:

    【问题1】
    (1)条件编译:C语言中提供控制编译器流程的语句。
    或C源程序中希望对其中一部分内容只是在满足一定条件时才进行编译,形成目标代码,这种对一部分内容指定编译的条件称为条件编译。
    (2)#ifndef的作用:如果后面的“宏名”未定义,则编译其体内的程序段;否则就编译#else部分的程序段,如果没有#else部分,则当“宏名”已定义时直接跳过 #endif。
    (3)x=2
    【问题2】
    (1)x=3
    (2)x=l
    (3)x=2
    【问题3】
    (4)&aa[i]
    (5)N-i-1
    (6)!swap 或 swap==0

  • 试题解析:

    本题考查C语言编程方面的基础知识。
    【问题1】考查条件编译的概念;【问题2】考查考生对switch语句的理解;【问题3】考查考生对排序算法程序的理解。
    【问题1】
    条件编译是指预处理器根据条件编译指令,有条件地选择源程序代码中的一部分代码作为输出,送给编译器进行编译。主要是为了有选择性地执行相应操作,防止宏替换内容(如文件等)的重复包含。

    比如以下ifdef语句的功能就是:如果#ifdef后的宏名在此前已用#define语句定义,则编译程序段1;否则编译程序段2,则程序段 1 被选中,否则程序段 2 被选中。Ifndef跟ifdef刚好相反。另外就是#else是可以没有的。
    #ifdef 宏名
    程序段1
    #else
    程序段2
    #endif
    【问题2】
    C语言中,switch语句是一种多分支选择语句,在实际应用中,要在多种情况中选择一种情况,执行某一部分语句。
    switch语句的一般形式:
    switch(整形表达式)
    {
    case 常量表达式1: 语句1;
    case 常量表达式2: 语句2;

    case 常量表达式n: 语句n;
    default: 语句n+1;
    }
    使用说明如下:

    (1)程序执行时,首先计算表达式的值,与case后面的常量表达式值比较,若相等就执行对应部分的语句块,执行完后利用break语句跳出switch分支语句。若表达式的值与所有的case后的常量表达式均不匹配,则执行default项对应的语句n+1,执行后跳出switch分支语句。
    (2)case后面的常量表达式只能是整型、字符型或枚举型常量的一种;各case语句表达式的值各不相同,只起到一个标号作用,用于引导程序找到对应入口。
    (3)这里的语句块可以是一条语句,或其他复合语句。语句块可以不用花括号“{}”。
    (4)各个case语句并不是程序执行的终点,通常需要执行break语句来跳出switch分支语句;若某case语句的语句块被执行后,若其后没有break语句,则顺序执行其他case语句,直到遇到break语句或后面所有case语句全部执行完,再跳出switch分支语句。
    (5)多个case可以共用一组执行语句块。
    (6)各个case和default出现的先后次序,并不影响执行结果。
    (7)default语句不是必须的,但建议加上作为默认情况处理项。
    (8)switch语句仅做相等性检测,不能像if语句那样做关系表达式或逻辑表达式计算,进行逻辑真假判断。

    【问题3】
    所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法。具体方法是,相邻数值两两交换。从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换(对调);如果其与我们的期望一致,则不用交换。重复这样的过程,一直到最后没有数值需要交换,则排序完成。一般地,如果有N个数需要排序,则需要进行(N-1)趟起泡。

results matching ""

    No results matching ""