本书重点讨论了FreeRTOS的堆内存管理、任务管理、队列管理、软件定时器管理、中断管理、资源管理、事件组和任务通知等作为一款优秀的实时操作系统必须具备的功能和特性;为了有助于应用程序的开发和调试,本书也涉及开发者支持和故障排除等内容,总结提高设计开发效率的方法,介绍了多年来用户请求技术支持中排在前几位的问题及其解决方案。
本书译者为黄华,中电科蓉威电子技术有限公司高级工程师,一直从事电子产品的研发工作,具备丰富的理论知识和工程经验,能够独立承担和领导团队开展高可靠性嵌入式计算机、FPGA和DSP等模块以及分机级项目的设计和开发,负责的多个项目已用于军事装备。
第 1 章 FreeRTOS 发行版 / 1
1.1 本章知识点及学习目标 / 1
1.2 了解 FreeRTOS 发行版 / 1
1.3 演示程序 / 5
1.4 创建 FreeRTOS 工程 / 6
1.5 数据类型和编码风格指南 / 8
第 2 章 堆内存管理 / 11
2.1 本章知识点及学习目标 / 11
2.2 内存分配方案示例 / 12
2.3 与堆相关的实用函数 / 22
第 3 章 任务管理 / 25
3.1 本章知识点及学习目标 / 25
3.2 任务函数 / 25
3.3 顶层任务状态 / 26
3.4 创建任务 / 27
3.5 任务优先级 / 34
3.6 时间测量和滴答中断 / 35
3.7 扩展“非运行”状态 / 38
3.8 空闲任务和空闲任务钩子 / 46
3.9 更改任务的优先级 / 49
3.10 删除任务 / 53
3.11 线程本地存储 / 57
3.12 调度算法 / 59
第 4 章 队列管理 / 69
4.1 本章知识点及学习目标 / 69
4.2 队列的特点 / 69
4.3 使用队列 / 72
4.4 从多个来源接收数据 / 79
4.5 处理大数据或可变大小的数据 / 86
4.6 从多队列接收 / 91
4.7 使用队列创建邮箱 / 99
第 5 章 软件定时器管理 / 103
5.1 本章知识点及学习目标 / 103
5.2 软件定时器回调函数 / 103
5.3 软件定时器的属性和状态 / 104
5.4 软件定时器的上下文 / 106
5.5 创建和启动软件定时器 / 109
5.6 定时器 ID / 115
5.7 更改定时器的周期 / 117
5.8 重置软件定时器 / 120
第 6 章 中断管理 / 125
6.1 本章知识点及学习目标 / 125
6.2 在 ISR 中使用 FreeRTOS API / 126
6.3 推迟中断处理 / 129
6.4 用于同步的二进制信号量 / 130
6.5 计数信号量 / 143
6.6 推迟工作到 RTOS 守护任务 / 147
6.7 在中断服务程序中使用队列 / 152
6.8 中断嵌套 / 158
第 7 章 资源管理 / 163
7.1 本章知识点及学习目标 / 163
7.2 临界区和暂停调度器 / 166
7.3 互斥量(和二进制信号量) / 169
7.4 守门人任务 / 182
第 8 章 事件组 / 187
8.1 本章知识点及学习目标 / 187
8.2 事件组的特征 / 188
8.3 使用事件组进行事件管理 / 189
8.4 使用事件组进行任务同步 / 199
第 9 章 任务通知 / 207
9.1 本章知识点及学习目标 / 207
9.2 任务通知:优势和局限 / 208
9.3 使用任务通知 / 209
第 10 章 低功耗支持 / 233
10.1 本章知识点及学习目标 / 233
10.2 节能及与节能有关的宏 / 233
10.3 ARM Cortex-M 微控制器的低功耗实现 / 236
第 11 章 开发者支持 / 241
11.1 本章知识点及学习目标 / 241
11.2 configASSERT() / 241
11.3 FreeRTOS+Trace / 243
11.4 与调试相关的钩子(回调)函数 / 246
11.5 查看运行时信息和任务状态信息 / 246
11.6 跟踪钩子宏 / 254
第 12 章 故障排除 / 259
12.1 本章知识点及学习目标 / 259
12.2 中断优先级 / 259
12.3 栈溢出 / 260
12.4 函数 printf()和 sprintf()的不当使用 / 262
12.5 错误的其他常见来源 / 263
附录 A FreeRTOS 的新版本和新特性 / 265
A.1 FreeRTOS 版本 9 / 265
A.2 FreeRTOS 版本 10 / 268