FreeRTOS内核实现与应用开发实战指南:基于STM刘火良杨森pdf下载pdf下载

FreeRTOS内核实现与应用开发实战指南:基于STM刘火良杨森百度网盘pdf下载

作者:
简介:本篇主要提供FreeRTOS内核实现与应用开发实战指南:基于STM刘火良杨森pdf下载
出版社:互动出版网图书专营店
出版时间:2019-03
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

 书名:  FreeRTOS内核实现与应用开发实战指南:基于STM32|8057851
 图书定价: 99元
 图书作者: 刘火良 杨森
 出版社:  机械工业出版社
 出版日期:  2019/3/15 0:00:00
 ISBN号: 9787111618256
 开本: 16开
 页数: 496
 版次: 1-1
 作者简介
刘火良 杨森 编著:暂无简介
 内容简介
本书基于野火STM32全系列开发板介绍FreeRTOS内核实现与应用开发,全书分为两部分:第一部分教你如何从0到1把FreeRTOS内核写出来,从底层的汇编开始,讲解任务如何定义、如何切换,还讲解了阻塞延时如何实现,如何支持多优先级,如何实现定时器以及时间片等FreeRTOS的核心知识点;第二部分则开始讲解FreeRTOS内核组件的应用以及如何使用FreeRTOS进行多任务编程。
本书内容翔实,案例丰富,配有大量示例代码,适合作为嵌入式领域工程师和爱好者的技术参考书,也适合相关专业的学生学习参考。
 目录

