华南农业大学2021春《嵌入式软件开发》复习卷

华南农业大学2021春《嵌入式软件开发》复习卷

前言

由于老师所给复习卷已经涵盖很多知识点,所以本人网罗了许多网站对其试题做了一些答案的补充和问题的扩展。事实证明按照这张卷子复习最后确实可以考出一个不错的成绩,不过鉴于每年老师所讲即所考,大家就按照考纲来复习,把这份卷子当做是答案校验吧。

一、选择题

1、在 ARM 处理器中,共有___个寄存器。这些寄存器包括:___ 个通用寄存器和___个状态寄存器,均为 32 位。
A. 32,31,1 B.37,32,6 C. 32,27,5 D. 37,31,6
2、通常所说的 32 位微处理器是指_____。
A. 地址总线的宽度为 32 位 B. 处理的数据长度只能为 32 位
C. CPU 字长为 32 位 D. 通用寄存器数目为 32 个
3、在嵌入式系统架构中,_____ 完全把操作系统和硬件部分隔离开来,从而大大提高了系统的可移植性。
A. 硬件抽象层 B. 操作系统层 C. 硬件交互层 D. 驱动映射层
4、嵌入式系统的组成包括: 1)硬件层 2)BSP 3)嵌入式操作系统 4)应用编程接口 5)应用程序
A. 1)、2)、3) B. 1)、2)、3)、4) C. 1)、3)、4)、5) D. 1)、2)、3)、4)、5)
5、在嵌入式软件的程序设计要求中,所设计的软件层次越靠近硬件底层,以下说法正确的是______:
A. 对相应的软件质量要求也越低 B. 调试相对困难 C. 对程序员的能力要求较低 D. 设计难度也较小
6、下列哪层不是 MVC 设计模式的层次划分?
A. 模型层 B. DAO层 C. 控制器层 D. 视图层
7、在嵌入式程序设计中,下列关于全局数据和局部数据,不正确的说法是:
A.局部变量通常放在寄存器中,用来快速且高效的处理;
B.如果编译器的寄存器分配算法认为超过现有的寄存器数量,将把变量压入栈中;
C.全局和静态变量保留在 RAM 里面,需要使用 loads/stores 访问外部存储器;
D.全局变量在自己的作用域内可见,局部变量在整个程序生存期可见;
8、___ 不是进程和程序的区别。
A. 程序只能在前台运行,而进程可以在前台或后台运行
B. 程序是一组有序的静态指令,进程是一次程序的执行过程
C. 程序可以长期保存,进程是暂时的
D. 程序没有状态,而进程是有状态的
9、从技术角度,设计是一系列方法和工具,通过应用这些方法和工具给出一个可行解决 方案的描述。下面哪种不是常用方法?
A. 面向对象方法(OO) B. 面向过程方法 C. 面向切面编程(AOD) D. 领域驱动设计(DDD)
10、典型的计算机系统结构是:
A.冯诺依曼体系结构 B.哈佛结构 C.单总线结构 D.双总线结构
11、下列哪种设备不属于嵌入式系统产品?
A. PDA B. ATM 取款机 C.个人计算机 D.机顶盒
12、在追求效率的编程中,下列哪个说法是正确的?
A.在循环中,一般用减到 0 代替加到某个值 B.除法中除 2 操作可用左移操作代替
C.设计函数时,函数传递参数个数不影响编码效率 D. 循环次数不影响代码效率
13、在程序编译中,某个函数是否被内嵌,取决于以下条件,下列说法错误的是:
A. 函数是否被关键字 inline 标示 B. 编译时是否加入-Ospace 或-Otime 参数
C. 由函数被调用次数决定 D. 函数是否被关键字 volatile标示
14、Raspberry Pi 电脑板外形只有信用卡大小,却具有电脑的所有基本功能,这就是“树莓 派”,下列哪个操作系统不能安装在“树莓派”中?
A.Andoird B.Win 10 IoT C. CentOS D. iOS
15、以下哪个不是编译器的优化的范畴:
A. 冗余代码的清除 B. 命名优化 C. 嵌套优化 D. 自动优化
16、以下关于边缘计算的优势,正确的是:
A. 实时或更快速的数据处理和分析 B. 较高的成本 C. 网络流量较多 D. 更低的应用程序运行效率
17、关于汇编语言与 C/C++的混合程序叙述正确的是____。
A. 汇编程序、C/C++程序间可以互相调用 B. C/C++代码中可以嵌入汇编指令
C. 在汇编程序和 C/C++的程序之间可以进行变量的互访 D. 以上内容都正确
18、下面那个操作系统不是嵌入式操作系统?
A. VxWorks B. Ubuntu C. Android D. Windows 10 IoT
19、以下哪个不是嵌入式操作系统开发的特点:
A. 规模不大,开发难度较大
B. 嵌入式应用程序与嵌入式操作系统一体化
C. 代码质量要求不高、关键功能模块实现要求较高的可靠性与实时性
D. 嵌入式系统软件开发平台的交叉特性
20、哪个不是阿里云的基础服务
A.ECS B.RDS C.ADC D.SLS
【实际考试直接四道选择题,一题选出一个适合的阿里组件】
答案
1-5:DCADB
6-10:BDABA
11-15:CADDB
16-20:ADBCC

