第1章 概述 1
1.1 关于RTOS的几个基本问题 1
1.1.1 什么是实时操作系统 1
1.1.2 使用RTOS的场合与RTOS的选择 3
1.1.3 RTOS的发展历程及几种流行的RTOS简介 4
1.2 RTOS的相关术语 5
1.2.1 内核类相关术语 5
1.2.2 任务类相关术语 7
1.3 MQX的主要特点及版本历史 9
1.3.1 MQX的主要特点 9
1.3.2 MQX的版本升级 9
1.4 MQX的资料简介 10
第2章 MQX系统的工程构架及第一个样例工程 13
2.1 软硬件开发环境 13
2.1.1 软件开发平台——CW简介 14
2.1.2 SD-FSL-K60-C硬件系统 15
2.2 Freescale提供的MQX资源简介 15
2.3 初识MQX——内核、PSP及BSP 16
2.3.1 MQX的内核 16
2.3.2 处理器支持包PSP 17
2.3.3 板级支持包BSP 17
2.4 MQX工程框架——AMQXFW 18
2.4.1 MQX工程框架AMQXFW的目录结构 18
2.4.2 <MQX>的下级文件夹组成 20
2.4.3 <MQX>的下级文件夹解析 21
2.5 MQX第一个样例工程 26
2.5.1 样例工程的功能 26
2.5.2 样例工程任务设计 27
2.5.3 样例工程的运行测试 32
2.5.4 样例工程构建过程 34
2.5.5 上电复位到main函数之前的执行过程 37
2.6 MQX操作系统的启动流程剖析 39
2.6.1 内存的分配和部署 39
2.6.2 内核数据区剖析 40
2.6.3 MQX初始化结构体常数MQX_init_struct 41
2.6.4 MQX任务模板文件(task_templates.c)解析 44
2.6.5 MQX系统启动过程: mqx函数剖析 45
第3章 MQX中断机制与时间管理 53
3.1 中断处理的通用基础知识概要 53
3.1.1 中断的基本概念 53
3.1.2 中断处理的基本过程 54
3.2 MQX中断处理过程及用户ISR安装方法 55
3.2.1 MQX中断处理函数简介 55
3.2.2 MQX中断处理过程 56
3.2.3 MQX中断编程的编译条件设定 56
3.2.4 MQX用户ISR安装方法 57
3.3 MQX中断管理与运行机制剖析 58
3.3.1 MQX中断系统涉及的数据结构 58
3.3.2 MQX中断系统初始化过程剖析 60
3.3.3 基于ARM Cortex-M4的MQX内核ISR源码剖析 66
3.3.4 理解MQX中断机制需要掌握的几个知识点 76
3.4 MQX时间管理函数及用法 78
3.4.1 _time_delay函数的使用方法及注意点 79
3.4.2 绝对时间的来源与用法举例 80
3.5 MQX时间管理实现方法及机制剖析 81
3.5.1 ARM Cortex-M的SysTick的硬件系统 81
3.5.2 hwtimer systick init()函数回调分析 82
3.5.3 SysTick嘀嗒定时器的初始化配置和启动 84
3.5.4 SysTick中断服务例程ISR 86
3.5.5 延时函数_time_delay及相关源代码剖析 89
第4章 MQX常用I/O驱动使用方法简介 93
4.1 MQX驱动分类及其简介 93
4.2 MQX工程常用I/O驱动的添加过程 94
4.3 安装类I/O设备及驱动管理方法 97
4.3.1 设备标识符及命名方法 97
4.3.2 MQX标准设备驱动管理的三层模型 97
4.3.3 MQX I/O设备驱动管理队列 99
4.4 安装类I/O设备驱动应用实例 100
4.4.1 K60-Flash模块概述 100
4.4.2 编写Flash任务以及工程的测试 101
4.5 非安装类I/O设备驱动应用实例 103
4.5.1 K60 RTC模块概述 103
4.5.2 RTC驱动文件及添加 103
4.5.3 编写 RTC工程的测试 103
4.6 MQX设备三层管理下底层驱动设计方法 105
4.6.1 底层设备驱动三层体系结构管理模式分析 105
4.6.2 底层设备驱动初始化参数的组织和分解 107
4.6.3 MQX设备三层管理底层驱动设计的步骤 109
4.7 MQX设备四层管理的驱动设计、移植和复用 110
4.7.1 MQX设备驱动四层管理模型的提出 110
4.7.2 底层驱动构件的获取与设计 111
4.7.3 接口驱动构件的设计 111
4.8 底层设备程序移植和复用设计实例 112
第5章 任务管理与调度 117
5.1 任务管理的基础知识 117
5.1.1 任务的三要素 117
5.1.2 任务的四种状态:终止态、阻塞态、就绪态和激活态 118
5.1.3 任务的基本形式 120
5.2 MQX任务管理函数 122
5.3 MQX任务管理机制剖析 124
5.3.1 MQX任务队列剖析 124
5.3.2 MQX任务管理函数剖析 127
5.4 MQX的FIFO及RR调度策略 130
5.5 MQX调度机制剖析 133
5.5.1 ARM Cortex-M4的SVC及PendSV中断的调度作用 133
5.5.2 系统调用服务例程的执行流程 134
5.5.3 系统调用服务例程源码剖析 137
第6章 任务间的同步与通信 141
6.1 轻量级事件与事件 141
6.1.1 事件的含义及应用场合 141
6.1.2 轻量级事件的常用函数与编程步骤 141
6.1.3 事件的常用函数与编程步骤 146
6.1.4 事件的组织结构与函数代码剖析 151
6.2 轻量级信号量、信号量与互斥量 161
6.2.1 信号量的含义及应用场合 161
6.2.2 轻量级信号量的常用函数与编程步骤 162
6.2.3 信号量的常用函数与编程步骤 164
6.2.4 互斥量的常用函数与编程步骤 169
6.2.5 信号量的组织结构与函数代码剖析 174
6.3 轻量级信号量的常用函数与编程步骤 188
6.3.1 优先级反转问题的含义 188
6.3.2 优先级反转问题的解决方法 188
6.4 轻量级消息队列与消息 190
6.4.1 消息的含义及应用场合 190
6.4.2 轻量级消息队列的常用函数与编程步骤 190
6.4.3 消息的常用函数与编程步骤 193
6.4.4 消息的组织结构与函数代码剖析 199
第7章 内存管理与日志 211
7.1 内存管理及模式选择 211
7.1.1 内存管理的区域范围 211
7.1.2 内存管理的两种方式 212
7.1.3 内存管理的相关函数 212
7.2 可变大小内存管理 213
7.2.1 可变大小内存块管理方式 213
7.2.2 可变大小内存块管理的机制剖析 215
7.2.3 内存管理使用实例 225
7.3 固定大小内存管理 226
7.3.1 固定大小区块的管理机制 226
7.3.2 固定大小区块池的创建 227
7.3.3 固定大小区块的申请分配和释放 228
7.3.4 动态区块的删除 228
7.3.5 固定大小区块的使用和管理接口函数 228
7.4 日志的应用 228
7.4.1 轻量级日志 229
7.4.2 内核日志 234
7.4.3 日志 237
第8章 MQX基本要素综合实例 241
8.1 需求分析与硬件说明 241
8.1.1 需求分析 241
8.1.2 硬件说明 241
8.2 中断服务例程ISR与任务功能设计 242
8.2.1 中断服务例程ISR功能设计 242
8.2.2 任务功能设计 242
8.3 PC与MCU通信帧协议的设计 243
8.3.1 帧格式 244
8.3.2 帧命令 244
8.4 MCU主要代码实现 244
8.5 PC界面 257
第9章 MQX程序设计相关问题的讨论 259
9.1 库文件用法 259
9.1.1 库文件的基本概念 259
9.1.2 MQX库文件(.a)的生成 260
9.1.3 库文件的使用方法 263
9.2 BSP和PSP的移植方法简介 263
9.2.1 BSP的移植 263
9.2.2 PSP的移植 264
9.3 轻量级MQX 264
9.3.1 轻量级MQX特点 264
9.3.2 轻量级MQX工程 266
9.4 ISR设计、任务划分及优先级安排问题 272
9.4.1 ISR设计的基本问题 272
9.4.2 任务划分的简明方法 273
9.4.3 任务优先级安排问题 273
9.5 程序设计中其他若干问题的讨论 274
9.5.1 如何避免死锁 274
9.5.2 临界区的处理 274
9.5.3 看门狗的应用 275
9.5.4 ISR参数与任务参数的作用及用法 276
第10章 USB组件的应用 277
10.1 USB基础知识 277
10.1.1 USB发展历史 277
10.1.2 USB基本概念 278
10.2 USB设备协议栈 282
10.2.1 USB设备架构 282
10.2.2 USB设备初始化 283
10.2.3 USB设备协议栈常用函数 283
10.2.4 USB设备编程举例 284
10.2.5 USB设备虚拟串口编程举例 287
10.3 USB主机协议栈 297
10.3.1 USB主机协议栈框架介绍 297
10.3.2 USB主机应用层函数 299
10.3.3 USB主机应用程序示例 299
10.3.4 USB主机工作流程剖析 302
第11章 RTCS组件的应用 307
11.1 以太网基础知识 307
11.1.1 以太网物理设备 307
11.1.2 相关名词解释 308
11.2 RTCS文件组织结构 311
11.3 ICMP协议 312
11.3.1 使用ICMP设置步骤 312
11.3.2 ICMP测试方法 314
11.4 UDP协议 315
11.4.1 使用UDP设置步骤 315
11.4.2 UDP测试方法 316
11.5 TCP协议 318
11.5.1 使用TCP设置步骤 318
11.5.2 TCP测试方法 320
11.6 HTTP协议 321
11.6.1 使用HTTP的PC方软件设置步骤 321
11.6.2 使用HTTP的MCU方设置步骤 323
11.6.3 HTTP测试方法 325
附录A 硬件评估板SD-FSL-K60-C 327
附录B 问与答 331
参考文献 335