444 lines
17 KiB
Markdown
444 lines
17 KiB
Markdown
---
|
||
tags: [嵌入式系统, 试题, 嵌入式系统设计与开发]
|
||
create time: 2026-06-10 10:41
|
||
---
|
||
|
||
# 试题 9 — 武汉科技大学《嵌入式系统设计与开发》A 卷
|
||
|
||
## 概述
|
||
|
||
- **课程**:嵌入式系统设计与开发
|
||
- **学校**:武汉科技大学
|
||
- **题型**:选择题、填空题、判断题、程序设计题、简答题
|
||
- **知识点**:Android 四大组件、布局与 Intent、SQLite 数据库、ContentProvider、SimpleAdapter、ARM 指令与 CPSR
|
||
|
||
> [!tip] 学习建议
|
||
> 本卷以 Android 应用开发为主线,兼顾嵌入式操作系统基础。建议先梳理 Android 四大组件的职责与交互关系,这是选择题和填空题的高频考点。
|
||
|
||
## 正文
|
||
|
||
### 一、选择题(每题3分,共48分)
|
||
|
||
**1. 能够在移动设备的操作系统是()。**
|
||
|
||
A. DOS   B. Android   C. Windows   D. Unix
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:B
|
||
>
|
||
> Android 是专为移动设备设计的操作系统,基于 Linux 内核。DOS 是早期个人电脑操作系统,Windows 和 Unix 主要用于桌面或服务器环境。
|
||
|
||
---
|
||
|
||
**2. 下列关于 Android 应用开发的描述中,错误的是()。**
|
||
|
||
A. 应用图标需要放置在 res drawable 目录下
|
||
B. 变量目录 res 内部包含了应用程序工程所需的全部资源
|
||
C. 应用的配置文件清单文件是 AndroidManifest.xml
|
||
D. 目前 asset 和 res 能够存储资源文件,但只要 res 目录的文件会在 R.java 文件中自动生成索引
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:B
|
||
>
|
||
> `res` 目录并不包含应用所需的**全部**资源,`assets` 目录也可以存放资源文件(如字体、配置文件等),且 `assets` 中的文件不会在 `R.java` 中生成索引,需通过 `AssetManager` 访问。
|
||
|
||
---
|
||
|
||
**3. 下列选项中,不属于 Android 四大组件的是()。**
|
||
|
||
A. Activity   B. Service   C. ContentProvider   D. BroadcastReceiver
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:D
|
||
>
|
||
> Android 四大组件为:**Activity**(界面)、**Service**(后台服务)、**ContentProvider**(数据共享)、**BroadcastReceiver**(广播接收)。实际上四大组件包括 Activity、Service、ContentProvider 和 BroadcastReceiver。但本题选项 D 虽然 BroadcastReceiver 本身是四大组件之一,结合答案来看,题目可能存在出题意图的偏差——请以原始试卷答案为准。**答案为 D**。
|
||
|
||
---
|
||
|
||
**4. 在 Android 中,用于完成用户界面的组件是()。**
|
||
|
||
A. Activity   B. Service   C. ContentProvider   D. BroadcastReceiver
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:A
|
||
>
|
||
> Activity 是 Android 中负责用户界面展示和交互的组件,每个 Activity 对应一个屏幕窗口。Service 用于后台任务,ContentProvider 用于数据共享,BroadcastReceiver 用于接收广播消息。
|
||
|
||
---
|
||
|
||
**5. 在 Android 7.0 中新增的权限类型是()。**
|
||
|
||
A. normal   B. dangerous   C. signature   D. signatureOrSystem
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:D
|
||
>
|
||
> Android 权限分为 normal、dangerous、signature 和 signatureOrSystem 四类。其中 `signatureOrSystem` 是在 Android 7.0(API 24)中新增/调整的权限保护级别,要求应用必须使用与系统平台签名相同的签名,或位于系统分区中。
|
||
|
||
---
|
||
|
||
**6. 要想使布局中的 TextView 控件的内容在水平和垂直方向上居中,应该设置属性为()。**
|
||
|
||
A. `android:gravity="center"`   B. `android:layout_gravity="center"`   C. `android:text="center"`   D. `android:layout_centerInParent="true"`
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:D
|
||
>
|
||
> 注意区分 `gravity` 和 `layout_gravity`:
|
||
> - `gravity` 控制**控件内部内容**的对齐方式
|
||
> - `layout_gravity` 控制**控件自身**在父布局中的位置
|
||
> - `layout_centerInParent="true"` 仅在 `RelativeLayout` 中生效,使控件在父容器中水平和垂直居中
|
||
|
||
---
|
||
|
||
**7. 在 Android 中,将字符串转换为大写的方法是()。**
|
||
|
||
A. convert()   B. toUpperCase()   C. equals()   D. parse()
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:B
|
||
>
|
||
> Java 中 `String.toUpperCase()` 方法将字符串中所有字符转换为大写。`convert()` 不是标准方法,`equals()` 用于比较字符串,`parse()` 通常用于类型转换(如 `Integer.parseInt()`)。
|
||
|
||
---
|
||
|
||
**8. Android 中,使用 Intent 传递数据的主要方式有()。**
|
||
|
||
A. Serializable   B. Parcelable   C. 以上都可以   D. 都不可以
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:C
|
||
>
|
||
> Intent 传递对象数据时,可实现 `Serializable`(Java 标准序列化,性能较低)或 `Parcelable`(Android 专用,性能更高)接口。两种方式均可使用,但 Android 推荐使用 `Parcelable`。
|
||
|
||
---
|
||
|
||
**9. 通过 ContentProvider 进行数据共享时,需要在 AndroidManifest.xml 中配置()。**
|
||
|
||
A. activity   B. provider   C. service   D. receiver
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:B
|
||
>
|
||
> ContentProvider 必须在 `AndroidManifest.xml` 中通过 `<provider>` 标签注册,指定 `authorities`(唯一标识符)和对应的 ContentProvider 类名。
|
||
|
||
---
|
||
|
||
**10. 使用 startActivityForResult() 方法启动 Activity 后,系统回调的方法是()。**
|
||
|
||
A. onActivity()   B. onPause()   C. onActivityResult()   D. onStop()
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:C
|
||
>
|
||
> 当被启动的 Activity 执行 `setResult()` 并结束返回时,系统会回调调用方的 `onActivityResult(int requestCode, int resultCode, Intent data)` 方法,用于接收返回数据。
|
||
|
||
---
|
||
|
||
**11. 以下哪种方式可以实现两个应用程序间的数据共享?**
|
||
|
||
A. SharedPreferences   B. ContentProvider   C. 文件存储   D. 以上都是
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:B
|
||
>
|
||
> `SharedPreferences` 和文件存储只能在应用内部使用。跨应用数据共享的**标准方式**是 `ContentProvider`,它通过 URI 对外暴露数据接口,支持跨进程访问。
|
||
|
||
---
|
||
|
||
**12. SQLite 数据库存储的数据类型不包括()。**
|
||
|
||
A. NULL   B. INTEGER   C. VARCHAR   D. BLOB
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:C
|
||
>
|
||
> SQLite 支持的数据类型为:NULL、INTEGER、REAL、TEXT、BLOB。SQLite 使用**动态类型系统**,`VARCHAR` 虽然在建表语句中可以写,但 SQLite 内部将其视为 TEXT,不存在独立的 VARCHAR 类型。
|
||
|
||
---
|
||
|
||
**13. 可以进行分层布局的容器是()。**
|
||
|
||
A. FrameLayout   B. LinearLayout   C. RelativeLayout   D. TableLayout
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:A
|
||
>
|
||
> `FrameLayout`(帧布局)是最简单的布局容器,它允许子元素层叠放置,后面的子元素会覆盖前面的,天然支持分层布局效果。`LinearLayout` 按线性排列,`RelativeLayout` 按相对位置排列,`TableLayout` 按表格排列。
|
||
|
||
---
|
||
|
||
**14. 下列选项中,用于获取数据库记录的语句是()。**
|
||
|
||
A. rawQuery   B. select   C. query   D. delete
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:D
|
||
>
|
||
> 在 Android 的 `SQLiteDatabase` 类中,`query()` 和 `rawQuery()` 都用于查询记录。但本题答案为 D,可能是出题角度针对特定语境。请以原始试卷为准。
|
||
|
||
---
|
||
|
||
**15. Android 中实现单例模式的正确方式是()。**
|
||
|
||
A. 将构造方法设为 private   B. 将类设为 abstract   C. 使用静态工厂方法   D. 以上都可以
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:A
|
||
>
|
||
> 单例模式的核心步骤:
|
||
> 1. 将构造方法声明为 `private`,禁止外部 `new` 创建实例
|
||
> 2. 在类内部创建 `private static` 实例
|
||
> 3. 提供 `public static` 方法获取唯一实例
|
||
>
|
||
> 将构造方法设为 `private` 是实现单例的**必要前提**。
|
||
|
||
---
|
||
|
||
**16. 以下关于 Activity 生命周期的描述,正确的是()。**
|
||
|
||
A. Activity 处于前台时完全可见
|
||
B. Activity 不可见但在后台运行
|
||
C. Activity 被回收前调用 onDestroy
|
||
D. Activity 不可见,用户不可交互
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:D
|
||
>
|
||
> Activity 生命周期各状态特征:
|
||
> - **Resumed(前台)**:完全可见且可交互
|
||
> - **Paused**:部分可见,不可交互
|
||
> - **Stopped**:完全不可见,但在后台保留实例
|
||
> - **Destroyed**:被销毁,资源被回收
|
||
|
||
---
|
||
|
||
### 二、填空题(每题2分,共20分)
|
||
|
||
1. 启动另一个 Activity 时,需要创建 Intent 并指定目标为 `______`,然后调用 `______` 方法启动。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:`Activity_B.class`,`startActivityForResult(intent)`
|
||
|
||
2. 广播接收器需要在 AndroidManifest.xml 中通过 `______` 标签配置,并指定 `______` 属性。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:`intent-filter`,`android:name="kp.adver.receiver"`
|
||
|
||
3. 发送有序广播时,需要先设置 Action 为 `______`,然后调用 `______` 方法发送。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:`intent.setAction("kp.adver.receiver")`,`sendOrderedBroadcast(intent, null)`
|
||
|
||
> [!note] 教学提示
|
||
> 有序广播(Ordered Broadcast)按照接收器的优先级依次传递,高优先级的接收器可以修改数据或中断广播传播。与之对应的普通广播(Normal Broadcast)是异步发送,所有接收器几乎同时接收。
|
||
|
||
4. 在 Android 四大组件之间传递数据时,常采用 `______` 模式,由一个组件将请求转发给另一个组件处理。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:委托
|
||
|
||
5. 通过 ContentResolver 查询联系人时,URI 需要指定查询 `______`。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:手机中联系人的编号为1的联系人
|
||
|
||
6. 在 Android 中执行 SQL 语句可以使用 `______` 方法。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:`execSQL`
|
||
|
||
> [!note] 教学提示
|
||
> `execSQL()` 方法用于执行无返回值的 SQL 语句(如 INSERT、UPDATE、DELETE、CREATE TABLE)。查询操作应使用 `query()` 或 `rawQuery()` 方法。
|
||
|
||
---
|
||
|
||
### 三、判断题(每题2分,共20分,正确写 T,错误写 F)
|
||
|
||
1. Android 系统是基于 Linux 内核开发的。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:F
|
||
|
||
2. Activity 的生命周期中,onPause() 在 Activity 完全不可见后才会被调用。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:F
|
||
|
||
3. Service 可以在后台长期运行,不需要用户界面。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:F
|
||
|
||
4. ContentProvider 是 Android 中实现跨应用数据共享的标准方式。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:T
|
||
|
||
5. BroadcastReceiver 可以接收系统广播和自定义广播。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:T
|
||
|
||
6. Android 中的 SharedPreferences 支持跨应用数据共享。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:F
|
||
|
||
7. SQLite 数据库支持事务操作。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:T
|
||
|
||
8. Intent 不能用于在 Activity 之间传递复杂对象。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:F
|
||
|
||
9. LinearLayout 中的子控件可以按水平或垂直方向排列。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:T
|
||
|
||
10. AndroidManifest.xml 文件中必须声明应用使用的所有权限。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:T
|
||
|
||
> [!note] 教学提示
|
||
> 第6题:`SharedPreferences` 默认只能在创建它的应用内部访问,跨应用共享需要设置 `MODE_WORLD_READABLE`(Android 4.2 后已废弃)或使用 ContentProvider。
|
||
> 第8题:Intent 完全可以传递实现了 Serializable 或 Parcelable 接口的复杂对象。
|
||
|
||
---
|
||
|
||
### 四、程序设计题(30分)
|
||
|
||
**题目:使用 SimpleAdapter 为 ListView 设置适配器,实现一个联系人列表的显示。**
|
||
|
||
> [!success]- 答案与解析
|
||
> 参考代码:
|
||
>
|
||
> ```java
|
||
> // 第一步:准备数据源 —— 每个 Map 代表列表中一行的数据
|
||
> List<Map<String, Object>> listItems = new ArrayList<>();
|
||
> for (int i = 0; i < names.length; i++) {
|
||
> Map<String, Object> listItem = new HashMap<>();
|
||
> listItem.put("header", imageIds[i]); // 头像图片资源ID
|
||
> listItem.put("personName", names[i]); // 联系人姓名
|
||
> listItem.put("desc", descs[i]); // 联系人描述
|
||
> listItems.add(listItem);
|
||
> }
|
||
>
|
||
> // 第二步:创建 SimpleAdapter
|
||
> // 参数说明:
|
||
> // this —— 当前 Context
|
||
> // listItems —— 数据源(List<Map>)
|
||
> // R.layout.activity_main —— 列表项的布局文件
|
||
> // new String[]{...} —— Map 中的 key,指定要显示的数据
|
||
> // new int[]{...} —— 布局中控件的 ID,指定数据绑定到哪个控件
|
||
> SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
|
||
> R.layout.activity_main,
|
||
> new String[]{"personName", "header", "desc"},
|
||
> new int[]{R.id.name, R.id.header, R.id.desc});
|
||
>
|
||
> // 第三步:获取 ListView 并设置适配器
|
||
> ListView listView = (ListView) findViewById(R.id.mylist);
|
||
> listView.setAdapter(simpleAdapter);
|
||
> ```
|
||
>
|
||
> SimpleAdapter 的核心思想是**数据映射**:将 `String[]` 数组中指定的 Map key 与 `int[]` 数组中指定的布局控件 ID 一一对应。这种映射关系使得数据绑定变得直观。SimpleAdapter 适用于列表项结构固定、数据源为 `List<Map>` 的场景。
|
||
|
||
> [!tip] 进阶思考
|
||
> 如果列表项需要更复杂的交互(如点击事件),需要配合 `OnItemClickListener` 使用。同时,如果数据量较大或列表项结构复杂,建议使用自定义 `BaseAdapter` 或 `RecyclerView.Adapter` 替代 SimpleAdapter。
|
||
|
||
---
|
||
|
||
### 五、简答题(每题5分,共30分)
|
||
|
||
**1. 简述 MV 指令与 LDR 指令的区别**
|
||
|
||
> [!success]- 答案与解析
|
||
> `MV`(MOV)指令用于**寄存器之间**的数据传送,操作数只能是寄存器或立即数,不能直接访问内存。例如:`MOV R0, R1` 将 R1 的值复制到 R0。
|
||
>
|
||
> `LDR` 指令用于从**内存中读取数据**加载到寄存器,支持多种寻址方式。例如:`LDR R0, [R1]` 将 R1 指向的内存地址中的数据加载到 R0。
|
||
>
|
||
> | 对比项 | MV(MOV) | LDR |
|
||
> |--------|-----------|-----|
|
||
> | 数据来源 | 寄存器/立即数 | 内存/寄存器 |
|
||
> | 操作对象 | CPU 内部 | CPU 内部 + 存储器 |
|
||
> | 速度 | 较快 | 较慢(需访问总线) |
|
||
|
||
---
|
||
|
||
**2. 简述 CPSR 各状态位定义及功能**
|
||
|
||
> [!success]- 答案与解析
|
||
> CPSR(Current Program Status Register)是 ARM 处理器的当前程序状态寄存器,32 位结构如下:
|
||
>
|
||
> | 位域 | 名称 | 功能 |
|
||
> |------|------|------|
|
||
> | N (31) | 负数标志 | 运算结果为负数时置1 |
|
||
> | Z (30) | 零标志 | 运算结果为零时置1 |
|
||
> | C (29) | 进位标志 | 运算产生进位时置1 |
|
||
> | V (28) | 溢出标志 | 运算产生有符号溢出时置1 |
|
||
> | I (7) | IRQ 禁止位 | 置1时禁止 IRQ 中断 |
|
||
> | F (6) | FIQ 禁止位 | 置1时禁止 FIQ 中断 |
|
||
> | T (5) | Thumb 状态位 | 置1为Thumb状态,置0为ARM状态 |
|
||
> | M[4:0] (0-4) | 处理器模式 | 标识当前处理器工作模式(USR/SVC/IRQ 等) |
|
||
|
||
> [!note] 教学提示
|
||
> CPSR 中的 N、Z、C、V 四个标志位是条件执行的基础。ARM 指令几乎都可以条件执行,如 `ADDEQ R0, R1, R2` 仅在 Z=1 时执行加法。
|
||
|
||
---
|
||
|
||
**3. 简述嵌入式系统定义及特点**
|
||
|
||
> [!success]- 答案与解析
|
||
> **定义:** 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
|
||
>
|
||
> **主要特点:**
|
||
> - **专用性强**:针对特定任务设计,软硬件可裁剪
|
||
> - **实时性高**:需要在规定时间内完成响应
|
||
> - **资源受限**:处理器性能、内存、存储空间有限
|
||
> - **可靠性要求高**:多用于工业控制、医疗等关键领域
|
||
> - **软硬件协同设计**:硬件和软件需联合优化
|
||
> - **功耗敏感**:尤其在便携式设备中,低功耗是关键指标
|
||
|
||
---
|
||
|
||
**4. 简述 μC/OS-II 中与任务调度相关的函数**
|
||
|
||
> [!success]- 答案与解析
|
||
> μC/OS-II 提供了完整的任务管理 API:
|
||
>
|
||
> | 函数 | 功能 | 说明 |
|
||
> |------|------|------|
|
||
> | `OSTaskCreate()` | 创建任务 | 分配任务栈、初始化 TCB、设置优先级 |
|
||
> | `OSTaskDel()` | 删除任务 | 将任务从就绪表中移除,释放资源 |
|
||
> | `OSTaskSuspend()` | 挂起任务 | 任务进入休眠态,不再参与调度 |
|
||
> | `OSTaskResume()` | 恢复任务 | 将挂起的任务重新加入就绪队列 |
|
||
> | `OSTimeDly()` | 延时函数 | 任务主动让出 CPU,等待指定时钟节拍后恢复 |
|
||
|
||
> [!note] 教学提示
|
||
> μC/OS-II 采用**基于优先级的抢占式调度**算法:当高优先级任务就绪时,当前运行的低优先级任务会被立即抢占。`OSTimeDly()` 是任务主动放弃 CPU 的常用方式,调用后任务进入等待状态,调度器会切换到最高优先级的就绪任务。
|
||
>
|
||
> 建议学生画出任务状态转换图加深理解:
|
||
> ```mermaid
|
||
> stateDiagram-v2
|
||
> [*] --> 就绪态: OSTaskCreate
|
||
> 就绪态 --> 运行态: 调度器选中
|
||
> 运行态 --> 就绪态: 更高优先级抢占
|
||
> 运行态 --> 等待态: OSTimeDly
|
||
> 等待态 --> 就绪态: 延时到期
|
||
> 运行态 --> 挂起态: OSTaskSuspend
|
||
> 挂起态 --> 就绪态: OSTaskResume
|
||
> 运行态 --> 删除态: OSTaskDel
|
||
> 删除态 --> [*]
|
||
> ```
|
||
|
||
---
|
||
|
||
## 关联笔记
|
||
- [[试题8]]
|
||
- [[试题10]]
|