二、简答题

1、请按照自己的理解,说明Android与嵌入式Linux的不同之处。
2、为什么国内机器的内存和 cpu 频率比国外机器多?
3、什么是边缘计算,请解释并举例。
4、请简述在程序优化中堆栈的作用,对于递归算法应该怎么样使用?
5、为什么在 x86 架构中没有强调 BSP,但在嵌入式系统中特别强调 BSP?
答案
1、
a.源码架构的不同:
嵌入式android源码架构:uboot+linux kernel+android(包含文件系统,虚拟机,UI)
嵌入式linux:这是大部分人认识的linux uboot+linux kernel+文件系统+QT(UI)
b.主体不同
Linux系统是开源的类Unix操作系统
Android 是一种基于linux内核开源操作系统
c.特点不同
Linux继承Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,有上百种不同的发行版
Android会同一系列核心应用程序包一起发布,该应用程序包 包括客户端、SMS短消息程序、日历、地图、浏览器等,所有应用程序由Java编写
d.支持软件格式不同
Android系统支持的是APK后缀文件格式,而linux系统若要运行APK软件则需要一个JAVA虚拟机环境来运行。
e. Android主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。
linux系统在移动设备和电脑上都可以运行,伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器操作系统方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。

2、
Android是谷歌在Linux内核上加入许多第三方应用并重写Java虚拟机。Android是业内标准,为Android的开发提供了统一接口。
国外手机以IOS为例,其禁止应用程序在后台运行,所有切换到后台的应用程序被操作系统自动休眠,只有前台程序可以占用CPU;相比较,Android就开放得多,它运行应用程序任意创建后台服务Service,所有Service都可以在后台任意占用CPU和内存。因此,当Android安装的应用程序越来越多,且应用程序毫无节制地创建后台服务的话,系统前台应用就被迫和越来越多的后台服务共享CPU资源,从而拖慢了整个系统的速度。
课上讲的国外手机Android用的都是Google那一套框架,App的消息推送也只会推送谷歌相关的广告和消息,而国内各大互联网厂商都会在自己封装一次Android,并在自己开发的Android 基础上构建App,导致国内手机在安装完App后都会向用户所要各种权限,然后在后台开启进程推送自家的广告消息,最终导致手机的CPU资源紧张。

3、
a.边缘计算是网络边缘处理数据的一种行为,这些数据由网络边缘产生而不是集中的数据处理仓库中生成的。
b.就是用网络边缘对数据进行分类,将部分数据放到边缘处理,减少网络延迟从而实现实时和更高效的数据处理,以达到对云计算的有力补充。
c.数据处理由网络中心下放到网络边缘的节点上。
举例:机场的监控摄像头,智能交通中的交通灯闪烁路灯自动点亮,酒店的消防设备报警系统,气象局对气象数据的采集装置。

4、作用:保留子程序的返回地址,保存溢出的局部变量,局部数组和结构体。
尽量减少递归的使用,在迭代次数不多的情况下10次左右用递归问题还不大,如果规模达到千次百次用递归,则对堆栈和内存的开销极大。

