第1章 实时操作系统及μC/OS-Ⅲ简介 1
1.1 单片机应用程序框架 1
1.1.1 前后台系统 1
1.1.2 嵌入式实时操作系统 4
1.2 如何使用和学习μC/OS-Ⅲ源码 5
1.3 μC/OS-Ⅲ文件结构简介 7
1.4 μC/OS-Ⅲ数据结构简介 8
1.5 任务 10
1.6 内核对象简介 11
1.6.1 信号量 11
1.6.2 事件标志组 12
1.6.3 消息队列 12
1.6.4 互斥信号量 12
1.6.5 内存分区 13
1.6.6 软件定时器 13
1.7 μC/OS-Ⅲ常见的程序段 13
1.7.1 中断嵌套层数统计 13
1.7.2 开中断和关中断 14
1.7.3 使能中断延迟的锁住和开启调度器 14
1.7.4 没有使能中断延迟的锁住和开启调度器 15
1.7.5 中断嵌套检测 15
1.7.6 调度器嵌套检测 16
1.7.7 时间戳 16
1.7.8 错误类型 17
1.7.9 参数检测 17
1.7.10 内核对象类型检测 17
1.7.11 安全检测 18
1.7.12 安全关键IEC61508 18
1.8 总结 19
第2章 时钟节拍 20
2.1 系统节拍中断服务程序 20
2.2 节拍任务处理时间相关事务 23
2.2.1 节拍列表更新 24
2.2.2 节拍列表 27
2.2.3 哈希算法检测到期任务 29
2.3 总结 30
第3章 时间管理 31
3.1 实例演示 31
3.2 任务开始延时 34
3.3 任务插入节拍列表 40
3.4 任务取消延时 49
3.5 任务脱离节拍列表 51
3.6 获取和设置时钟节拍 55
3.7 μC/OS-Ⅲ全局变量的定义和声明 56
3.8 总结 57
第4章 软件定时器 58
4.1 实例演示 58
4.2 插入定时器列表 65
4.3 删除定时器 68
4.4 脱离定时器列表 70
4.5 停止定时器 71
4.6 定时器内部运行机制 74
4.6.1 定时器初始化 74
4.6.2 定时器任务 76
4.6.3 回调函数 78
4.7 定时器剩余定时时间获取 79
4.8 定时器状态获取 81
4.9 总结 82
第5章 多值信号量 83
5.1 实例演示 83
5.2 信号量的创建 85
5.3 信号量等待队列 86
5.4 内核对象添加到调试双向链表 89
5.5 内核对象从调试双向链表中删除 90
5.6 部分内核对象数据结构的特点 93
5.7 发布信号量 95
5.7.1 开始发布信号量 95
5.7.2 结构体指针强制类型转换 101
5.7.3 无确切类型指针 101
5.7.4 单一任务提交处理 102
5.7.5 标记某一内核对象被提交 104
5.7.6 将任务从多个等待列表中移除 106
5.7.7 将任务从一个等待列表中删除 107
5.7.8 信号量提交过程涉及的时间戳 108
5.8 等待信号量 108
5.9 等待信号量过程的解析 109
5.9.1 函数解析 110
5.9.2 阻塞准备等待内核对象的任务 114
5.9.3 阻塞任务 115
5.9.4 初始化OS_PEND_DATA类型变量 116
5.9.5 根据任务优先级将OS_PEND_DATA变量插入双向链表 116
5.10 强制解除等待状态 118
5.10.1 强制解除内核对象上的一个任务 121
5.10.2 标记某一内核对象上的任务被强制解除等待状态 122
5.11 删除信号量 123
5.12 设置信号量计数值 128
5.13 总结 130
第6章 互斥信号量mutex 131
6.1 mutex变量的数据结构 131
6.2 创建mutex 132
6.3 提交mutex 133
6.4 等待/获取mutex 136
6.5 获取mutex过程解析 137
6.5.1 开始获取mutex 137
6.5.2 优先级继承过程 141
6.5.3 改变任务优先级并调整任务在各种列表中的位置 141
6.6 删除mutex 142
6.7 强制解除等待mutex 146
6.8 总结 148
第7章 消息队列 149
7.1 实例演示 149
7.2 消息的数据结构 150
7.3 消息池 151
7.4 消息队列解析 153
7.5 创建消息队列 155
7.6 提交消息 157
7.7 提交消息过程解析 157
7.8 等待消息过程解析 164
7.9 总结 164
第8章 事件标志 165
8.1 实例演示 165
8.2 事件标志组数据结构解析 167
8.3 创建事件标志组 167
8.4 等待事件标志组 169
8.5 提交事件标志组 177
8.6 总结 180
第9章 等待多个内核对象 181
9.1 实例演示 181
9.2 等待多个内核对象过程解析 182
9.2.1 检查多个内核对象是否被提交过 186
9.2.2 任务等待多个内核对象 188
9.3 总结 189
第10章 任务消息队列和任务信号量 190
10.1 实例演示 190
10.2 任务消息队列 191
10.2.1 任务消息队列相关数据结构解析 191
10.2.2 等待任务消息队列 192
10.2.3 任务消息队列的提交 196
10.2.4 强制解除等待任务消息队列 200
10.2.5 小结 201
10.3 任务信号量 202
10.3.1 任务信号量相关数据结构 202
10.3.2 等待任务信号量 202
10.3.3 提交任务信号量 205
10.3.4 强制解除等待任务信号量 209
10.3.5 小结 210
第11章 内存管理 211
11.1 内存碎片是怎么形成的 211
11.2 实例说明 211
11.3 内存分区控制块数据结构 212
11.4 创建内存分区 212
11.5 获取内存块 216
11.6 将内存块放回内存分区 217
11.7 总结 218
第12章 就绪优先级位映像表 219
12.1 就绪优先级位映像表数据结构 219
12.2 初始化就绪优先级位映像表 220
12.3 查找就绪优先级位映像表中最高的优先级 220
12.4 置就绪优先级位映像表中某个优先级处于就绪状态 225
12.5 将就绪优先级位映像表相应位清0 226
12.6 总结 226
第13章 就绪列表 227
13.1 就绪列表数据结构解析 227
13.2 初始化就绪列表 229
13.3 使任务就绪 229
13.4 将任务从就绪列表对应的双向链表的前面转移到后面 231
13.5 总结 232
第14章 任务切换 233
14.1 堆栈的基本概念 233
14.2 Cortrtex-M3堆栈 234
14.3 任务切换 235
14.4 PendSV服务程序解析 238
14.5 首次任务调度 242
14.6 任务堆栈初始化函数OSTaskStkInit解析 243
14.7 验证初始化堆栈弹栈结果 246
14.8 中断级任务切换的宏OSIntCtxSw()解析 248
14.9 任务切换过程中出现中断的处理 249
14.10 总结 249
第15章 任务管理 250
15.1 任务创建 250
15.2 挂起任务 256
15.3 恢复挂起任务 259
15.4 时间片轮转调度 262
15.4.1 时间片轮转调度初始化 262
15.4.2 时间片轮转调度核心算法 264
15.4.3 放弃时间片 266
15.4.4 设置任务时间片个数 267
15.5 任务寄存器 269
15.5.1 设置寄存器的内容 269
15.5.2 访问任务寄存器 271
15.6 总结 272
第16章 中断管理 273
16.1 中断延迟提交 273
16.1.1 延迟提交信息记录块 274
16.1.2 初始化延迟提交 274
16.1.3 中断延迟提交内核对象 276
16.1.4 延迟提交任务OS_IntQTask 279
16.2 中断嵌套管理 282
16.3 开中断和关中断解析 284
16.4 进入和退出临界段代码解析 287
16.4.1 OS_CRITICAL_ENTER解析 288
16.4.2 OS_CRITICAL_ENTER_CPU_CRITICAL_EXIT解析 288
16.4.3 OS_CRITICAL_EXIT_NO_SCHED解析 288
16.4.4 OS_CRITICAL_EXIT解析 288
16.5 测量关中断时间 289
16.5.1 测量关中断的初始化 289
16.5.2 测量最大关中断时间 290
16.5.3 获取最大关中断的时间 292
16.6 总结 293
第17章 各类统计信息 295
17.1 实例演示 295
17.2 CPU使用率计算 296
17.3 CPU使用率测量的初始化 296
17.4 堆栈检测过程简介 298
17.5 堆栈检测 299
17.6 实例解读堆栈溢出 301
17.7 统计任务OS_StatTask 305
17.8 总结 307
第18章 μC/OS-Ⅲ在不同CPU上的移植 308
18.1 移植接口主要文件编写 308
18.1.1 os_cpu_c.c文件 308
18.1.2 os_cpu_a.asm文件 309
18.1.3 os_cpu.h文件 310
18.2 编写CPU相关文件 310
18.2.1 cpu_c.c文件和cpu_a.asm文件 310
18.2.2 cpu.h文件 310
18.2.3 cpu_def.h文件 315
18.2.4 cpu_core.c文件和cpu_core.h文件 316
18.2.5 cpu_cfg.h文件 316
18.3 编写配置文件 317
18.3.1 os_app_app.h文件 317
18.3.2 os_cfg.h文件 317
18.4 总结 317