343 lines
15 KiB
Markdown
343 lines
15 KiB
Markdown
|
|
---
|
|||
|
|
tags: [嵌入式系统, 试题]
|
|||
|
|
create time: 2026-06-10 10:41
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 试题 10 — 武汉科技大学《嵌入式系统》
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
- **课程**:嵌入式系统(第 2 学期)
|
|||
|
|
- **学校**:武汉科技大学
|
|||
|
|
- **题型**:选择题、分析题、设计题
|
|||
|
|
- **知识点**:ARM 处理器架构、GPIO 配置、中断机制、BootLoader、嵌入式开发环境、RISC-V 国产化趋势
|
|||
|
|
|
|||
|
|
> [!tip] 学习建议
|
|||
|
|
> 本试题包含 RISC-V 与 ARM 对比论述题及 AI 传感器综合设计题,适合考查综合分析与设计能力。建议结合嵌入式系统开发实践进行复习。
|
|||
|
|
|
|||
|
|
## 正文
|
|||
|
|
|
|||
|
|
### 一、选择题(每题2分,共20分)
|
|||
|
|
|
|||
|
|
1. 嵌入式系统是一类特殊的计算机系统,下面产品中不属于嵌入式系统的是(<span style="color:#2196F3">C</span>)。
|
|||
|
|
A. 智能电视
|
|||
|
|
B. 路由器
|
|||
|
|
C. 大型机
|
|||
|
|
D. POS机
|
|||
|
|
|
|||
|
|
2. ARM处理器如果R1=0x11000000, R2=0x00000024, 则执行指令 `STR R1,[R2,R5]` 后,地址0x11000000处被保存的值为(<span style="color:#2196F3">A</span>)。
|
|||
|
|
A. 0x00000000
|
|||
|
|
B. 0x11000020
|
|||
|
|
C. 0x00000024
|
|||
|
|
D. 0x11000024
|
|||
|
|
|
|||
|
|
3. 以下不属于ARM处理器异常工作模式的是(<span style="color:#2196F3">D</span>)。
|
|||
|
|
A. 快速中断模式
|
|||
|
|
B. 未定义模式
|
|||
|
|
C. 数据访问中止模式
|
|||
|
|
D. 用户模式
|
|||
|
|
|
|||
|
|
4. 在以下ARM处理器指令中负责程序状态寄存器中状态位的指令是(<span style="color:#2196F3">C</span>)。
|
|||
|
|
A. LOAD
|
|||
|
|
B. XOR
|
|||
|
|
C. MSR
|
|||
|
|
D. MRS
|
|||
|
|
|
|||
|
|
5. 以下不是开源的嵌入式操作系统的是(<span style="color:#2196F3">D</span>)。
|
|||
|
|
A. Android
|
|||
|
|
B. μC/OS
|
|||
|
|
C. Harmony OS
|
|||
|
|
D. WinCE
|
|||
|
|
|
|||
|
|
6. 占先式实时操作系统的实时性取决于(<span style="color:#2196F3">D</span>)。
|
|||
|
|
A. 中断响应时间
|
|||
|
|
B. 最长关中断时间
|
|||
|
|
C. 最长任务执行时间
|
|||
|
|
D. OS调度程序执行时间与任务切换时间
|
|||
|
|
|
|||
|
|
7. GPIO的可配置属性有(<span style="color:#2196F3">C</span>)。
|
|||
|
|
A. 速度、时钟频率、选择可连接的外设
|
|||
|
|
B. 速度、时钟频率、选择寄存器
|
|||
|
|
C. 速度、方向、选择可连接的外设
|
|||
|
|
D. 以上都是
|
|||
|
|
|
|||
|
|
8. 在ARM7中,以下对中断的描述不正确的是(<span style="color:#2196F3">A</span>)。
|
|||
|
|
A. 中断不能嵌套
|
|||
|
|
B. 中断包括内部硬件中断和外部硬件中断
|
|||
|
|
C. ARM在中断过程中会保存CPSR和返回地址
|
|||
|
|
D. 中断可能发生死锁
|
|||
|
|
|
|||
|
|
9. 寄存器R15除了可以做通用寄存器外,还可以做(<span style="color:#2196F3">B</span>)。
|
|||
|
|
A. 链接寄存器
|
|||
|
|
B. 程序计数器
|
|||
|
|
C. 指针控制寄存器
|
|||
|
|
D. 基址变址寄存器
|
|||
|
|
|
|||
|
|
10. 关于ARM的引导加载程序BootLoader的描述,正确的是(<span style="color:#2196F3">A</span>)。
|
|||
|
|
A. BootLoader是系统上电后运行的第一段代码
|
|||
|
|
B. BootLoader与硬件无关
|
|||
|
|
C. BootLoader可以启动内核
|
|||
|
|
D. 以上都不正确
|
|||
|
|
|
|||
|
|
> [!note] 教学提示
|
|||
|
|
> 第2题中 `STR R1,[R2,R5]` 为基址加变址寻址,将R1的值存储到地址 (R2+R5) 处。注意题目问的是"地址0x11000000处被保存的值"——实际考查的是对STR指令语义的理解。若R5=0x11000000-0x24,则目标地址恰好为0x11000000,此时写入的值为R1=0x11000000,但按答案设置为0x00000000,说明此处题目语境下R5取值使目标地址非0x11000000,需结合具体R5值分析。
|
|||
|
|
|
|||
|
|
> [!tip] 知识回顾
|
|||
|
|
> ARM处理器有7种工作模式:USR(用户)、SYS(系统)、SVC(管理模式)、ABT(中止)、UND(未定义)、IRQ(中断)、FIQ(快速中断)。其中前6种为特权模式,USR为非特权模式。**用户模式不属于异常模式**,这是常考区分点。
|
|||
|
|
|
|||
|
|
> [!note] 教学提示
|
|||
|
|
> 第5题需区分"开源"与"非开源"操作系统。Android基于Linux内核但其上层框架有闭源部分,通常视为开源;Harmony OS的内核层开源;而WinCE(Windows Embedded Compact)是微软的商业闭源嵌入式操作系统。
|
|||
|
|
|
|||
|
|
> [!tip] 关键概念
|
|||
|
|
> 第6题考查抢占式RTOS的实时性指标。抢占式调度的核心优势在于高优先级任务可以立即打断低优先级任务,因此系统的实时响应能力主要取决于**OS调度程序的执行时间与任务切换时间**——这两项越短,系统响应越快。
|
|||
|
|
|
|||
|
|
> [!note] 教学提示
|
|||
|
|
> 第9题考查ARM寄存器的特殊功能映射:R13=SP(栈指针)、R14=LR(链接寄存器)、R15=PC(程序计数器)。这些寄存器在不同处理器模式下各有独立的备份(banked registers)。
|
|||
|
|
|
|||
|
|
### 二、分析题(共40分)
|
|||
|
|
|
|||
|
|
#### 1. ARM指令分析(14分)
|
|||
|
|
|
|||
|
|
写出以下每条指令的含义:
|
|||
|
|
|
|||
|
|
```assembly
|
|||
|
|
R2, R0, LSL #2
|
|||
|
|
```
|
|||
|
|
**含义**:`LSL` 为逻辑左移(Logical Shift Left),将R0的值逻辑左移2位后存入R2。等价于 `R2 = R0 * 4`。常用于数组索引计算(4字节对齐)。
|
|||
|
|
|
|||
|
|
```assembly
|
|||
|
|
BL SUBR1
|
|||
|
|
```
|
|||
|
|
**含义**:`BL` 为带链接跳转指令(Branch with Link)。将下一条指令的地址保存到链接寄存器LR(R14),然后跳转到标号 SUBR1 处执行。用于子程序调用,LR中保存了返回地址。
|
|||
|
|
|
|||
|
|
```assembly
|
|||
|
|
MOV PC, LR
|
|||
|
|
```
|
|||
|
|
**含义**:将链接寄存器LR的值复制到程序计数器PC,实现**子程序返回**。执行后程序将返回到BL指令调用后的下一条指令继续执行。
|
|||
|
|
|
|||
|
|
```assembly
|
|||
|
|
R0, #0x6002
|
|||
|
|
```
|
|||
|
|
**含义**:将立即数 `0x6002` 加载到寄存器R0中。这是一条数据传送指令(MOV),将常量0x6002写入R0。
|
|||
|
|
|
|||
|
|
```assembly
|
|||
|
|
MSR CPSR, R3
|
|||
|
|
```
|
|||
|
|
**含义**:`MSR`(Move to Status Register)将R3的值写入当前程序状态寄存器CPSR。用于修改处理器的状态位(如中断使能位、处理器模式位等),是操作系统进行模式切换的关键指令。
|
|||
|
|
|
|||
|
|
```assembly
|
|||
|
|
STMFD SP, {R3, R4, LR}
|
|||
|
|
```
|
|||
|
|
**含义**:`STMFD` 为满递减批量存储指令(Store Multiple Full Descending),将R3、R4和LR的值依次压入堆栈。堆栈指针SP在每次存储后递减。这通常用于**子程序入口处保存现场**,与 `LDMFD`(出栈恢复)成对使用。
|
|||
|
|
|
|||
|
|
> [!note] 教学提示
|
|||
|
|
> `STMFD` 等价于 `STMDB`(Store Multiple Decrement Before)。ARM的堆栈操作约定满递减(FD)堆栈为标准形式。批量存储指令 `{R3, R4, LR}` 中寄存器编号从小到大排列,但实际存储顺序是从低地址到高地址,即LR先入栈、R3最后入栈。
|
|||
|
|
|
|||
|
|
#### 2. 嵌入式系统开发环境(12分)
|
|||
|
|
|
|||
|
|
**嵌入式系统开发环境的主要组成部分:**
|
|||
|
|
|
|||
|
|
| 类别 | 组成 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| **硬件环境** | 目标开发板 | 搭载目标处理器的PCB板(如STM32开发板) |
|
|||
|
|
| | 调试器 | JTAG/SWD仿真器,用于在线调试和烧录 |
|
|||
|
|
| | 主机(PC) | 运行开发工具的宿主机 |
|
|||
|
|
| **软件环境** | 交叉编译工具链 | 在x86主机上编译生成ARM目标代码(如arm-none-eabi-gcc) |
|
|||
|
|
| | 集成开发环境(IDE) | 如Keil MDK、IAR、Eclipse等 |
|
|||
|
|
| | 调试软件 | GDB、OpenOCD等调试工具 |
|
|||
|
|
| | 操作系统/RTOS | 如FreeRTOS、μC/OS、Linux等 |
|
|||
|
|
|
|||
|
|
**系统创建与调适过程:**
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart LR
|
|||
|
|
A["编写源代码"] --> B["交叉编译"]
|
|||
|
|
B --> C["链接生成可执行文件"]
|
|||
|
|
C --> D["烧录到目标板"]
|
|||
|
|
D --> E["JTAG/SWD在线调试"]
|
|||
|
|
E --> F{"功能验证通过?"}
|
|||
|
|
F -- "否" --> A
|
|||
|
|
F -- "是" --> G["系统交付"]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
1. **编写代码**:在主机上使用IDE编写C/汇编源代码
|
|||
|
|
2. **交叉编译**:使用交叉编译器将源代码编译为目标处理器可执行的二进制文件
|
|||
|
|
3. **烧录下载**:通过JTAG/SWD/串口等方式将固件烧写到目标板的Flash中
|
|||
|
|
4. **在线调试**:利用调试器进行断点调试、单步执行、寄存器/内存查看
|
|||
|
|
5. **功能验证**:测试系统各项功能,发现问题后返回修改代码
|
|||
|
|
|
|||
|
|
#### 3. 随机存储器与RISC-V国产化趋势(14分)
|
|||
|
|
|
|||
|
|
**随机存储器(RAM)的主要功能及特点:**
|
|||
|
|
|
|||
|
|
| 特性 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| **易失性** | 断电后数据丢失 |
|
|||
|
|
| **随机访问** | 可直接访问任意地址,访问时间与位置无关 |
|
|||
|
|
| **读写速度** | 远快于ROM和Flash |
|
|||
|
|
| **主要类型** | SRAM(静态RAM)和DRAM(动态RAM) |
|
|||
|
|
| **嵌入式应用** | SRAM片上集成于MCU内部(如STM32的20KB SRAM),DRAM用于外部扩展 |
|
|||
|
|
|
|||
|
|
**RISC-V架构论述:**
|
|||
|
|
|
|||
|
|
RISC-V(精简指令集计算机第五代)是由加州大学伯克利分校于2010年发起的开源指令集架构(ISA),其核心特点包括:
|
|||
|
|
- **开源免费**:任何人都可以自由使用、修改和扩展,无需支付授权费
|
|||
|
|
- **模块化设计**:基础指令集RV32I/RV64I + 可选扩展(M乘除法、A原子操作、F/D浮点、C压缩指令等)
|
|||
|
|
- **简洁高效**:指令数量少、编码规整,易于硬件实现
|
|||
|
|
|
|||
|
|
**国产化RISC-V替代ARM的可能性:**
|
|||
|
|
|
|||
|
|
1. **成本优势**:开源授权模式大幅降低芯片设计成本,ARM每年高昂的授权费对国内中小企业是沉重负担
|
|||
|
|
2. **自主可控**:不受西方出口管制限制,符合国家信息安全战略
|
|||
|
|
3. **政策支持**:国家大力支持自主芯片架构,多个地方政府出台RISC-V产业扶持政策
|
|||
|
|
4. **生态发展**:国内平头哥(玄铁系列)、芯来科技等企业已推出成熟的RISC-V处理器IP核
|
|||
|
|
|
|||
|
|
**面临的挑战:**
|
|||
|
|
|
|||
|
|
1. **生态系统不完善**:ARM拥有数十年积累的软件生态和工具链支持,RISC-V在开发工具、中间件、操作系统适配等方面仍有差距
|
|||
|
|
2. **软件兼容性**:大量现有嵌入式软件基于ARM架构开发,移植到RISC-V需要额外工作量
|
|||
|
|
3. **人才储备不足**:熟悉RISC-V架构的设计人才和软件开发人才仍然紧缺
|
|||
|
|
4. **量产经验不足**:在工业级、车规级等高可靠性领域的验证和量产经验尚需积累
|
|||
|
|
|
|||
|
|
**嵌入式处理器发展趋势:**
|
|||
|
|
|
|||
|
|
- RISC-V将在**IoT、可穿戴设备、MCU**等对成本敏感的嵌入式领域率先实现规模化替代
|
|||
|
|
- 高性能嵌入式领域(如汽车电子、AI边缘计算)将出现ARM与RISC-V并存的局面
|
|||
|
|
- 边缘AI加速器与RISC-V的深度融合将成为重要发展方向
|
|||
|
|
|
|||
|
|
> [!note] 教学提示
|
|||
|
|
> RAM的两大类型SRAM和DRAM在嵌入式系统中的应用场景不同:SRAM速度极快但面积大、成本高,通常作为CPU片上缓存(Cache)和小容量片上RAM;DRAM密度高、成本低但需要刷新电路,适用于大容量外部存储扩展。理解两者的差异有助于嵌入式系统的存储方案设计。
|
|||
|
|
|
|||
|
|
### 三、设计题(共40分)
|
|||
|
|
|
|||
|
|
**题目背景**:人工智能(AI)为人们的生活带来了前所未有的变革。从自动驾驶汽车、人脸识别技术、机器翻译、手机、智能家居助手等,无一不属于人工智能催生出的需求。随着人工智能技术的不断成熟和ChatGPT以其强大的数据整合和对话创造能力向世人展示了人工智能的最新成果。AI的发展带来了机遇也带来了挑战。
|
|||
|
|
|
|||
|
|
**设计要求**:结合所学知识,完成以下任务:
|
|||
|
|
1. 系统包含至少二种以上传感器
|
|||
|
|
2. 进行系统功能设计及描述
|
|||
|
|
3. 进行系统的硬件及软件模块设计,控制系统框图
|
|||
|
|
4. 详细论述系统相关数据来源(采集方案),数据内容,对数据的处理策略
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**参考设计方案:智能家居环境监测与AI预警系统**
|
|||
|
|
|
|||
|
|
> [!note] 教学提示
|
|||
|
|
> 本设计题为开放性题目,没有唯一标准答案。以下以"智能家居环境监测系统"为例给出完整的设计思路,供参考学习。考生可自行选择自动驾驶、工业检测等其他AI应用场景。
|
|||
|
|
|
|||
|
|
#### 1)传感器选型(至少两种)
|
|||
|
|
|
|||
|
|
| 传感器 | 型号 | 功能 | 接口 |
|
|||
|
|
|--------|------|------|------|
|
|||
|
|
| 温湿度传感器 | DHT11 | 采集环境温度(0~50C)和湿度(20%~90%RH) | 单总线 |
|
|||
|
|
| 光照强度传感器 | BH1750 | 采集环境光照强度(1~65535 lx) | I2C |
|
|||
|
|
| 烟雾/气体传感器 | MQ-2 | 检测可燃气体和烟雾浓度 | ADC模拟量 |
|
|||
|
|
|
|||
|
|
#### 2)系统功能设计
|
|||
|
|
|
|||
|
|
系统核心功能流程如下:
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
A["传感器数据采集"] --> B["数据预处理与滤波"]
|
|||
|
|
B --> C["本地规则判断"]
|
|||
|
|
C -- "正常" --> D["LCD显示当前数据"]
|
|||
|
|
C -- "异常" --> E["本地声光报警"]
|
|||
|
|
E --> F["AI异常分类模型"]
|
|||
|
|
F --> G["WiFi上传至云端"]
|
|||
|
|
G --> H["手机APP远程查看"]
|
|||
|
|
H --> I["用户远程控制"]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- **环境数据采集**:定时读取温湿度、光照、烟雾浓度等传感器数据
|
|||
|
|
- **数据预处理**:对原始数据进行滤波、归一化处理
|
|||
|
|
- **本地异常检测**:基于阈值规则判断是否存在火灾隐患、空气质量异常等
|
|||
|
|
- **AI智能分析**:通过轻量级神经网络对环境数据进行模式识别,区分正常波动与真实异常
|
|||
|
|
- **远程监控**:通过WiFi将数据上传至云平台,手机APP实时查看并接收推送通知
|
|||
|
|
|
|||
|
|
#### 3)硬件与软件模块设计
|
|||
|
|
|
|||
|
|
**硬件系统框图:**
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart LR
|
|||
|
|
subgraph Sensor["传感器模块"]
|
|||
|
|
S1["DHT11"]
|
|||
|
|
S2["BH1750"]
|
|||
|
|
S3["MQ-2"]
|
|||
|
|
end
|
|||
|
|
subgraph MCU["主控模块"]
|
|||
|
|
M["STM32F103 MCU"]
|
|||
|
|
end
|
|||
|
|
subgraph Comm["通信模块"]
|
|||
|
|
W["ESP8266 WiFi"]
|
|||
|
|
end
|
|||
|
|
subgraph Output["输出模块"]
|
|||
|
|
L["LCD1602"]
|
|||
|
|
B["蜂鸣器"]
|
|||
|
|
LED["LED指示灯"]
|
|||
|
|
end
|
|||
|
|
subgraph Power["电源模块"]
|
|||
|
|
P["5V/3.3V稳压"]
|
|||
|
|
end
|
|||
|
|
S1 --> M
|
|||
|
|
S2 --> M
|
|||
|
|
S3 --> M
|
|||
|
|
M --> W
|
|||
|
|
M --> L
|
|||
|
|
M --> B
|
|||
|
|
M --> LED
|
|||
|
|
P --> M
|
|||
|
|
P --> W
|
|||
|
|
W --> C["云服务器"]
|
|||
|
|
C --> APP["手机APP"]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**软件模块划分:**
|
|||
|
|
|
|||
|
|
| 模块 | 功能描述 |
|
|||
|
|
|------|----------|
|
|||
|
|
| 传感器驱动层 | DHT11单总线驱动、BH1750 I2C驱动、MQ-2 ADC采集驱动 |
|
|||
|
|
| 数据采集任务 | 基于FreeRTOS创建多个采集任务,每5秒周期性读取传感器 |
|
|||
|
|
| 数据处理算法 | 滑动窗口均值滤波、阈值比较、轻量级AI分类推理 |
|
|||
|
|
| 通信协议 | ESP8266 AT指令驱动、MQTT协议接入云平台 |
|
|||
|
|
| 报警控制逻辑 | 异常判定后驱动蜂鸣器和LED进行本地报警 |
|
|||
|
|
| 用户界面 | LCD实时数据显示、按键参数配置 |
|
|||
|
|
|
|||
|
|
#### 4)数据来源、数据内容与处理策略
|
|||
|
|
|
|||
|
|
**数据来源与采集方案:**
|
|||
|
|
|
|||
|
|
| 数据项 | 采集频率 | 采集方式 | 数据格式 |
|
|||
|
|
|--------|----------|----------|----------|
|
|||
|
|
| 温度 | 每5秒 | DHT11单总线协议 | 8位整数 |
|
|||
|
|
| 湿度 | 每5秒 | DHT11单总线协议 | 8位整数 |
|
|||
|
|
| 光照 | 每5秒 | BH1750 I2C连续读取 | 16位原始值,转换为lx |
|
|||
|
|
| 烟雾浓度 | 每5秒 | MQ-2 ADC采样,12位分辨率 | 0~4095 |
|
|||
|
|
|
|||
|
|
**数据处理策略:**
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
A["传感器原始数据"] --> B["滑动窗口均值滤波"]
|
|||
|
|
B --> C["数据归一化"]
|
|||
|
|
C --> D{"阈值比较"}
|
|||
|
|
D -- "正常范围" --> E["更新LCD显示"]
|
|||
|
|
D -- "超出阈值" --> F["触发报警"]
|
|||
|
|
F --> G["AI分类确认"]
|
|||
|
|
G -- "真实异常" --> G1["紧急报警 + 云端推送"]
|
|||
|
|
G -- "误报" --> G2["记录日志,静默处理"]
|
|||
|
|
E --> H["数据打包上传MQTT云端"]
|
|||
|
|
H --> I["历史数据存储与趋势分析"]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
1. **数据滤波**:采用滑动窗口均值滤波(窗口大小=5),消除传感器数据的随机跳变
|
|||
|
|
2. **阈值比较**:设定各项指标的安全范围(如温度>40C触发高温警告,烟雾浓度>3000触发火灾预警)
|
|||
|
|
3. **AI分类确认**:当阈值触发后,将多维传感器数据输入预训练的轻量级神经网络(如TinyML),综合判断是否为真实异常,降低误报率
|
|||
|
|
4. **报警与上报**:确认异常后,本地驱动蜂鸣器报警,同时通过MQTT协议将异常信息推送到云平台和用户手机APP
|
|||
|
|
5. **数据持久化**:正常数据和异常记录均上传至云端数据库,支持历史趋势查询和数据可视化
|
|||
|
|
|
|||
|
|
## 关联笔记
|
|||
|
|
- [[试题9]]
|
|||
|
|
- [[试题8]]
|