5、其实运行与PC机上的windows或linux系统也是有BSP的。只是PC机均采用统一的X86体系架构,这样一定操作系统(windows,linux…)的BSP相对x86架构是单一确定的,不需要做任何修改就可以很容易支持OS在x86上正常运行,所以在PC机上谈论BSP这个概念也没什么意义了。
而对嵌入式系统来说情况则完全不同,目前市场上多种结构的嵌入式CPU(RISC)并存(PPC,ARM,MIPS…),为了性能的需要,外围设备也会有不同的选择和定义。一个嵌入式操作系统针对不同的CPU,会有不同的BSP,即使同一种CPU,由于外设的一点差别(如外部扩展DRAM的大小,类型改变),BSP相应的部分也不一样。
所以根据硬件设计编写和修改BSP,保证系统正常的运行是非常重要的。

三、问答题

1、请写出嵌入式系统的定义和组成层次结构
2、给出基于云端的 IoT 解决方案(Azure IoT)
3、请画出 MVC 模式的组成层次结构,并对各层进行说明。并写出 MVC 的底线。
4、请简述任务间通信是怎么样的?画出进程内、进程间和机器间通信并分别说明。
答案
1、 嵌入式系统是以应用为核心,计算机为基础,软硬件可裁剪,满足实际应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
在这里插入图片描述
2、Azure IoT:
开箱即用;
按量收费、按需扩展;
全球就绪、超大规模;
全面安全和隐私保护
三个重心:
a.设备连接和管理 b.分析和业务运营洞察力 c.展现及业务链接
Azure IoT模式特点:支持千万量级设备、数据采集、命令控制、设备管理、支持HTTP、AMQP,扩展支持MQTT等协议。

3、
在这里插入图片描述
模型(Model) 业务逻辑层。用于封装业务逻辑和数据模型。
视图(View) 表示层。就是与用户实现交互的界面,通常实现数据的输入和输出功能。
控制器(controller) 控制层。起到控制整个业务流程的作用,实现View层跟Model层的协同工作。
底线:所有的请求、流程控制都是由控制器完成;视图部分不能有任何的业务逻辑。

4、
1) 进程内 :如一个进程内的两个模块。通常将命令直接映射成一个个API,采用普通的API 调用,协议设计直接简化成API 设计。(按一个程序开启的一个进程理解,API就是代码里的函数,这时函数接口组成包括函数名,参数列表和返回值)
2) 进程间 :两个进程间交互,如果有要求较高的性能,一般采用管道方式。 n 如果需要多进程交互,可采用消息队列方式,解耦发起方和处理方,并简化互相间的连接管理。对于文档风格的协议, 在简单的生产和消费的情况下,也可采用直接文件传递的方式,一方读,另一方写。
3) 机器间:进程分布在多个机器上,可以考虑:
文件:在一对一的生产-消费模式下,最“愚蠢”文件方式有时反而是最简单的高效。特别是异构系统间的一对一通信,可使用此方式,一次传递批量命令。
数据库:多个异构系统间的通信,也能通过中央数据库进行。但是,频繁的修改和读取同样数据会带来性能瓶颈和死锁。
基于消息:通过一个消息系统传送命令、结果和文档。能从空间和时间上解耦发起者和处理者,两者可以互相不知晓对方的存在,发送和处理消息可以异步进行。可以实现点对点或发布/订阅方式。
RPC:直接模仿本地调用,将一个方法调用转换成一个数据块,使用一种基于TCP/IP 的传输协议进程点对点传输。

四、案例分析题

1、 请阅读以下材料: 国内手机运行内存比国外大得多,你知道为什么吗?
国内手机的运行内存普遍比国外手机大,很多人都说是为了骗咱们老百姓的钱,其实 这并不是真相。真正的原因还得从谷歌 GMS 服务说起。 谷歌的 GMS 服务中有一个叫“即时通信和短信服务”,这可不单单是给你发短信这么简单。在国外,手机 APP 的消息推送并不是直接推送到手机,而是先把消息送到谷歌的服务器,再由谷歌的服务器发送到手机上。因此国外手机 APP 一旦后台运行,不超过一分钟内就会被手机“杀后台”释放内存。 而国内的手机厂商由于大家都知道的原因并不能使用谷歌的 GMS 服务,所以各厂商只能设定即使 APP 后台运行也占用着内存,时刻刷新看看是否有信息推送,比如微信、支付宝、微博等,因此手机对运行内存的需求比国外的手机高得多。 所以大伙可能会发现,苹果手机几年前的 iPhone 6 只有 2G 内存还不算很卡,同期国内的旗舰机 4G甚至6G内存已经卡得不行了,就是这个原因。
【问题 1】手机和服务器端之间是通过接口访问的,请问什么是接口?画出接口的 3 个层 面并解释。
答案:接口的本质是一个协议——双方交互的规范,是双方为完成某件事情而事先做的一系列约定。
在这里插入图片描述
接口约定分为三个层面:展现、业务和通信
n 业务层是核心,承上启下,需要考虑如何直观自然的表达业务
n 通信层是双方的沟通方式
n 展现层则重在考虑沟通双方的使用方式

