FreeRTOS源码详解与应用开发·基于STM32查看源代码讨论查看历史
《FreeRTOS源码详解与应用开发·基于STM32》,许颖劲 左忠凯 著,出版社: 北京航空航天大学出版社。
书籍对于人类原有很重大的意义,但,书籍不仅对那些不会读书的人是毫无用处,就是对那些机械地读完了书还不会从死的文字中引申活的思想[1]的人也是无用的。 —— 乌申斯基[2]
内容简介
本书辅以大量的例程,全面讲解了FreeRTOS的原理以及源码,主要内容包括任务管理和任务调度、系统裁减和配置、时间管理、队列、信号量、软件定时器、事件标志组、任务通知、低功耗Tickless模式、空闲任务以及内存管理等。同时,本书配有大量的图例,对于想要深入学习RTOS类系统原理的人来说是一个不错的选择。本书是再版书,相比旧版,使用了更新的FreeRTOS内核版本作为解析对象,并针对FreeRTOS在多种ARM Cortex- M 架构下的运行进行了介绍;同时,本书对知识点的介绍更加详细、讲解的先后顺序更加合理。
本书配套资料包括视频教程、文档教程、各个例程的源码及相关参考资料。
目录
第1章 FreeRTOS简介 1
1.1 初识FreeRTOS 1
1.1.1 什么是FreeRTOS 1
1.1.2 为什么选择FreeRTOS 2
1.1.3 FreeRTOS的点 2
1.1.4 商业许可 2
1.2 磨刀不误砍柴工 3
1.2.1 查找资料 3
1.2.2 FreeRTOS官方文档 5
1.2.3 Cortex M 架构资料 7
1.3 FreeRTOS源码初探 7
1.3.1 FreeRTOS源码下载 7
1.3.2 FreeRTOS文件预览 9
第2章 FreeRTOS移植 11
2.1 FreeRTOS移植 11
2.1.1 移植前准备 11
2.1.2 添加FreeRTOS文件 12
2.1.3 修改SYSTEM 文件 15
2.1.4 修改中断相关文件 22
2.1.5 可选步骤(建议完成) 24
2.1.6 添加应用程序 25
2.1.7 使用AC6编译工程(扩展) 32
2.2 FreeRTOS移植实验 33
2.2.1 功能设计 33
2.2.2 软件设计 34
2.2.3 下载验证 35
第3章 FreeRTOS系统配置 37
3.1 FreeRTOSConfig.h文件 37
3.2 config配置项 37
3.2.1 基础配置项 矫p扷CRS翪38
3.2.2 内存分配相关定义 40
3.2.3 钩子函数相关定义 41
3.2.4 运行时间和任务状态统计相关定义 42
3.2.5 协程相关定义 43
3.2.6 软件定时器相关定义 43
3.2.7 中断嵌套行为配置 43
3.2.8 断 言 44
3.2.9 FreeRTOS MPU殊定义 44
3.3 INCLUDE配置项 45
3.4 其他配置项 46
第4章 FreeRTOS中断管理 47
4.1 ARM Cortex M 中断 47
4.1.1 简 介 47
4.1.2 中断优先级管理 47
4.1.3 3个系统中断优先级配置寄存器 49
4.1.4 3个中断寄存器 50
4.1.5 中断控制状态寄存器 52
4.2 FreeRTOS中断配置项 52
4.3 FreeRTOS中断管理详解 54
4.3.1 PendSV和SysTick中断优先级 54
4.3.2 FreeRTOS开关中断 55
4.3.3 FreeRTOS进出临界区 56
4.4 FreeRTOS中断测试实验 59
4.4.1 功能设计 59
4.4.2 软件设计 59
4.4.3 下载验证 62
第5章 FreeRTOS任务基础知识 63
5.1 单任务和多任务系统 63
5.1.1 单任务系统 63
5.1.2 多任务系统 64
5.2 FreeRTOS任_____罗_务状态 65
5.3 FreeRTOS任务优先级 66
5.4 FreeRTOS任务调度方式 67
5.5 FreeRTOS任务控制块 68
5.6 FreeRTOS任务栈 69
第6章 FreeRTOS任务相关API函数 71
6.1 FreeRTOS创建和删除任务相关 API函数 71
6.2 FreeRTOS任务创建与删除实验(动态方法) 75
6.2.1 功能设计 75
6.2.2 软件设计 75
6.2.3 下载验证 78
6.3 FreeRTOS任务创建与删除实验(静态方法) 79
6.3.1 功能设计 79
6.3.2 软件设计 79
6.3.3 下载验证 83
6.4 FreeRTOS挂起和恢复任务相关 API函数 84
6.5 FreeRTOS任务挂起与恢复实验 85
6.5.1 功能设计 85
6.5.2 软件设计 86
6.5.3 下载验证 89
第7章 FreeRTOS列表和列表项 90
7.1 FreeRTOS列表和列表项简介 90
7.1.1 列 表 90
7.1.2 列表项 91
7.1.3 迷你列表项 92
7.2 FreeRTOS列表和列表项相关 API函数 92
7.3 FreeRTOS操作列表和列表项的宏 98
7.4 FreeRTOS列表项的插入与删除实验 99
7.4.1 功能设计 99
7.4.2 软件设计 99
7.4.3 下载验证 102
第8章 FreeRTOS系统启动流程及任务相关函数解析 107
8.1 FreeRTOS开启任务调度器 107
8.1.1 函数vTaskStartScheduler() 107
8.1.2 函数xPortStartScheduler() 110
8.2 FreeRTOS启动个任务 112
8.2.1 函数prvStartFirstTask() 112
8.2.2 函数vPortSVCHandler() 113
8.3 FreeRTOS任务状态列表 115
8.4 FreeRTOS创建任务函数解析 116
8.5 FreeRTOS删除任务函数解析 127
FreeRTOS源码详解与应用开发———基于STM32(第2版)
4 ·
8.6 FreeRTOS挂起任务函数解析 130
8.7 FreeRTOS恢复任务函数解析 134
8.8 FreeRTOS空闲任务 135
第9章 FreeRTOS任务切换 137
9.1 PendSV异常 137
9.2 PendSV中断服务函数 139
9.3 FreeRTOS确定下一个要运行的任务 143
9.4 PendSV异常何时触发 145
9.5 FreeRTOS时间片调度实验 146
9.5.1 功能设计 146
9.5.2 软件设计 147
9.5.3 下载验证 149
第10章 FreeRTOS内核控制函数 150
10.1 FreeRTOS内核控制函数预览 150
10.2 FreeRTOS内核控制函数详解 151
第11章 FreeRTOS其他任务API函数 156
11.1 FreeRTOS任务相关API函数 156
11.1.1 FreeRTOS任务相关API函数预览 156
11.1.2 FreeRTOS任务相关API函数详解 157
11.2 FreeRTOS任务状态与信息查询实验 166
11.2.1 功能设计 166
11.2.2 软件设计 166
11.2.3 下载验证 170
11.3 FreeRTOS任务运行时间统计实验 172
11.3.1 功能设计 172
11.3.2 软件设计 172
11.3.3 下载验证 176
第12章 FreeRTOS时间管理 178
12.1 FreeRTOS系统时钟节拍 178
12.1.1 FreeRTOS系统时钟节拍简介 178
12.1.2 FreeRTOS系统时钟节拍来源 178
12.1.3 FreeRTOS系统时钟节拍处理 180
12.2 FreeRTOS任务延时函数 185
第13章 FreeRTOS队列 193
13.1 FreeRTOS队列简介 193
13.2 FreeRTOS队列相关API函数 196
13.2.1 队列结构体 196
13.2.2 创建队列 197
13.2.3 队列写入消息 205
13.2.4 队列读取消息 215
13.2.5 队列锁 217
13.3 FreeRTOS队列操作实验 220
13.3.1 功能设计 220
13.3.2 软件设计 220
13.3.3 下载验证 223
13.4 FreeRTOS队列集 223
13.5 FreeRTOS队列集相关API函数 224
13.6 FreeRTOS队列集操作实验 228
13.6.1 功能设计 228
13.6.2 软件设计 229
13.6.3 下载验证 232
13.7 FreeRTOS队列集模拟事件标志位实验 234
13.7.1 功能设计 234
13.7.2 软件设计 234
13.7.3 下载验证 237
第14章 FreeRTOS信号量 239
14.1 FreeRTOS信号量简介 239
14.2 FreeRTOS二值信号量 240
14.2.1 FreeRTOS二值信号量简介 240
14.2.2 FreeRTOS二值信号量相关 API函数 240
14.3 FreeRTOS二值信号量操作实验 249
14.3.1 功能设计 249
14.3.2 软件设计 249
14.3.3 下载验证 252
14.4 FreeRTOS计数型信号量 253
14.4.1 FreeRTOS计数型信号量简介 253
14.4.2 FreeRTOS计数型信号量相关API函数 253
14.5 FreeRTOS计数型信号量操作实验 255
14.5.1 功能设计 255
14.5.2 软件设计 255
14.5.3 下载验证 258
14.6 优先级翻转 258
14.7 优先级翻转实验 260
14.7.1 功能设计 260
14.7.2 软件设计 260
14.7.3 下载验证 263
14.8 FreeRTOS互斥信号量 264
14.8.1 FreeRTOS互斥信号量简介 264
14.8.2 FreeRTOS互斥信号量相关 API函数 264
14.9 FreeRTOS互斥信号量操作实验 266
14.9.1 功能设计 266
14.9.2 软件设计 267
14.9.3 下载验证 269
14.10 FreeRTOS递归互斥信号量 270
14.10.1 FreeRTOS递归互斥信号量简介 270
14.10.2 FreeRTOS递归互斥信号量相关API函数 271
14.10.3 FreeRTOS递归互斥信号量的使用示例 273
第15章 FreeRTOS软件定时器 275
15.1 FreeRTOS软件定时器简介 275
15.1.1 FreeRTOS软件定时器服务任务简介 276
15.1.2 软件定时器命令队列 276
15.1.3 软件定时器的状态 276
15.1.4 单次定时器和周期定时器 277
15.1.5 软件定时器的状态转换图 278
15.1.6 复位软件定时器 278
15.2 FreeRTOS软件定时器相关配置 279
15.3 FreeRTOS软件定时器相关API函数 279
15.4 FreeRTOS软件定时器实验 286
15.4.1 功能设计 286
15.4.2 软件设计 286
15.4.3 下载验证 289
第16章 FreeRTOS事件标志组 291
16.1 FreeRTOS事件标志组简介 291
16.2 FreeRTOS事件标志组相关API函数 292
16.3 FreeRTOS事件标志组实验 298
16.3.1 功能设计 298
16.3.2 软件设计 298
16.3.3 下载验证 301
第17章 FreeRTOS任务通知 303
17.1 FreeRTOS任务通知简介 303
17.1.1 任务通知的优势 304
17.1.2 任务通知的缺点 304
17.2 FreeRTOS任务通知相关API函数 305
17.3 FreeRTOS任务通知模拟二值信号量实验 321
17.3.1 功能设计 321
17.3.2 软件设计 321
17.3.3 下载验证 324
17.4 FreeRTOS任务通知模拟计数型信号量实验 324
17.4.1 功能设计 324
17.4.2 软件设计 324
17.4.3 下载验证 327
17.5 FreeRTOS任务通知模拟消息邮箱实验 328
17.5.1 功能设计 328
17.5.2 软件设计 328
17.5.3 下载验证 331
17.6 FreeRTOS任务通知模拟事件标志组实验 332
17.6.1 功能设计 332
17.6.2 软件设计 332
17.6.3 下载验证 335
第18章 FreeRTOS低功耗Tickless模式 337
18.1 FreeRTOS低功耗Tickless模式简介 337
18.1.1 空闲任务中的低功耗Tickless处理 337
18.1.2 函数portSUPPRESS_TICKS_AND_SLEEP() 339
18.2 FreeRTOS低功耗Tickless模式相关配置项 340
18.3 FreeRTOS低功耗Tickless实验 340
18.3.1 功能设计 340
18.3.2 软件设计 341
18.3.3 下载验证 344
第19章 FreeRTOS空闲任务 345
19.1 FreeRTOS空闲任务详解 345
19.1.1 FreeRTOS空闲任务简介 345
19.1.2 FreeRTOS空闲任务的创建 345
19.1.3 FreeRTOS空闲任务的任务函数 346
19.2 FreeRTOS空闲任务钩子函数 347
19.2.1 FreeRTOS中的钩子函数 347
19.2.2 FreeRTOS空闲任务钩子函数 347
19.3 FreeRTOS空闲任务钩子函数实验 348
19.3.1 功能设计 348
19.3.2 软件设计 348
19.3.3 下载验证 350
第20章 FreeRTOS内存管理 352
20.1 FreeRTOS内存管理简介 352
20.2 FreeRTOS内存管理算法 353
20.2.1 heap_1内存管理算法 353
20.2.2 heap_2内存管理算法 356
20.2.3 heap_3内存管理算法 363
20.2.4 heap_4内存管理算法 364
20.2.5 heap_5内存管理算法 374
20.3 FreeRTOS内存管理实验 378
20.3.1 功能设计 378
20.3.2 软件设计 378
20.3.3 下载验证 381