商品详情
书名:嵌入式实时操作系统FreeRTOS原理及应用———基于STM32微控制器
定价:49.0
ISBN:9787121424779
作者:无
版次:第1版
出版时间:2021-12
内容提要:
本书面向高职和应用型本科的学生,以及嵌入式产品开发的工程技术人员。以通用的STM32开发板为平台,运行freeRTOS操作系统的智能手表作教学项目,贯穿书本内容的编写。全书共分12章,以智能手表项目为主线,系统介绍了嵌入式实时操作系统的概念,freeRTOS任务创建、任务调度、任务同步与消息传递,软件定时器、事件通知等知识。在每个知识点的学习上,均安排有智能手表对应的功能单元,来帮助读者理解知识点,并掌握其实际应用。项目**,边学边做,学以致用是本书的一大特色。
作者简介:
张超,男,硕士研究生,系统分析师,广东梅州人,1971年10月出生。超过20年企业工作经验,主持嵌入式产品的研制、开发三十多项。现任职于中山职业技术学院,主讲《C语言程序设计》、《MCS-51单片机技术》、《STM32单片机技术应用》、《嵌入式产品开发与实践》、《嵌入式实时操作系统》等课程。指导学生竞赛,获全国大学生电子设计大赛、全国职业院校技能大赛嵌入式应用开发赛项等***奖励多项。
目录:
第1章 嵌入式实时操作系统介绍 1
1.1 嵌入式系统和嵌入式操作系统 1
1.1.1 嵌入式系统的基本概念 1
1.1.2 嵌入式操作系统 2
1.1.3 实时操作系统 2
1.1.4 嵌入式实时操作系统 3
1.2 嵌入式实时操作系统FreeRTOS简介 5
1.2.1 FreeRTOS的特点 5
1.2.2 FreeRTOS的商业许可 5
1.2.3 选择FreeRTOS的理由 6
1.3 总结 7
思考与练习 7
第2章 FreeRTOS在STM32微控制器上的移植 8
2.1 文件准备 8
2.1.1 FreeRTOS源码 9
2.1.2 基础工程 12
2.2 FreeRTOS移植 15
2.2.1 复制FreeRTOS源码 15
2.2.2 向工程中添加.c文件 16
2.2.3 配置头文件包含路径 17
2.2.4 配置FreeRTOS 17
2.2.5 修改stm32f4xx_it.c文件 19
2.2.6 编译项目 19
2.3 移植验证 20
2.3.1 引入FreeRTOS相关头文件 20
2.3.2 编写测试任务函数 20
2.3.3 创建测试任务 21
2.3.4 开启调度器 21
2.3.5 下载测试 22
2.4 添加串口打印功能 22
2.4.1 串口硬件连接 22
2.4.2 初始化串口 23
2.4.3 下载测试 24
2.5 总结 25
思考与练习 25
第3章 FreeRTOS的裁剪和配置 26
3.1 基础配置 26
3.1.1 configUSE_PREEMPTION 27
3.1.2 configUSE_PORT_OPTIMISED_TASK_SELECTION 27
3.1.3 configCPU_CLOCK_HZ 27
3.1.4 configTICK_RATE_HZ 27
3.1.5 configMAX_PRIORITIES 27
3.1.6 configMINIMAL_STACK_SIZE 27
3.1.7 configTOTAL_HEAP_SIZE 28
3.1.8 configUSE_16_BIT_TICKS 28
3.1.9 configIDLE_SHOULD_YIELD 28
3.1.10 configMAX_TASK_NAME_LEN 28
3.1.11 configUSE_TICKLESS_IDLE 28
3.1.12 关于列队、信号量和任务通知 29
3.1.13 关于钩子函数 29
3.2 FreeRTOS中断配置 29
3.2.1 configPRIO_BITS 29
3.2.2 configLIBRARY_LOWEST_INTERRUPT_PRIORITY 30
3.2.3 configKERNEL_INTERRUPT_PRIORITY 30
3.2.4 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 30
3.2.5 configMAX_SYSCALL_INTERRUPT_PRIORITY 30
3.3 可选API函数配置 31
3.4 其他配置 31
3.4.1 协程相关 31
3.4.2 任务运行信息相关 31
3.4.3 软件定时器相关 32
3.4.4 断言 32
3.4.5 中断服务函数 33
3.5 FreeRTOSConfig.h头文件参考配置 33
3.6 总结 35
思考与练习 36
第4章 FreeRTOS任务基础 37
4.1 FreeRTOS任务 37
4.1.1 任务的特性 38
4.1.2 任务的状态 39
4.1.3 任务的优先级 39
4.1.4 任务堆栈 40
4.1.5 任务控制块 40
4.1.6 列表和列表项 41
4.2 任务创建和删除 44
4.2.1 任务函数 45
4.2.2 任务创建和删除函数 45
4.2.3 用动态内存分配方法创建任务 46
4.2.4 用静态内存分配方法创建任务 47
4.2.5 任务删除 48
4.3 任务创建与删除示例 49
4.3.1 组织代码 49
4.3.2 编写LED0任务函数 49
4.3.3 编写LED1任务函数 50
4.3.4 创建任务 51
4.3.5 修改main.c文件 51
4.3.6 下载测试 53
4.4 总结 53
思考与练习 54
第5章 FreeRTOS任务调度 55
5.1 开启调度器 55
5.1.1 调度器开启函数 55
5.1.2 调度器开启过程 57
5.1.3 启动**个任务 57
5.2 任务的挂起和恢复 58
5.2.1 任务的挂起 58
5.2.2 任务的恢复 60
5.2.3 任务挂起和恢复示例 62
5.3 任务的调度 64
5.3.1 FreeRTOS任务切换场合 65
5.3.2 PendSV中断 66
5.3.3 PendSV中断服务函数 67
5.3.4 查找下一个要运行的任务 69
5.3.5 FreeRTOS时间片调度 71
5.3.6 时间片调度示例 72
5.3.7 空闲任务 76
5.4 FreeRTOS内核函数 78
5.4.1 临界段操作函数 79
5.4.2 挂起和恢复调度器函数 80
5.4.3 任务切换函数 81
5.4.4 系统时钟节拍追加 81
5.4.5 内核函数使用示例 81
5.5 总结 84
思考与练习 84
第6章 FreeRTOS任务函数 85
6.1 延时函数 86
6.1.1 系统时钟节拍 86
6.1.2 相对延时 86
6.1.3 绝对延时 87
6.1.4 延时函数使用示例 88
6.2 优先级控制 91
6.2.1 获取任务优先级 91
6.2.2 设置任务优先级 91
6.2.3 改变任务优先级示例 91
6.3 获取任务状态信息 96
6.3.1 任务状态信息获取函数 96
6.3.2 任务状态信息获取示例 98
6.4 统计任务运行时间信息 101
6.4.1 任务运行时间信息统计函数 101
6.4.2 任务运行时间信息统计示例 101
6.5 总结 106
思考与练习 107
第7章 FreeRTOS队列与消息传递 108
7.1 FreeRTOS队列及其结构 108
7.1.1 FreeRTOS队列特性 108
7.1.2 队列结构体 110
7.2 队列操作 111
7.2.1 队列创建 111
7.2.2 入队操作 112
7.2.3 出队操作 114
7.2.4 其他队列操作函数 116
7.3 用队列实现串口守护任务 116
7.3.1 守护任务 116
7.3.2 串口守护任务示例 116
7.4 总结 120
思考与练习 120
第8章 FreeRTOS信号量与任务同步 121
8.1 二值信号量 121
8.1.1 创建二值信号量 122
8.1.2 释放二值信号量 123
8.1.3 获取二值信号量 124
8.1.4 用二值信号量进行任务同步 125
8.2 计数信号量 131
8.2.1 创建计数信号量 131
8.2.2 计数信号量的释放和获取 131
8.2.3 用计数信号量进行任务同步 131
8.3 互斥信号量 133
8.3.1 创建互斥信号量 135
8.3.2 互斥信号量的释放和获取 135
8.3.3 优先级翻转 136
8.3.4 优先级翻转示例 136
8.3.5 用互斥信号量抑制优先级翻转 140
8.4 递归互斥信号量 142
8.5 总结 143
思考与练习 143
第9章 FreeRTOS事件标志组 144
9.1 事件标志组 144
9.1.1 创建事件标志组 144
9.1.2 设置事件标志位 145
9.1.3 获取事件标志组值 146
9.1.4 等待指定的事件标志位 147
9.2 用事件标志组进行任务同步 147
9.2.1 配置FreeRTOS 148
9.2.2 配置定时器 148
9.2.3 任务函数 149
9.2.4 创建任务 151
9.2.5 下载测试 152
9.3 总结 153
思考与练习 153
第10章 FreeRTOS任务通知 154
10.1 发送和获取任务通知 154
10.1.1 发送任务通知 154
10.1.2 获取任务通知 156
10.2 任务通知使用 157
10.2.1 用任务通知模拟二值信号量 157
10.2.2 用任务通知模拟事件标志组 160
10.3 总结 163
思考与练习 163
第11章 FreeRTOS软件定时器 164
11.1 软件定时器服务任务 164
11.2 软件定时器操作 165
11.2.1 单次定时与周期定时 165
11.2.2 创建软件定时器 165
11.2.3 启动软件定时器 166
11.2.4 停止软件定时器 167
11.3 软件定时器使用示例 168
11.3.1 配置FreeRTOS 169
11.3.2 软件定时器回调函数 170
11.3.3 任务函数 170
11.3.4 创建软件定时器和任务 172
11.3.5 下载测试 173
11.4 总结 174
思考与练习 174
第12章 FreeRTOS内存管理 175
12.1 FreeRTOS内存分配方法 175
12.1.1 heap_1.c动态内存管理方法 175
12.1.2 heap_2.c动态内存管理方法 176
12.1.3 heap_3.c动态内存管理方法 176
12.1.4 heap_4.c动态内存管理方法 177
12.1.5 heap_5.c动态内存管理方法 177
12.2 FreeRTOS内存管理示例 177
12.3 总结 180
思考与练习 180
第13章 智能手表FreeRTOS实现 182
13.1 功能设计 182
13.1.1 时间显示 183
13.1.2 时间设置 184
13.1.3 闹钟设置 184
13.1.4 闹钟响铃 184
13.1.5 秒表计时 185
13.1.6 心率测量 185
13.1.7 运动计步 186
13.1.8 硬件信息 186
13.2 硬件设计 187
13.2.1 硬件系统框图 188
13.2.2 单元电路 188
13.2.3 硬件原理图 194
13.3 FreeRTOS工程 194
13.3.1 复制并新建FreeRTOS工程 194
13.3.2 智能手表FreeRTOS配置 196
13.3.3 用STM32CubeMX生成初始化代码 196
13.4 算法及驱动 199
13.4.1 OLED12864模块 199
13.4.2 AHT10 207
13.4.3 心率测量 210
13.4.4 运动计步 214
13.4.5 蓝牙传输 223
13.4.6 多功能按键 225
13.4.7 实时时钟 226
13.5 任务设计 227
13.5.1 按键任务 227
13.5.2 时间显示任务 228
13.5.3 时间设置任务 229
13.5.4 闹钟设置任务 231
13.5.5 闹钟时间检查任务 233
13.5.6 闹钟响铃任务 234
13.5.7 秒表计时任务 235
13.5.8 心率测量任务 237
13.5.9 计步后台任务 239
13.5.10 计步显示任务 239
13.5.11 任务信息获取任务 241
13.6 任务创建、调度与同步 243
13.6.1 任务创建及调度器开启 244
13.6.2 抢占式调度提高系统响应性能 247
13.6.3 时间片调度让任务共享优先级 247
13.6.4 用任务挂起和恢复实现互斥访问 247
13.6.5 用互斥信号量共享蓝牙资源 249
13.6.6 用任务通知同步闹钟响铃任务 249
13.6.7 用队列共享按键功能 250
13.6.8 软件定时器使用 250
13.7 调试与优化 251
附录A FreeRTOS编码和命名规则 254
附录B 示例程序和项目所使用的编译环境 256
附录C 项目实施对开发板的要求 258
附录D 项目实施所需驱动文件 259
参考文献 260
定价:49.0
ISBN:9787121424779
作者:无
版次:第1版
出版时间:2021-12
内容提要:
本书面向高职和应用型本科的学生,以及嵌入式产品开发的工程技术人员。以通用的STM32开发板为平台,运行freeRTOS操作系统的智能手表作教学项目,贯穿书本内容的编写。全书共分12章,以智能手表项目为主线,系统介绍了嵌入式实时操作系统的概念,freeRTOS任务创建、任务调度、任务同步与消息传递,软件定时器、事件通知等知识。在每个知识点的学习上,均安排有智能手表对应的功能单元,来帮助读者理解知识点,并掌握其实际应用。项目**,边学边做,学以致用是本书的一大特色。
作者简介:
张超,男,硕士研究生,系统分析师,广东梅州人,1971年10月出生。超过20年企业工作经验,主持嵌入式产品的研制、开发三十多项。现任职于中山职业技术学院,主讲《C语言程序设计》、《MCS-51单片机技术》、《STM32单片机技术应用》、《嵌入式产品开发与实践》、《嵌入式实时操作系统》等课程。指导学生竞赛,获全国大学生电子设计大赛、全国职业院校技能大赛嵌入式应用开发赛项等***奖励多项。
目录:
第1章 嵌入式实时操作系统介绍 1
1.1 嵌入式系统和嵌入式操作系统 1
1.1.1 嵌入式系统的基本概念 1
1.1.2 嵌入式操作系统 2
1.1.3 实时操作系统 2
1.1.4 嵌入式实时操作系统 3
1.2 嵌入式实时操作系统FreeRTOS简介 5
1.2.1 FreeRTOS的特点 5
1.2.2 FreeRTOS的商业许可 5
1.2.3 选择FreeRTOS的理由 6
1.3 总结 7
思考与练习 7
第2章 FreeRTOS在STM32微控制器上的移植 8
2.1 文件准备 8
2.1.1 FreeRTOS源码 9
2.1.2 基础工程 12
2.2 FreeRTOS移植 15
2.2.1 复制FreeRTOS源码 15
2.2.2 向工程中添加.c文件 16
2.2.3 配置头文件包含路径 17
2.2.4 配置FreeRTOS 17
2.2.5 修改stm32f4xx_it.c文件 19
2.2.6 编译项目 19
2.3 移植验证 20
2.3.1 引入FreeRTOS相关头文件 20
2.3.2 编写测试任务函数 20
2.3.3 创建测试任务 21
2.3.4 开启调度器 21
2.3.5 下载测试 22
2.4 添加串口打印功能 22
2.4.1 串口硬件连接 22
2.4.2 初始化串口 23
2.4.3 下载测试 24
2.5 总结 25
思考与练习 25
第3章 FreeRTOS的裁剪和配置 26
3.1 基础配置 26
3.1.1 configUSE_PREEMPTION 27
3.1.2 configUSE_PORT_OPTIMISED_TASK_SELECTION 27
3.1.3 configCPU_CLOCK_HZ 27
3.1.4 configTICK_RATE_HZ 27
3.1.5 configMAX_PRIORITIES 27
3.1.6 configMINIMAL_STACK_SIZE 27
3.1.7 configTOTAL_HEAP_SIZE 28
3.1.8 configUSE_16_BIT_TICKS 28
3.1.9 configIDLE_SHOULD_YIELD 28
3.1.10 configMAX_TASK_NAME_LEN 28
3.1.11 configUSE_TICKLESS_IDLE 28
3.1.12 关于列队、信号量和任务通知 29
3.1.13 关于钩子函数 29
3.2 FreeRTOS中断配置 29
3.2.1 configPRIO_BITS 29
3.2.2 configLIBRARY_LOWEST_INTERRUPT_PRIORITY 30
3.2.3 configKERNEL_INTERRUPT_PRIORITY 30
3.2.4 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 30
3.2.5 configMAX_SYSCALL_INTERRUPT_PRIORITY 30
3.3 可选API函数配置 31
3.4 其他配置 31
3.4.1 协程相关 31
3.4.2 任务运行信息相关 31
3.4.3 软件定时器相关 32
3.4.4 断言 32
3.4.5 中断服务函数 33
3.5 FreeRTOSConfig.h头文件参考配置 33
3.6 总结 35
思考与练习 36
第4章 FreeRTOS任务基础 37
4.1 FreeRTOS任务 37
4.1.1 任务的特性 38
4.1.2 任务的状态 39
4.1.3 任务的优先级 39
4.1.4 任务堆栈 40
4.1.5 任务控制块 40
4.1.6 列表和列表项 41
4.2 任务创建和删除 44
4.2.1 任务函数 45
4.2.2 任务创建和删除函数 45
4.2.3 用动态内存分配方法创建任务 46
4.2.4 用静态内存分配方法创建任务 47
4.2.5 任务删除 48
4.3 任务创建与删除示例 49
4.3.1 组织代码 49
4.3.2 编写LED0任务函数 49
4.3.3 编写LED1任务函数 50
4.3.4 创建任务 51
4.3.5 修改main.c文件 51
4.3.6 下载测试 53
4.4 总结 53
思考与练习 54
第5章 FreeRTOS任务调度 55
5.1 开启调度器 55
5.1.1 调度器开启函数 55
5.1.2 调度器开启过程 57
5.1.3 启动**个任务 57
5.2 任务的挂起和恢复 58
5.2.1 任务的挂起 58
5.2.2 任务的恢复 60
5.2.3 任务挂起和恢复示例 62
5.3 任务的调度 64
5.3.1 FreeRTOS任务切换场合 65
5.3.2 PendSV中断 66
5.3.3 PendSV中断服务函数 67
5.3.4 查找下一个要运行的任务 69
5.3.5 FreeRTOS时间片调度 71
5.3.6 时间片调度示例 72
5.3.7 空闲任务 76
5.4 FreeRTOS内核函数 78
5.4.1 临界段操作函数 79
5.4.2 挂起和恢复调度器函数 80
5.4.3 任务切换函数 81
5.4.4 系统时钟节拍追加 81
5.4.5 内核函数使用示例 81
5.5 总结 84
思考与练习 84
第6章 FreeRTOS任务函数 85
6.1 延时函数 86
6.1.1 系统时钟节拍 86
6.1.2 相对延时 86
6.1.3 绝对延时 87
6.1.4 延时函数使用示例 88
6.2 优先级控制 91
6.2.1 获取任务优先级 91
6.2.2 设置任务优先级 91
6.2.3 改变任务优先级示例 91
6.3 获取任务状态信息 96
6.3.1 任务状态信息获取函数 96
6.3.2 任务状态信息获取示例 98
6.4 统计任务运行时间信息 101
6.4.1 任务运行时间信息统计函数 101
6.4.2 任务运行时间信息统计示例 101
6.5 总结 106
思考与练习 107
第7章 FreeRTOS队列与消息传递 108
7.1 FreeRTOS队列及其结构 108
7.1.1 FreeRTOS队列特性 108
7.1.2 队列结构体 110
7.2 队列操作 111
7.2.1 队列创建 111
7.2.2 入队操作 112
7.2.3 出队操作 114
7.2.4 其他队列操作函数 116
7.3 用队列实现串口守护任务 116
7.3.1 守护任务 116
7.3.2 串口守护任务示例 116
7.4 总结 120
思考与练习 120
第8章 FreeRTOS信号量与任务同步 121
8.1 二值信号量 121
8.1.1 创建二值信号量 122
8.1.2 释放二值信号量 123
8.1.3 获取二值信号量 124
8.1.4 用二值信号量进行任务同步 125
8.2 计数信号量 131
8.2.1 创建计数信号量 131
8.2.2 计数信号量的释放和获取 131
8.2.3 用计数信号量进行任务同步 131
8.3 互斥信号量 133
8.3.1 创建互斥信号量 135
8.3.2 互斥信号量的释放和获取 135
8.3.3 优先级翻转 136
8.3.4 优先级翻转示例 136
8.3.5 用互斥信号量抑制优先级翻转 140
8.4 递归互斥信号量 142
8.5 总结 143
思考与练习 143
第9章 FreeRTOS事件标志组 144
9.1 事件标志组 144
9.1.1 创建事件标志组 144
9.1.2 设置事件标志位 145
9.1.3 获取事件标志组值 146
9.1.4 等待指定的事件标志位 147
9.2 用事件标志组进行任务同步 147
9.2.1 配置FreeRTOS 148
9.2.2 配置定时器 148
9.2.3 任务函数 149
9.2.4 创建任务 151
9.2.5 下载测试 152
9.3 总结 153
思考与练习 153
第10章 FreeRTOS任务通知 154
10.1 发送和获取任务通知 154
10.1.1 发送任务通知 154
10.1.2 获取任务通知 156
10.2 任务通知使用 157
10.2.1 用任务通知模拟二值信号量 157
10.2.2 用任务通知模拟事件标志组 160
10.3 总结 163
思考与练习 163
第11章 FreeRTOS软件定时器 164
11.1 软件定时器服务任务 164
11.2 软件定时器操作 165
11.2.1 单次定时与周期定时 165
11.2.2 创建软件定时器 165
11.2.3 启动软件定时器 166
11.2.4 停止软件定时器 167
11.3 软件定时器使用示例 168
11.3.1 配置FreeRTOS 169
11.3.2 软件定时器回调函数 170
11.3.3 任务函数 170
11.3.4 创建软件定时器和任务 172
11.3.5 下载测试 173
11.4 总结 174
思考与练习 174
第12章 FreeRTOS内存管理 175
12.1 FreeRTOS内存分配方法 175
12.1.1 heap_1.c动态内存管理方法 175
12.1.2 heap_2.c动态内存管理方法 176
12.1.3 heap_3.c动态内存管理方法 176
12.1.4 heap_4.c动态内存管理方法 177
12.1.5 heap_5.c动态内存管理方法 177
12.2 FreeRTOS内存管理示例 177
12.3 总结 180
思考与练习 180
第13章 智能手表FreeRTOS实现 182
13.1 功能设计 182
13.1.1 时间显示 183
13.1.2 时间设置 184
13.1.3 闹钟设置 184
13.1.4 闹钟响铃 184
13.1.5 秒表计时 185
13.1.6 心率测量 185
13.1.7 运动计步 186
13.1.8 硬件信息 186
13.2 硬件设计 187
13.2.1 硬件系统框图 188
13.2.2 单元电路 188
13.2.3 硬件原理图 194
13.3 FreeRTOS工程 194
13.3.1 复制并新建FreeRTOS工程 194
13.3.2 智能手表FreeRTOS配置 196
13.3.3 用STM32CubeMX生成初始化代码 196
13.4 算法及驱动 199
13.4.1 OLED12864模块 199
13.4.2 AHT10 207
13.4.3 心率测量 210
13.4.4 运动计步 214
13.4.5 蓝牙传输 223
13.4.6 多功能按键 225
13.4.7 实时时钟 226
13.5 任务设计 227
13.5.1 按键任务 227
13.5.2 时间显示任务 228
13.5.3 时间设置任务 229
13.5.4 闹钟设置任务 231
13.5.5 闹钟时间检查任务 233
13.5.6 闹钟响铃任务 234
13.5.7 秒表计时任务 235
13.5.8 心率测量任务 237
13.5.9 计步后台任务 239
13.5.10 计步显示任务 239
13.5.11 任务信息获取任务 241
13.6 任务创建、调度与同步 243
13.6.1 任务创建及调度器开启 244
13.6.2 抢占式调度提高系统响应性能 247
13.6.3 时间片调度让任务共享优先级 247
13.6.4 用任务挂起和恢复实现互斥访问 247
13.6.5 用互斥信号量共享蓝牙资源 249
13.6.6 用任务通知同步闹钟响铃任务 249
13.6.7 用队列共享按键功能 250
13.6.8 软件定时器使用 250
13.7 调试与优化 251
附录A FreeRTOS编码和命名规则 254
附录B 示例程序和项目所使用的编译环境 256
附录C 项目实施对开发板的要求 258
附录D 项目实施所需驱动文件 259
参考文献 260
- 电子工业出版社有限公司
- 电子工业出版社有限公司有赞官方供货商,为客户提供一流的知识产品及服务。
- 扫描二维码,访问我们的微信店铺