【问题 2】根据以上描述,请你设计一套手机连接到服务器端的解决方案架构。要求:手机端需发送消息到服务器端;服务器端需要对手机端的进行实时推送。画图,并列出所采用的模块或技术。
在这里插入图片描述
课上讲解WebApi心跳模型与双向通信模型:【与上面那个图本质是一样的】
在这里插入图片描述
上图解析这个图要分为上下两部分看,上面是客户端为主动方的心跳模型,下面是服务端为发起方的双向通信模型。
服务端大多数情况是云端服务器,处于外网中,是固定的IP地址,客户端处于内网是不固定的IP地址,访问外网时要经过NAT路由转换,才能访问外网,反过来服务端访问客户端则会被防火墙挡住,这也就有引入消息队列这一解决方案。
A.心跳模型里客户端定时向服务端发送请求,期间是通过Http协议的post或get请求,这两者的区别是get的请求数据都在URL里,而post则在Response Body里面,get请求在传输时对外可见,post在传输过程中被加密不可见内部请求数据,更加安全,所以鉴于安全性考虑使用post更好,而WebApi接口的构造则是遵循着Restful标准,这样的接口才能被调用。服务端收到请求后,若有token则会验证,token可以理解为密钥,表面这个请求的身份,这样可以防止DDos洪水攻击,通过验证服务端才会给客户端发送对应数据。
B.客户端在消息队列模式中扮演消费者,服务端是生产者,客户端需要通过SDK订阅消息队列服务,当服务端下方消息时,会立即推送给客户端。这期间维持着一个TCP长连接,如果不用消息队列这TCP长连接相关代码就有得写了,这是一个很麻烦的事因为需要考虑各种策略,比如断网重连,出错重发这类的。

2、 消息队列服务
使用订阅——消费队列是目前一种非常流行的架构形式。信息发布者直接向队列发布,消费者首先订阅感兴趣的 Topic,当队列中有信息时就会自动推送给消费者。下面是阿里云 RocketMQ 队列的消费解决方案。
在这里插入图片描述
问题 1)在图 1 中,每一条消息都只会被分发到一台机器上处理,这是__集体____消费;在图 2 中,每条消息需要被集群下的每个消费者处理,这是___广播___消费。
【考试直接考了集体消费和广播消费图怎么画】
问题 2)消息队列出现后,使很多传统的应用可以架构在消息队列中。例如,最常见的一 个场景是用户注册后,需要发送注册邮件和短信通知,以告知用户注册成功。传统的做法有以下两种:
在这里插入图片描述
在这里插入图片描述
请使用消息队列改造以上业务,画出使用消息队列后的结构图,并说明采用这样结构的优点。
答案
在这里插入图片描述
优点:发送注册邮件和注册短信的服务组件之间解耦、可以进行异步读取消息队列缩短响应时间、提高效率,在用户请求量大的情况下还起到了削峰填谷,提高系统的吞吐量和处理消息的能力。

总结

考试的时候竟然看到旁边的有人作弊,老师考试前还郑重其事念了考前须知,你反手拿出一个小手机查资料,跟老师玩游击战,我也是醉了,既不尊重监考老师也不尊重一起考试的同学,没举报你是不想你没书读,在此祝你嵌入式软件开发这门考试年年作弊成功哈!
希望大家引以为戒,作弊在我看来真的是一件很可耻的事情,既然你都面对了考试就好好考好,你没准备好干脆弃考算了,也别考试作弊自欺欺人,反正作弊的都没有一个有好结果的。
希望读者能每门考试都认真对待,不辜负自己的努力,考出好成绩!

参考网站

嵌入式系统设计 (考试题+答案)
消息队列mq总结 干货带图解
必须转一个:为什么 Android 的机器主频和核心数比 iPhone 高,却没有更流畅?

猜你喜欢

转载自blog.csdn.net/weixin_43594279/article/details/118090096