前 言
引 言
第一部分 从0到1教你写FreeRTOS内核
第1章 初识FreeRTOS 2
1.1 FreeRTOS版权 2
1.2 FreeRTOS收费问题 2
1.2.1 FreeRTOS 2
1.2.2 OpenRTOS 2
1.2.3 SaveRTOS 3
1.3 FreeRTOS资料获取 3
1.3.1 获取源码 3
1.3.2 获取书籍 4
1.3.3 快速入门 4
1.4 FreeRTOS的编程风格 5
1.4.1 数据类型 5
1.4.2 变量名 6
1.4.3 函数名 6
1.4.4 宏 7
1.4.5 格式 7
第2章 新建FreeRTOS工程—软件仿真 8
2.1 新建本地工程文件夹 8
2.2 使用KEIL新建工程 8
2.2.1 New Project 9
2.2.2 Select Device for Target 9
2.2.3 Manage Run-Time Environment 10
2.3 在KEIL工程中新建文件组 11
2.4 在KEIL工程中添加文件 11
2.5 调试配置 13
2.5.1 设置软件仿真 13
2.5.2 修改时钟大小 13
2.5.3 添加头文件路径 13
第3章 裸机系统与多任务系统 15
3.1 裸机系统 15
3.1.1 轮询系统 15
3.1.2 前后台系统 16
3.2 多任务系统 17
第4章 数据结构—列表与列表项 20
4.1 C语言链表 20
4.1.1 单向链表 20
4.1.2 双向链表 22
4.1.3 链表与数组的对比 22
4.2 FreeRTOS中链表的实现 23
4.2.1 实现链表节点 23
4.2.2 实现链表根节点 25
4.3 链表节点插入实验 31
4.4 实验现象 34
第5章 任务的定义与任务切换 35
5.1 本章目标 35
5.2 什么是任务 36
5.3 创建任务 37
5.3.1 定义任务栈 37
5.3.2 定义任务函数 38
5.3.3 定义任务控制块 39
5.3.4 实现任务创建函数 40
5.4 实现就绪列表 45
5.4.1 定义就绪列表 45
5.4.2 就绪列表初始化 45
5.4.3 将任务插入就绪列表 46
5.5 实现调度器 49
5.5.1 启动调度器 49
5.5.2 任务切换 54
5.6 main()函数 58
5.7 实验现象 61
5.8 本章涉及的汇编指令 64
第6章 临界段的保护 65
6.1 什么是临界段 65
6.2 Cortex-M内核快速关中断指令 65
6.3 关中断 66
6.3.1 不带返回值的关中断函数 66
6.3.2 带返回值的关中断函数 67
6.4 开中断 67
6.5 进入/退出临界段的宏 68
6.5.1 进入临界段 68
6.5.2 退出临界段 69
6.6 临界段代码的应用 70
6.7 实验现象 71
第7章 空闲任务与阻塞延时 72
7.1 实现空闲任务 72
7.1.1 定义空闲任务的栈 72
7.1.2 定义空闲任务的任务控制块 73
7.1.3 创建空闲任务 73
7.2 实现阻塞延时 74
7.2.1 vTaskDelay()函数 74
7.2.2 修改vTaskSwitchContext()函数 75
7.3 SysTick中断服务函数 77
7.4 SysTick初始化函数 78
7.5 main()函数 80
7.6 实验现象 83
第8章 多优先级 84
8.1 支持多优先级的方法 84
8.2 查找zuigao优先级的就绪任务相关代码 85
8.2.1 通用方法 87
8.2.2 优化方法 87
8.3 修改代码以支持多优先级 89
8.3.1 修改任务控制块 89
8.3.2 修改xTaskCreateStatic()函数 89
8.3.3 修改vTaskStartScheduler()函数 93
8.3.4 修改vTaskDelay()函数 94
8.3.5 修改vTaskSwitchContext()函数 95
8.3.6 修改xTaskIncrementTick()函数 96
8.4 main()函数 97
8.5 实验现象 100
第9章 任务延时列表 102
9.1 任务延时列表的工作原理 102
9.2 实现任务延时列表 103
9.2.1 定义任务延时列表 103
9.2.2 任务延时列表初始化 103
9.2.3 定义xNextTaskUnblock-Time 103
9.2.4 初始化xNextTaskUnblock-Time 104
9.3 修改代码以支持任务延时列表 104
9.3.1 修改vTaskDelay()函数 105
9.3.2 修改xTaskIncrementTick()函数 107
9.3.3 修改taskRESET_READY_PRIORITY()函数 109
9.4 main()函数 110
9.5 实验现象 110
第10章 时间片 111
10.1 时间片测试实验 111
10.2 main.c文件 112
10.3 实验现象 115
10.4 原理分析 116
10.4.1 taskSELECT_HIGHEST_PRIORITY_TASK()函数 116
10.4.2 taskRESET_READY_PRIORITY()函数 117
10.5 修改代码以支持优先级 118
10.5.1 修改xPortSysTick-Handler()函数 118
10.5.2 修改xTaskIncrement-Tick()函数 119
第二部分 FreeRTOS内核应用开发
第11章 移植FreeRTOS到STM32 124
11.1 获取STM32的裸机工程模板 124
11.2 下载FreeRTOS V9.0.0源码 124
11.3 FreeRTOS文件夹内容 126
11.3.1 FreeRTOS文件夹 126
11.3.2 FreeRTOS-Plus文件夹 128
11.3.3 HTML文件 129
11.4 向裸机工程中添加FreeRTOS源码 129
11.4.1 提取FreeRTOSzui简源码 129
11.4.2 复制FreeRTOS到裸机工程根目录 130
11.4.3 复制FreeRTOSConfig.h wen件到User文件夹 131
11.4.4 添加FreeRTOS源码到工程组文件夹 131
11.5 修改FreeRTOSConfig.h wen件 133
11.5.1 FreeRTOSConfig.h wen件内容 133
11.5.2 修改FreeRTOSConfig.h wen件 143
11.6 修改stm32f10x_it.c文件 147
11.7 修改main.c文件 151
11.8 下载验证 152
第12章 任务 153
12.1 硬件初始化 153
12.2 创建单任务—SRAM静态内存 155
12.2.1 定义任务函数 155
12.2.2 空闲任务与定时器任务栈函数实现 155
12.2.3 定义任务栈 157
12.2.4 定义任务控制块 157
12.2.5 静态创建任务 158
12.2.6 启动任务 159
12.2.7 main.c文件 159
12.3 下载验证SRAM静态内存单任务 164
12.4 创建单任务—SRAM动态内存 164
12.4.1 动态内存空间堆的来源 164
12.4.2 定义任务函数 165
12.4.3 定义任务栈 166
12.4.4 定义任务控制块指针 166
12.4.5 动态创建任务 166
12.4.6 启动任务 167
12.4.7 main.c文件 167
12.5 下载验证SRAM动态内存单任务 171
12.6 创建多任务—SRAM动态内存 171
12.7 下载验证SRAM动态内存多任务 175
第13章 FreeRTOS的启动流程 176
13.1 “万事俱备,只欠东风”法 176
13.2 “小心翼翼,十分谨慎”法 177
13.3 两种方法的适用情况 179
13.4 FreeRTOS的启动流程 179
13.4.1 创建任务函数xTaskCreate() 179
13.4.2 开启调度器函数vTask-StartScheduler() 181
13.4.3 main()函数 185
第14章 任务管理 188
14.1 任务的基本概念 188
14.2 任务调度器的基本概念 188
14.3 任务状态的概念 189
14.4 任务状态迁移 190
14.5 常用的任务函数 191
14.5.1 任务挂起函数 191
14.5.2 任务恢复函数 195
14.5.3 任务删除函数 203
14.5.4 任务延时函数 207
14.6 任务的设计要点 215
14.7 任务管理实验 216
14.8 实验现象 221
第15章 消息队列 222
15.1 消息队列的基本概念 222
15.2 消息队列的运作机制 222
15.3 消息队列的阻塞机制 223
15.4 消息队列的应用场景 224
15.5 消息队列控制块 224
15.6 常用的消息队列函数 226
15.6.1 消息队列动态创建函数 226
15.6.2 消息队列静态创建函数 232
15.6.3 消息队列删除函数 233
15.6.4 向消息队列发送消息函数 234
15.6.5 从消息队列读取消息函数 244
15.7 消息队列注意事项 251
15.8 消息队列实验 252
15.9 实验现象 256
第16章 信号量 258
16.1 信号量的基本概念 258
16.1.1 二值信号量 258
16.1.2 计数信号量 259
16.1.3 互斥信号量 259
16.1.4 递归信号量 259
16.2 二值信号量的应用场景 260
16.3 二值信号量的运作机制 260
16.4 计数信号量的运作机制 261
16.5 信号量控制块 262
16.6 常用的信号量函数 263
16.6.1 信号量创建函数 263
16.6.2 信号量删除函数 268
16.6.3 信号量释放函数 268
16.6.4 信号量获取函数 271
16.7 信号量实验 273
16.7.1 二值信号量同步实验 273
16.7.2 计数信号量实验 277
16.8 实验现象 282
16.8.1 二值信号量实验现象 282
16.8.2 计数信号量实验现象 283
第17章 互斥量 284
17.1 互斥量的基本概念 284
17.2 互斥量的优先级继承机制 284
17.3 互斥量的应用场景 287
17.4 互斥量的运作机制 287
17.5 互斥量控制块 288
17.6 互斥量函数 289
17.6.1 互斥量创建函数xSema-phoreCreateMutex() 289
17.6.2 递归互斥量创建函数xSemaphoreCreateRecur-siveMutex() 292
17.6.3 互斥量删除函数vSema-phoreDelete() 293
17.6.4 互斥量获取函数xSema-phoreTake() 293
17.6.5 递归互斥量获取函数xSemaphoreTakeRecur-sive() 299
17.6.6 互斥量释放函数xSema-phoreGive() 301
17.6.7 递归互斥量释放函数xSemaphoreGiveRecur-sive() 304
17.7 互斥量实验 307
17.7.1 模拟优先级翻转实验 307
17.7.2 互斥量降低优先级翻转危害实验 312
17.8 实验现象 318
17.8.1 模拟优先级翻转实验现象 318
17.8.2 互斥量降低优先级翻转危害实验现象 318
第18章 事件 320
18.1 事件的基本概念 320
18.2 事件的应用场景 321
18.3 事件的运作机制 321
18.4 事件控制块 323
18.5 事件函数 323
18.5.1 事件创建函数xEvent-GroupCreate() 323
18.5.2 事件删除函数vEvent-GroupDelete() 325
18.5.3 事件组置位函数xEvent-GroupSetBits()(任务) 326
18.5.4 事件组置位函数xEvent-GroupSetBitsFromISR()(中断) 330
18.5.5 等待事件函数xEvent-GroupWaitBits() 332
18.5.6 清除事件组指定位函数xEventGroupClearBits()与xEventGroupClearBits-FromISR() 337
18.6 事件实验 338
18.7 实验现象 343
第19章 软件定时器 344
19.1 软件定时器的基本概念 344
19.2 软件定时器的应用场景 345
19.3 软件定时器的精度 345
19.4 软件定时器的运作机制 346
19.5 软件定时器控制块 348
19.6 软件定时器函数 349
19.6.1 软件定时器创建函数 349
19.6.2 软件定时器启动函数 352
19.6.3 软件定时器停止函数 356
19.6.4 软件定时器任务 358
19.6.5 软件定时器删除函数 365
19.7 软件定时器实验 366
19.8 实验现象 371
第20章 任务通知 372
20.1 任务通知的基本概念 372
20.2 任务通知的运作机制 372
20.3 任务通知的数据结构 373
20.4 任务通知函数 374
20.4.1 发送任务通知函数 374
20.4.2 获取任务通知函数 391
20.5 任务通知实验 398
20.5.1 任务通知代替消息队列 398
20.5.2 任务通知代替二值信号量 404
20.5.3 任务通知代替计数信号量 409
20.5.4 任务通知代替事件组 414
20.6 实验现象 419
20.6.1 任务通知代替消息队列实验现象 419
20.6.2 任务通知代替二值信号量实验现象 420
20.6.3 任务通知代替计数信号量实验现象 420
20.6.4 任务通知代替事件组实验现象 421
第21章 内存管理 422
21.1 内存管理的基本概念 422
21.2 内存管理的应用场景 423
21.3 内存管理方案详解 424
21.3.1 heap_1.c 424
21.3.2 heap_2.c 428
21.3.3 heap_3.c 436
21.3.4 heap_4.c 438
21.3.5 heap_5.c 448
21.4 内存管理实验 451
21.5 实验现象 455
第22章 中断管理 456
22.1 异常与中断的基本概念 456
22.1.1 中断的介绍 457
22.1.2 和中断相关的术语 457
22.2 中断管理的运作机制 458
22.3 中断延迟的概念 459
22.4 中断管理的应用场景 460
22.5 ARM Cortex-M的中断管理 460
22.6 中断管理实验 462
22.7 实验现象 470
第23章 CPU利用率统计 471
23.1 CPU利用率的基本概念 471
23.2 CPU利用率的作用 471
23.3 CPU利用率统计 472
23.4 CPU利用率统计实验 473
23.5 实验现象 478
附录 479

 编辑推荐
从0到1教你写FreeRTOS内核,详解FreeRTOS源码如何使用。
由浅入深,基于野火STM32全系列开发板,提供完整的源代码,极具可操作性。