目录 1
第1章 嵌入式实时操作系统的基本概念 1
1.1 计算机操作系统 1
1.1.1 什么是计算机操作系统 1
1.1.2 操作系统的作用和功能 2
1.2 嵌入式系统和嵌入式操作系统 3
1.2.1 嵌入式系统的基本概念 4
1.2.2 嵌入式操作系统 7
1.2.3 实时操作系统需要满足的条件 9
1.2.4 嵌入式系统的任务及嵌入式实时操作系统 11
1.3 嵌入式实时操作系统μC/OS-Ⅱ简介 12
1.4 小结 13
1.5 练习题 14
第2章 μC/OS-Ⅱ中的任务 15
2.1 任务的基本概念 15
2.1.1 任务的状态 17
2.1.2 用户任务代码的一般结构 18
2.1.3 系统任务 20
2.1.4 任务的优先权及优先级别 21
2.2 任务堆栈 21
2.2.1 任务堆栈的创建 22
2.2.2 任务堆栈的初始化 24
2.3 任务控制块及任务控制块链表 25
2.3.1 任务控制块的结构 25
2.3.2 任务控制块链表 26
2.3.3 任务控制块的初始化 28
2.4 任务就绪表及任务调度 29
2.4.1 任务就绪表的结构 29
2.4.2 对任务就绪表的操作 31
2.4.3 任务的调度 32
2.5 任务的创建 37
2.5.1 用函数OSTaskCreate()创建任务 37
2.5.2 用函数OSTaskCreateExt()创建任务 39
2.5.3 创建任务的一般方法 39
2.6 任务的挂起和恢复 46
2.6.1 挂起任务 46
2.6.2 恢复任务 47
2.7.2 任务的删除 53
2.7 其他任务管理函数 53
2.7.1 任务优先级别的修改 53
2.7.3 查询任务的信息 60
2.8 μC/OS-Ⅱ的初始化和任务的启动 60
2.8.1 μC/OS-Ⅱ的初始化 60
2.8.2 μC/OS-Ⅱ的启动 62
2.9 一个示例 64
2.10 小结 72
2.11 练习题 73
第3章 μC/OS-Ⅱ的中断和时钟 74
3.1 μC/OS-Ⅱ的中断 74
3.1.1 μC/OS-Ⅱ的中断过程 74
3.1.3 应用程序中的临界段 78
3.1.2 中断级任务切换函数 78
3.2 μC/OS-Ⅱ的时钟 80
3.3 时间管理 88
3.3.1 任务的延时 88
3.3.2 取消任务的延时 89
3.3.3 获取和设置系统时间 93
3.4 小结 96
3.5 练习题 97
第4章 任务的同步与通信 98
4.1 任务间的同步和事件控制块 98
4.1.1 任务间的同步 98
4.1.2 事件 99
4.1.3 事件控制块 112
4.1.4 操作事件控制块的函数 113
4.1.5 空事件控制块链表 115
4.2 信号量及其操作 115
4.2.1 信号量 115
4.2.2 信号量的操作 116
4.3 互斥型信号量和任务优先级反转 124
4.3.1 任务优先级的反转现象 124
4.3.2 互斥型信号量 130
4.4 消息邮箱及其操作 133
4.4.1 消息邮箱 133
4.4.2 消息邮箱的操作 133
4.5 消息队列及其操作 139
4.5.1 消息队列 139
4.5.2 消息队列的操作 142
4.6 小结 148
4.7 练习题 149
第5章 信号量集 150
5.1 信号量集的结构 150
5.1.1 信号量集的标志组 150
5.1.2 等待任务链表 152
5.1.3 对等待任务链表的操作 154
5.2 信号量集的操作 155
5.2.1 创建信号量集 155
5.2.2 请求信号量集 156
5.2.3 向信号量集发信号 157
5.2.4 查询信号量集的状态 163
5.2.5 删除信号量集 166
5.3 小结 167
5.4 练习题 167
第6章 内存的动态分配 168
6.1 内存控制块 168
6.1.1 可动态分配内存的划分 168
6.1.2 内存控制块OS_MEM的结构 169
6.1.3 空内存控制块链表 170
6.2 动态内存的管理 170
6.2.1 创建动态内存分区 171
6.2.2 请求获得一个内存块 173
6.2.3 释放一个内存块 175
6.2.4 查询一个内存分区的状态 179
6.4 练习题 184
6.3 小结 184
7.1 μC/OS-Ⅱ移植的一般性问题 185
7.1.1 可重入函数 185
第7章 在51单片机上移植μC/OS-Ⅱ 185
7.1.2 时钟节拍的产生 186
7.1.3 任务堆栈的设计 186
7.2 在51系列单片机上移植μC/OS-Ⅱ 187
7.2.1 改写文件OS_CPU.H 187
7.2.2 任务堆栈的设计 188
7.2.3 文件OS_CPU_C.C的改写 194
7.3 应用举例 196
7.3.1 LED数码显示器的驱动程序 196
7.2.4 几点必须注意的事项 196
7.3.2 51单片机串行接口的应用 198
7.4 小结 206
7.5 练习题 206
第8章 在ARM7上移植μC/OS-Ⅱ 207
8.1 移植规划 207
8.1.1 编译器的选择 207
8.1.2 ARM7工作模式的选择 207
8.2 移植 208
8.2.1 文件OS_CPU.H的编写 208
8.2.2 文件OS_CPU_C.C的编写 210
8.2.3 文件OS_CPU_A.S的编写 216
8.2.4 关于中断及时钟节拍 219
8.3 移植μC/OS-Ⅱ到LPC2000 221
8.3.1 挂接SWI软件中断 222
8.3.2 中断及时钟节拍中断 222
8.3.3 一个基于μC/OS-Ⅱ和ARM的应用程序实例 223
8.4 小结 225
8.5 练习题 225
第9章 μC/OS-Ⅱ可剪裁性的实现 226
9.1 文件OS_CFG.H中用于系统裁剪的常量 226
9.2 配置常量的解释 228
9.2.1 OS_MAX_EVENTS 228
9.2.5 OS_LOWEST_PRIO 229
9.2.4 OS_MAX_MEM_TASKS 229
9.2.3 OS_MAX_QS 229
9.2.2 OS_MAX_MEM_PARTS 229
9.2.6 OS_TASK_IDLE_STK_SIZE 230
9.2.7 OS_TASK_STAT_EN 230
9.2.8 OS_TASK_STAT_STK_SIZE 230
9.2.9 OS_CPU_HOOKS_EN 230
9.2.10 OS_MBOX_EN 231
9.2.11 OS_MEM_EN 231
9.2.12 OS_Q_EN 231
9.2.13 OS_SEM_EN 231
9.2.14 OS_TASK_CHANGE_PRIO_EN 231
9.2.15 OS_TASK_CREATE_EN 231
9.2.19 OS_TICKS_PER_SEC 232
9.2.18 OS_TASK_SUSPEND_EN 232
9.2.16 OS_TASK_CREATE_EXT_EN 232
9.2.17 OS_TASK_DEL_EN 232
附录A 文件PC.C中的函数 233
A.1 字符显示函数 233
A.1.1 显示一个字符的函数PC_DispChar() 233
A.1.2 清屏幕一列显示的函数PC_DispClrCol() 233
A.1.3 清屏幕一行显示的函数PC_DispClrRow() 233
A.1.4 清屏函数PC_DispClrScr() 234
A.1.5 显示字符串函数PC_DispStr() 234
A.1.6 颜色常量的定义 234
A.3 设置和获取中断向量的函数 235
A.3.2 获取中断向量的函数PC_VectGet() 235
A.3.1 设置中断向量的函数PC_VectSet() 235
A.2.2 恢复DOS环境的函数PC_DOSReturn() 235
A.2.1 保存DOS环境的函数PC_DOSSaveReturn() 235
A.2 保存和恢复DOS环境的函数 235
附录B μC/OS-Ⅱ中使用的数据类型 238
附录C μC/OS-Ⅱ在80x86上的移植 238
C.1 任务切换函数OSCtxSw() 238
C.1.1 任务切换函数OSCtxSw() 238
C.1.2 任务切换宏OS_TASK_SW() 239
C.1.3 中断级任务切换函数OSIntCtxSw() 240
C.2 μC/OS-Ⅱ的系统时钟 242
C.2.1 PC中DOS的系统时钟 242
C.2.2 PC中μC/OS-Ⅱ的系统时钟 242
C.2.4 在任务中安装μC/OS-Ⅱ系统时钟的中断向量 244
C.2.3 μC/OS-Ⅱ系统时钟中断服务程序 244
C.2.5 在任务中由μC/OS-Ⅱ返回DOS环境 245
附录D C51开发工具μVision2简介 246
D.1 C51语言的扩展 246
D.1.1 数据类型 246
D.1.2 存储器类型 247
D.1.3 存储模式 248
D.1.4 指针 248
D.1.5 可重入函数 250
D.1.6 与汇编语言的接口 251
D.1.7 库函数 251
D.2.1 启动μVision2并创建一个项目 252
D.2.2 新建一个源文件 252
D.2 创建项目 252
D.2.3 增加和配置初始化代码 253
D.2.4 为目标设置工具选项 254
D.2.5 创建项目并生成HEX文件 254
D.3 常用的菜单选项 254
D.3.1 视图菜单View 254
D.3.2 项目菜单Project 255
D.3.3 调试菜单Debug 255
D.3.4 外围器件菜单Peripherals 256
附录E MagicARM2200教学实验开发平台简介 260
附录F 光盘上例题代码的使用方法 260
F.1 光盘上的文件 260
F.2 光盘上的文件使用方法 260