问答题
阅读以下说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】 某综合化智能空气净化器设计以微处理器为核心,包含各种传感器和控制器,具有检测环境空气参数(包含温湿度、可燃气体、细颗粒物等),空气净化、加湿、除湿、加热和杀菌等功能,并能通过移动客户端对其进行远程控制。 图1-1为该系统电气部分连接图,除微处理器外,还包括了片上32KB FLASH,以及SRAM和EEPROM。
问答题
该系统的SRAM的地址线宽度为11,数据线宽度为8,其容量为多少字节?
【正确答案】正确答案:2
11
×8=2048B=2KB
【答案解析】解析:该微处理器系统拥有一块11条地址线、8条数据线的SRAM,要求计算其容量。此题考查嵌入式系统微处理器体系结构的基本概念。题目说明有8根数据线,表示访问数据一次可以访问8个bit(一个字节),即一个单元放一个字节。有11根地址线,表示编址为0~2
11
一1。 因此存储的容量大小为:8*2
11
bit=2048B=2KB。
问答题
该系统分别设计了iOS和Android两种不同操作系统下的客户端程序,二者在开发上都使用MVC(模型(M)一视图(V)一控制器(C))设计模式。在典型的程序设计中,用户可以直接和视图进行交互,通过对事件的操作,可以触发视图的各种事件,再通过控制器,以达到更新模型或数据的目的。请完善图1-2所示的流程模型。
【正确答案】正确答案:(1)控制器 (2)视图 (3)模型
【答案解析】解析:此题考查嵌入式系统软件设计的基本概念和流程。客户端软件开发使用框架形式,采用模型(M)一视图(V)一控制器(C)设计模式。MVC模式使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。 视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术己层出不穷,它们包括Adobe Flash和XHTML,XML/XSL,WML等一些标识语言和Web services。如何处理应用程序的界面变得越来越有挑战性。MVC的好处是它能为你的应用程序处理很多不同的视图。 模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用像EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。 控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。 完整的流程模型如下图所述:

问答题
该系统采用数字式激光传感器检测PM2.5、PM10,并通过异步串行接口将数据上报给处理器,通信波特率为9600bps,上报周期为1.5秒,数据帧内容包括:报文头、指令号、数据(6字节)、校验和及报文尾,具体字段描述如表1-1所示。
【正确答案】正确答案:(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)或其等价形式
【答案解析】解析:此题考查嵌入式系统底层代码的阅读与理解及编写的能力,结合题目给出的代码分析如下: 首先定义数据类型,为了在不同平台之间更方便的移植,嵌入式系统代码编写时经常对数据类型进行重新定义。题目代码中明确说明了此类定义后,考生在答题时应尽量使用定义后的数据类型声明。 #define uintl 6_t unsigned short #define uint8_t unsigned char void ProcessSerialData() { uint8_t mData=0; uint8_t i=0; uint8_t mPkt[10]={0), uint8_t mCheck=0; /表示串口已经准备好了数据,Serial.available判断串口接收缓冲器的状态函数相关说明已在题目中给出。 */ while(Serial.available()>0) { mData=Serial.read(); //通过Serial.read读取串口函数接口读一个字节串口数据,存到mData变量中。 delay(2); //延迟2ms,确保数据包已被接收。 if(mData==0xAA)//判断是否为数据帧头,帧头标志0xAA已在题目中给出。 { mPkt[0]=mData; //如果为帧头,说明一帧数据开始,此时将帧头存到接收缓冲区内 mData=Serial.read(); /*使用Serial.read接口继续读取一个字节帧数据,存到mData变量中,完整的代码此时也应用延时1一2ms的操作*/ if(mData==0xc0)//继续判断是否为指令号0xC0,即数据帧中第二个字节内容 { mPkt[1]=mData; //将指令号0xC0存到接收缓冲区内 mCheck=0; //校验和变量mCheck清零 for(i=0;i<6;i++) //data recv and crc calc //使用Serial.read接口循环接收6个字节的数据,依次存入接收缓冲区中 { mPkt[i+2]=Serial.read(); delay(2); //每次调用Serial.read接口读数据后,延迟2ms的时间 mCheck+=mPkt[i+2];//计算校验和,存到变量mCheck中 } mPkt[8]=Seriall.read(); //使用Seriall.read接口读取校验和数据,存到接收缓冲区中 delay(1); mPkt[9]=Seriall.read(); //使用Seriall.read接口读取帧尾数据 if(mCheck==mPkt[8]) //判断校验和是否相符 { Seriall.flush(); /*校验和相符,表示已完成一帧数据接收,调用Seriall.flush接口清除串口 数据*/ Pm25=(uintl6一t)mPkt[2]|(uintl6一t)(mPkt[3]<<8); /*计算PM2.5的数值,题目给出数据1表示PM2.5的低字节,数据2表示PM2.5的高字节,因此将字节序为3的数据mPkt[3]左移8位于字节序为2的数据 mPkt[2]进行或操作得出,注意使用强制类型转换,位操作的方式计算量相对小,计算速度快,因此在计算资源紧张的嵌入式环境中大量使用*/ Pm10=(uint16一t)mPkt[4]|(uint16一t)(mPkt[5]<<8); //get one good packet return; } } } } 通过上述分析,容易得出各问题答案如下: (1)判断是否为数据帧的帧头,查题干数据可知帧头标识为0xAA; (2)判断是否为数据帧的指令号,查题干数据可知指令号为0xC0: (3)进行CRC计算,根据代码上下文可知为为第2~7字节数据mPkt[i+2]; (4)进行CRC校验,查题干数据可知CRC校验位为mPkt[8]; (5)考查位操作,根据题干数据可知为数据2左移8位加上数据l(uintl6_t)mVkt[2]| (uintl6_t)(mPkt[3]<<8)或者(uintl6_t)((mPkt[3]<<8)|mPkt[2]); (6)考查位操作,根据题干数据可知为数据4左移8位加上数据3(uintl6_t)mPkt[4]| (uintl6_t)(InPl(t[5]<<8)或者(uintl6_t)((mPkt[5]<<8)|mPkt[4])。