前言
第1章 绪论 1
1.1 嵌入式实时操作系统概要 1
1.2 嵌入式实时操作系统 2
1.2.1 体系结构 3
1.2.2 功能及特点 5
1.2.3 分类介绍 7
1.3 嵌入式系统实时性的概念 9
1.4 约束条件 11
1.4.1 时间约束 11
1.4.2 优先约束 12
1.4.3 资源约束 13
1.5 搭建开发环境 14
1.5.1 CCS 6.0的安装 14
1.5.2 利用CCS 6.0新建工程 18
本章小结 21
练习与思考题 21
第2章 嵌入式硬件系统 22
2.1 嵌入式系统的硬件构成 22
2.2 嵌入式微处理器概述 23
2.2.1 嵌入式微处理器的存储体系结构 23
2.2.2 嵌入式微处理器的指令集 24
2.2.3 主流的嵌入式微处理器 25
2.3 总线 26
2.4 存储器 28
2.5 输入/输出接口和设备 28
2.6 ARM系列 28
2.6.1 ARM 指令集体系结构的演变29
2.6.2 ARM产品系列 33
2.7 ARM Cortex-M4系列处理器 41
2.7.1 ARM Cortex-M4处理器的特点 41
2.7.2 Cortex-M4处理器的结构 42
2.7.3 Cortex-M4的操作模式和特权级别 46
2.7.4 Cortex-M4的寄存器组 47
2.7.5 Cortex-M4的异常处理 51
2.7.6 Cortex-M4的存储器映射 55
2.8 TM4C123GH6PM微控制器 57
2.8.1 TM4C123GH6PM微控制器的电气特性与封装 57
2.8.2 TM4C123GH6PM微控制器的特性 58
2.8.3 TM4C123GH6PM微控制器的结构 59
2.9 TM4C123GH6PM实验板卡 61
2.10 RGB LED点亮实验 65
2.10.1 建立新的CCS工程 65
2.10.2 源代码解析 70
本章小结 72
练习与思考题 72
第3章 嵌入式实时内核 73
3.1 内核概要 73
3.1.1 μC/OS-Ⅱ的内核 73
3.1.2 调度算法 74
3.1.3 不可剥夺型内核 74
3.1.4 可剥夺型内核 75
3.1.5 数据类型的重定义与宏定义 76
3.2 内核功能 77
3.2.1 任务管理 77
3.2.2 同步与通信管理 78
3.2.3 中断管理 81
3.2.4 时间管理 82
3.2.5 对共享资源的互斥管理 83
3.2.6 内存管理 84
3.2.7 I/O管理 85
3.2.8 出错管理 86
3.2.9 用户扩展管理 86
3.2.10 电源管理 87
3.3 内核性能测试实例 87
3.3.1 概述 87
3.3.2 中断时序图 88
3.3.3 中断延迟时间 89
3.3.4 内核最大关中断时间 90
3.3.5 中断响应时间 92
3.3.6 中断恢复时间 95
3.3.7 非屏蔽中断 97
3.3.8 中断处理时间 98
3.3.9 任务切换时间 98
3.3.10 任务响应时间 103
3.3.11 系统调用的执行时间 103
3.3.12 有关时间确定性的测试 104
3.3.13 嵌入式实时内核的存储开销 105
本章小结 105
练习与思考题 106
第4章 任务管理的数据结构 107
4.1 任务及其存储结构 107
4.2 任务状态 108
4.3 任务生成代码实例 109
4.4 任务的优先级 111
4.5 系统任务 111
4.6 任务堆栈 115
4.6.1 任务堆栈的创建 115
4.6.2 任务堆栈的增长方向 115
4.6.3 任务堆栈的初始化 116
4.7 任务控制块 116
4.7.1 任务控制块的结构 117
4.7.2 任务控制块链表 119
4.7.3 任务控制块的初始化 121
4.8 任务就绪表 123
4.8.1 任务就绪表的结构 123
4.8.2 任务就绪表的操作 126
4.9 临界段 131
本章小结 132
练习与思考题 132
第5章 任务管理 133
5.1 创建任务 133
5.1.1 用OSTaskCreate创建任务 133
5.1.2 用OSTaskCreateExt创建任务 135
5.2 删除任务 137
5.3 请求删除任务 143
5.4 挂起和恢复任务 144
5.4.1 任务挂起 145
5.4.2 任务恢复 146
5.5 任务优先级别的修改 148
5.6 任务TCB信息的获取 151
5.7 任务堆栈检查 152
5.8 任务调度 154
5.8.1 μC/OS-Ⅱ的调度算法 154
5.8.2 μC/OS-Ⅱ的任务级调度 154
5.8.3 任务级任务切换函数OS_TASK_SW( ) 157
5.9 μC/OS-Ⅱ的初始化和多任务的启动 161
5.9.1 μC/OS-Ⅱ的初始化 161
5.9.2 μC/OS-Ⅱ的多任务启动 167
5.10 任务级调度实例 168
5.10.1 程序功能说明 168
5.10.2 程序实现及源代码解析 169
5.10.3 CCS工程导入 172
本章小结 173
练习与思考题 173
第6章 中断与时钟 174
6.1 μC/OS-Ⅱ的中断管理 174
6.1.1 μC/OS-Ⅱ的中断管理过程 174
6.1.2 进入中断处理函数 175
6.1.3 退出中断处理函数 176
6.1.4 中断级任务切换函数 177
6.2 μC/OS-Ⅱ的时钟 178
6.2.1 系统时钟中断服务程序 178
6.2.2 时钟节拍服务函数 179
6.3 μC/OS-Ⅱ的时间管理 181
6.3.1 任务延时函数 182
6.3.2 按时分秒延时函数 182
6.3.3 取消任务的延时函数 184
6.3.4 获取系统时间函数 185
6.3.5 设置系统时间函数 185
6.4 中断管理实例 186
6.4.1 程序功能说明 186
6.4.2 程序实现及源代码解析 186
本章小结 188
练习与思考题 188
第7章 任务同步机制与通信方式 189
7.1 任务同步与事件管理 189
7.1.1 任务之间的关系 189
7.1.2 同步与通信 190
7.1.3 临界区 191
7.1.4 信息传递 191
7.2 事件管理的数据结构 192
7.2.1 事件 192
7.2.2 事件控制块ECB 193
7.2.3 事件等待组和事件等待表 194
7.2.4 事件控制块空闲链表 196
7.2.5 事件管理程序 196
7.3 信号量 199
7.3.1 信号量概述 199
7.3.2 数据结构 200
7.3.3 信号量的操作 201
7.3.4 应用举例 209
7.4 互斥信号量 214
7.4.1 任务优先级的反转现象 215
7.4.2 互斥型信号量概述 216
7.4.3 数据结构 217
7.4.4 互斥信号量的操作 217
7.4.5 应用举例 228
7.5 事件标志组 232
7.5.1 事件标志组概述 232
7.5.2 事件标志组的数据结构 233
7.5.3 事件标志组的操作 236
7.5.4 事件标志组管理实例 249
本章小结 255
练习与思考题 255
第8章 消息管理 256
8.1 消息邮箱 256
8.1.1 消息邮箱概述 256
8.1.2 消息邮箱的数据结构 257
8.1.3 消息邮箱的操作 257
8.1.4 消息邮箱实例 265
8.2 消息队列 267
8.2.1 消息队列概述 267
8.2.2 消息队列的数据结构 268
8.2.3 消息队列的操作 270
8.2.4 消息队列实例 278
本章小结 281
练习与思考题 281
第9章 内存管理 282
9.1 μC/OS-Ⅱ的内存管理机制 282
9.2 内存控制块 282
9.2.1 内存分区 283
9.2.2 内存控制块的结构 283
9.2.3 内存控制块的初始化 283
9.3 创建内存分区 285
9.4 申请一个内存块 287
9.5 释放一个内存块 288
9.6 查询内存分区的状态 289
9.7 读取内存分区名称的有效长度 290
9.8 设置内存分区名称 291
9.9 内存管理应用实例 292
9.9.1 程序功能说明 292
9.9.2 程序实现及源代码分析 292
本章小结 296
练习与思考题 296
第10章 μC/OS-Ⅱ的移植 297
10.1 移植说明 297
10.2 移植详解 298
10.2.1 工程的建立和目录结构 298
10.2.2 板级支持包 298
10.2.3 文件os_cpu.h的编写 298
10.2.4 文件os_cpu_c.c的编写 300
10.2.5 文件os_cpu_a.asm的编写 303
10.3 测试μC/OS-Ⅱ 309
本章小结 310
练习与思考题 310
第11章 CAN总线应用设计 311
11.1 CAN协议概述 311
11.1.1 CAN总线的特点 311
11.1.2 CAN协议报文的帧类型 312
11.2 Tiva微控制器的CAN接口 314
11.2.1 CAN模块内部结构 314
11.2.2 信号描述 315
11.3 功能说明 316
11.3.1 初始化和配置 316
11.3.2 数据收发 317
11.3.3 位速率的控制 323
11.3.4 中断处理 324
11.3.5 测试模式 325
11.4 应用举例 326
本章小结 331
练习与思考题 332
展开