[套装书]μC/OS-III内核实现与应用开发实战指南+FreeRTOS内核实现与应用开发实战指南+RT-Thread内核实现与应用开发实战指南(3册)

作者
刘火良 杨森 等
丛书名
电子与嵌入式系统设计丛书
出版社
机械工业出版社
ISBN
9782112291122
简要
简介
内容简介书籍计算机书籍 ---------------------------8060477 - μC/OS-III内核实现与应用开发实战指南:基于STM32--------------------------- 本书基于野火STM32全系列开发板介绍uC/OS-III内核实现与应用开发,全书分为两部分,第一部分先教你如何从0到1把uC/OS-III内核写出来,从底层的汇编开始讲解任务如何定义、如何切换,还讲解了阻塞延时如何实现、如何支持多优先级、如何实现任务延时列表以及时间片等uC/OS的核心知识点;第二部分讲解uC/OS-III内核组件的应用以及使用uC/OS-III进行多任务编程。 本书内容翔实,案例丰富,配有大量示例代码,适合作为嵌入式领域科技工作者的参考书,也适合相关专业的学生学习参考。 ---------------------------8057851 - FreeRTOS内核实现与应用开发实战指南:基于STM32--------------------------- 本书基于野火STM32全系列开发板介绍FreeRTOS内核实现与应用开发,全书分为两部分:第一部分教你如何从0到1把FreeRTOS内核写出来,从底层的汇编开始,讲解任务如何定义、如何切换,还讲解了阻塞延时如何实现,如何支持多优先级,如何实现定时器以及时间片等FreeRTOS的核心知识点;第二部分则开始讲解FreeRTOS内核组件的应用以及如何使用FreeRTOS进行多任务编程。 本书内容翔实,案例丰富,配有大量示例代码,适合作为嵌入式领域工程师和爱好者的技术参考书,也适合相关专业的学生学习参考。 ---------------------------8054932 - RT-Thread内核实现与应用开发实战指南:基于STM32--------------------------- . 本书基于野火STM32全系列开发板介绍RT-Thread内核实现与应用开发,全书分为两部分:第一部分教你如何从0到1把RT-Thread内核写出来,从底层的汇编开始讲解线程如何定义、如何切换,还讲解了阻塞延时如何实现、如何支持多优先级、如何实现定时器以及时间片等RT-Thread的核心知识点;第二部分则讲解RT-Thread内核组件的应用以及如何使用RT-Thread进行多线程编程。 本书内容翔实,案例丰富,配有大量示例代码,适合作为嵌入式领域科技工作者的参考书,也适合相关专业学生学习参考。
目录
[套装书具体书目]
8054932 - RT-Thread内核实现与应用开发实战指南:基于STM32 - 9787111613664 - 机械工业出版社 - 定价 99
8057851 - FreeRTOS内核实现与应用开发实战指南:基于STM32 - 9787111618256 - 机械工业出版社 - 定价 99
8060477 - μC/OS-III内核实现与应用开发实战指南:基于STM32 - 9787111628248 - 机械工业出版社 - 定价 129



---------------------------8060477 - μC/OS-III内核实现与应用开发实战指南:基于STM32---------------------------


前言
引言
第一部分 从0到1教你写
C/OS内核
第1章 新建工程—软件仿真 2
1.1 新建本地工程文件夹 2
1.2 使用KEIL新建工程 2
1.2.1 New Project 2
1.2.2 Select Device For Target 3
1.2.3 Manage Run-Time Environment 3
1.3 在KEIL工程中新建文件组 4
1.4 在KEIL工程中添加文件 4
1.5 调试配置 6
1.5.1 设置软件仿真 6
1.5.2 修改时钟大小 6
1.5.3 添加头文件路径 7
第2章 裸机系统与多任务系统 8
2.1 裸机系统 8
2.1.1 轮询系统 8
2.1.2 前后台系统 9
2.2 多任务系统 10
第3章 任务的定义与任务切换 13
3.1 多任务系统中任务的概念 14
3.2 创建任务 15
3.2.1 定义任务栈 15
3.2.2 定义任务函数 16
3.2.3 定义任务控制块 17
3.2.4 实现任务创建函数 18
3.3 操作系统初始化 22
3.4 启动系统 24
3.5 任务切换 27
3.6 main()函数 33
3.7 实验现象 37
第4章 任务时间片运行 39
4.1 SysTick简介 39
4.2 初始化SysTick 40
4.3 编写SysTick中断服务函数 41
4.4 main()函数 42
4.5 实验现象 44
第5章 空闲任务与阻塞延时 45
5.1 实现空闲任务 45
5.1.1 定义空闲任务栈 45
5.1.2 定义空闲任务的任务控制块 46
5.1.3 定义空闲任务函数 47
5.1.4 空闲任务初始化 47
5.2 实现阻塞延时 48
5.3 main()函数 50
5.4 实验现象 52
第6章 时间戳 53
6.1 时间戳简介 53
6.2 时间戳的实现 53
6.3 时间戳代码 54
6.3.1 CPU_Init()函数 54
6.3.2 CPU_TS_Init()函数 55
6.3.3 CPU_TS_TmrInit()函数 56
6.3.4 BSP_CPU_ClkFreq()函数 57
6.3.5 CPU_TS_TmrFreqSet()函数 58
6.3.6 CPU_TS_TmrRd()函数 58
6.3.7 OS_TS_GET()函数 59
6.4 main()函数 59
6.5 实验现象 61
第7章 临界段 62
7.1 临界段简介 62
7.2 Cortex-M内核快速关中断指令 62
7.3 关中断 63
7.4 开中断 63
7.5 临界段代码的应用 64
7.6 测量关中断时间 68
7.6.1 测量关中断时间初始化 68
7.6.2 测量最大关中断时间 69
7.6.3 获取最大关中断时间 70
7.7 main()函数 71
7.8 实验现象 71
第8章 就绪列表 72
8.1 优先级表的定义及函数 72
8.2 就绪列表的定义及函数 80
8.3 main()函数 88
8.4 实验现象 88
第9章 多优先级 89
9.1 定义优先级相关全局变量 89
9.2 修改OSInit()函数 89
9.3 修改任务控制块 90
9.4 修改OSTaskCreate()函数 90
9.5 修改OS_IdleTaskInit()函数 92
9.6 修改OSStart()函数 93
9.7 修改PendSV_Handler()函数 93
9.8 修改OSTimeDly()函数 94
9.9 修改OSSched()函数 95
9.10 修改OSTimeTick()函数 97
9.11 main()函数 98
9.12 实验现象 101
第10章 时基列表 103
10.1 实现时基列表 103
10.1.1 定义时基列表变量 103
10.1.2 修改任务控制块 104
10.1.3 实现时基列表相关函数 106
10.2 修改OSTimeDly()函数 113
10.3 修改OSTimeTick()函数 114
10.4 main()函数 114
10.5 实验现象 114
第11章 时间片 115
11.1 实现时间片 115
11.1.1 修改任务控制块 115
11.1.2 实现时间片调度函数 116
11.2 修改OSTimeTick()函数 118
11.3 修改OSTaskCreate()函数 118
11.4 修改OS_IdleTaskInit()函数 120
11.5 main()函数 120
11.6 实验现象 122
第12章 任务的挂起和恢复 124
12.1 实现任务的挂起和恢复 124
12.1.1 定义任务的状态 124
12.1.2 修改任务控制块 125
12.1.3 编写任务挂起和恢复函数 126
12.2 main()函数 131
12.3 实验现象 133
第13章 任务的删除 134
13.1 实现任务删除 134
13.2 main()函数 136
13.3 实验现象 136
第二部分 C/OS-III内核
应用开发
第14章 移植C/OS-III到STM32 138
14.1 获取STM32的裸机工程模板 138
14.2 下载C/OS-III源码 138
14.3 C/OS-III源码文件介绍 141
14.3.1 EvalBoards 141
14.3.2 C-CPU 141
14.3.3 C-LIB 143
14.3.4 C/OS-III 143
14.4 移植到STM32工程 145
14.4.1 在工程中添加文件分组 145
14.4.2 添加文件到对应分组 145
14.4.3 添加头文件路径到工程中 146
14.4.4 具体的工程文件修改 147
14.4.5 修改源码中的bsp.c与bsp.h文件 149
14.5 按需配置最适合的工程 151
14.5.1 os_cfg.h 151
14.5.2 cpu_cfg.h 153
14.5.3 os_cfg_app.h 154
14.6 修改app.c 155
14.7 下载验证 157
第15章 创建任务 158
15.1 硬件初始化 158
15.2 创建单任务 160
15.2.1 定义任务栈 160
15.2.2 定义任务控制块 160
15.2.3 定义任务主体函数 160
15.2.4 创建任务 161
15.2.5 启动任务 163
15.2.6 app.c 163
15.3 下载验证单任务 166
15.4 创建多任务 166
15.5 下载验证多任务 171
第16章 C/OS-III的启动流程 172
16.1 “万事俱备,只欠东风”法 172
16.2 “小心翼翼,十分谨慎”法 173
16.3 两种方法的适用情况 175
16.4 系统的启动 175
16.4.1 系统初始化 175
16.4.2 CPU初始化 179
16.4.3 SysTick初始化 182
16.4.4 内存初始化 183
16.4.5 OSStart()函数 183
16.4.6 app.c 184
第17章 任务管理 187
17.1 任务的基本概念 187
17.2 任务调度器的基本概念 188
17.3 任务状态迁移 188
17.4 C/OS的任务状态 190
17.5 常用的任务函数 190
17.5.1 任务挂起函数OS_TaskSuspend() 191
17.5.2 任务恢复函数 OSTaskResume() 194
17.5.3 任务删除函数OSTaskDel() 198
17.5.4 任务延时函数 201
17.6 任务的设计要点 212
17.7 任务管理实验 213
17.8 实验现象 222
第18章 消息队列 223
18.1 消息队列的基本概念 223
18.2 消息队列的工作过程 224
18.2.1 消息池初始化 224
18.2.2 消息队列的运作机制 226
18.3 消息队列的阻塞机制 227
18.4 消息队列的应用场景 227
18.5 消息队列的结构 228
18.6 消息队列常用函数 230
18.6.1 消息队列创建函数OSQCreate() 230
18.6.2 消息队列删除函数OSQDel() 233
18.6.3 消息队列发送函数OSQPost() 239
18.6.4 消息队列获取函数OSQPend() 249
18.7 使用消息队列的注意事项 256
18.8 消息队列实验 257
18.9 实验现象 263
第19章 信号量 264
19.1 信号量的基本概念 264
19.1.1 二值信号量 264
19.1.2 计数信号量 265
19.2 信号量的应用场景 265
19.3 二值信号量的运作机制 266
19.4 计数信号量的运作机制 267
19.5 信号量控制块 267
19.6 信号量函数 268
19.6.1 信号量创建函数 OSSemCreate() 268
19.6.2 信号量删除函数OSSemDel() 271
19.6.3 信号量释放函数OSSemPost() 275
19.6.4 信号量获取函数OSSemPend() 280
19.7 使用信号量的注意事项 285
19.8 信号量实验 286
19.8.1 二值信号量同步实验 286
19.8.2 计数信号量实验 292
19.9 实验现象 298
19.9.1 二值信号量同步实验现象 298
19.9.2 计数信号量实验现象 299
第20章 互斥量 300
20.1 互斥量的基本概念 300
20.2 互斥量的优先级继承机制 300
20.3 互斥量的应用场景 303
20.4 互斥量的运作机制 303
20.5 互斥量控制块 304
20.6 互斥量函数 306
20.6.1 创建互斥量函数OSMutexCreate() 306
20.6.2 删除互斥量函数OSMutexDel() 308
20.6.3 获取互斥量函数OSMutexPend() 314
20.6.4 释放互斥量函数OSMutexPost() 320
20.7 互斥量相关实验 324
20.7.1 模拟优先级翻转实验 324
20.7.2 互斥量实验 330
20.8 实验现象 336
20.8.1 模拟优先级翻转实验现象 336
20.8.2 互斥量实验现象 336
第21章 事件 338
21.1 事件的基本概念 338
21.2 事件的应用场景 339
21.3 事件的运作机制 339
21.4 事件控制块 341
21.5 事件函数 342
21.5.1 事件创建函数OSFlagCreate() 342
21.5.2 事件删除函数OSFlagDel() 344
21.5.3 事件设置函数OSFlagPost() 348
21.5.4 事件等待函数OSFlagPend() 355
21.6 事件实验 366
21.7 实验现象 371
第22章 软件定时器 372
22.1 软件定时器的基本概念 372
22.2 软件定时器的应用场景 374
22.3 软件定时器的精度 374
22.4 软件定时器控制块 375
22.5 软件定时器函数 376
22.5.1 软件定时器创建函数 OSTmrCreate() 376
22.5.2 软件定时器启动函数OSTmrStart() 379
22.5.3 软件定时器列表管理 384
22.5.4 软件定时器停止函数OSTmrStop() 387
22.5.5 软件定时器删除函数OSTmrDel() 391
22.6 软件定时器任务 393
22.7 软件定时器实验 398
22.8 实验现象 403
第23章 任务信号量 405
23.1 任务信号量的基本概念 405
23.2 任务信号量函数 406
23.2.1 任务信号量释放函数OSTaskSemPost() 406
23.2.2 任务信号量获取函数OSTaskSemPend() 410
23.3 任务信号量实验 414
23.3.1 任务信号量代替二值信号量实验 414
23.3.2 任务信号量代替计数信号量实验 419
23.4 实验现象 424
23.4.1 任务信号量代替二值信号量实验现象 424
23.4.2 任务信号量代替计数信号量实验现象 425
第24章 任务消息队列 426
24.1 任务消息队列的基本概念 426
24.2 任务消息队列函数 427
24.2.1 任务消息队列发送函数OSTaskQPost() 427
24.2.2 任务消息队列获取函数OSTaskQPend() 431
24.3 任务消息队列实验 435
24.4 实验现象 439
第25章 内存管理 440
25.1 内存管理的基本概念 440
25.2 内存管理的运作机制 441
25.3 内存管理的应用场景 443
25.4 内存管理函数 443
25.4.1 内存池创建函数OSMemCreate() 443
25.4.2 内存申请函数OSMemGet() 447
25.4.3 内存释放函数OSMemPut() 449
25.5 内存管理实验 451
25.6 实验现象 456
第26章 中断管理 457
26.1 异常与中断的基本概念 457
26.1.1 与中断相关的硬件 458
26.1.2 与中断相关的术语 458
26.2 中断的运作机制 459
26.3 中断延迟的概念 460
26.4 中断的应用场景 461
26.5 ARM Cortex-M的中断管理 461
26.6 中断延迟发布 463
26.6.1 中断延迟发布的概念 463
26.6.2 中断队列控制块 465
26.6.3 中断延迟发布任务初始化函数OS_IntQTaskInit() 466
26.6.4 中断延迟发布过程函数OS_IntQPost() 468
26.6.5 中断延迟发布任务函数OS_IntQTask() 471
26.7 中断管理实验 475
26.8 实验现象 481
第27章 CPU利用率及栈检测统计 482
27.1 CPU利用率的基本概念及作用 482
27.2 CPU利用率统计初始化 483
27.3 栈溢出检测概念及作用 485
27.4 栈溢出检测过程 487
27.5 统计任务函数OS_StatTask() 487
27.6 栈检测函数OSTaskStkChk() 493
27.7 任务栈大小的确定 496
27.8 CPU利用率及栈检测统计实验 496
27.9 实验现象 502
附录 503



---------------------------8057851 - FreeRTOS内核实现与应用开发实战指南:基于STM32---------------------------


前 言
引 言
第一部分 从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 查找最高优先级的就绪任务相关代码 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 提取FreeRTOS最简源码 129
11.4.2 复制FreeRTOS到裸机工程根 130
11.4.3 复制FreeRTOSConfig.h文件到User文件夹 131
11.4.4 添加FreeRTOS源码到工程组文件夹 131
11.5 修改FreeRTOSConfig.h文件 133
11.5.1 FreeRTOSConfig.h文件内容 133
11.5.2 修改FreeRTOSConfig.h文件 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



---------------------------8054932 - RT-Thread内核实现与应用开发实战指南:基于STM32---------------------------


推荐序
前言
引言
第一部分 从0到1教你写RT-Thread内核
第1章 新建RT-Thread工程——软件仿真 2
1.1 新建本地工程文件夹 2
1.2 使用KEIL新建工程 3
1.2.1 New Project 3
1.2.2 Select Device for Target 3
1.2.3 Manage Run-Time Environment 4
1.3 在KEIL工程中新建文件组 5
1.4 在KEIL工程中添加文件 6
1.5 调试配置 7
1.5.1 设置软件仿真 7
1.5.2 修改时钟大小 8
1.5.3 添加头文件路径 9
第2章 裸机系统与多线程系统 10
2.1 裸机系统 10
2.1.1 轮询系统 10
2.1.2 前后台系统 11
2.2 多线程系统 12
第3章 线程的定义与线程切换的实现 15
3.1 什么是线程 16
3.2 创建线程 17
3.2.1 定义线程栈 17
3.2.2 定义线程函数 19
3.2.3 定义线程控制块 20
3.2.4 实现线程创建函数 20
3.3 实现就绪列表 30
3.3.1 定义就绪列表 30
3.3.2 将线程插入就绪列表 30
3.4 实现调度器 31
3.4.1 调度器初始化 32
3.4.2 启动调度器 33
3.4.3 第一次线程切换 34
3.4.4 系统调度 41
3.5 main()函数 44
3.6 实验现象 47
第4章 临界段的保护 50
4.1 什么是临界段 50
4.2 Cortex-M内核快速关中断指令 50
4.3 关中断 51
4.4 开中断 51
4.5 临界段代码的应用 52
4.6 实验现象 56
第5章 对象容器 57
5.1 什么是对象 57
5.1.1 对象枚举的定义 57
5.1.2 对象数据类型的定义 57
5.1.3 在线程控制块中添加对象成员 58
5.2 什么是容器 59
5.3 容器的接口实现 63
5.3.1 获取指定类型的对象信息 64
5.3.2 对象初始化 64
5.3.3 调用对象初始化函数 67
5.4 实验现象 67
第6章 空闲线程与阻塞延时 68
6.1 实现空闲线程 68
6.1.1 定义空闲线程的栈 68
6.1.2 定义空闲线程的线程控制块 69
6.1.3 定义空闲线程函数 69
6.1.4 空闲线程初始化 69
6.2 实现阻塞延时 70
6.3 SysTick_Handler()中断服务函数 73
6.4 main()函数 77
6.5 实验现象 80
第7章 多优先级 82
7.1 就绪列表 82
7.1.1 线程就绪优先级组 82
7.1.2 线程优先级表 86
7.2 修改代码以支持多优先级 88
7.2.1 修改线程控制块 88
7.2.2 修改调度器初始化函数rt_system_scheduler_init() 90
7.2.3 修改线程初始化函数rt_thread_init() 91
7.2.4 添加线程启动函数rt_thread_startup() 92
7.2.5 修改空闲线程初始化函数rt_thread_idle_init() 93
7.2.6 修改启动系统调度器函数rt_system_scheduler_start() 94
7.2.7 修改系统调度函数rt_schedule() 95
7.2.8 修改阻塞延时函数rt_thread_delay() 98
7.2.9 修改时基更新函数rt_tick_increase() 98
7.3 main()函数 99
7.4 实验现象 102
第8章 定时器 103
8.1 实现定时器 103
8.1.1 系统定时器列表 103
8.1.2 系统定时器列表初始化 104
8.1.3 定义定时器结构体 104
8.1.4 在线程控制块中内置定时器 105
8.1.5 定时器初始化函数 106
8.1.6 定时器删除函数 108
8.1.7 定时器停止函数 108
8.1.8 定时器控制函数 109
8.1.9 定时器启动函数 110
8.1.10 定时器扫描函数 115
8.2 修改代码以支持定时器 118
8.2.1 修改线程初始化函数 118
8.2.2 修改线程延时函数 119
8.2.3 修改系统时基更新函数 121
8.2.4 修改main.c文件 122
8.3 实验现象 126
第9章 时间片 127
9.1 实现时间片 127
9.1.1 在线程控制块中添加时间片相关成员 127
9.1.2 修改线程初始化函数 128
9.1.3 修改空闲线程初始化函数 129
9.1.4 修改系统时基更新函数 129
9.2 修改main.c文件 131
9.3 实验现象 135
第二部分 RT-Thread 内核应用开发
第10章 移植RT-Thread到STM32 138
10.1 获取STM32的裸机工程模板 138
10.2 下载RT-Thread Nano源码 138
10.3 安装RT-Thread Package 139
10.4 向裸机工程中添加RT-Thread源码 140
10.4.1 复制RT-Thread Package到裸机工程根 140
10.4.2 复制rtconfig.h文件到User文件夹 141
10.4.3 复制board.c文件到User文件夹 141
10.4.4 rt-thread文件夹内容简介 141
10.4.5 添加RT-Thread源码到工程组文件夹 143
10.5 rtconfig.h文件 145
10.5.1 rtconfig.h文件内容讲解 145
10.5.2 rtconfig.h文件修改 152
10.6 board.c文件 156
10.6.1 board.c文件内容讲解 156
10.6.2 board.c文件修改 160
10.7 添加core_delay.c和core_delay.h文件 167
10.8 修改main.c 171
10.9 下载验证 172
第11章 线程 173
11.1 硬件初始化 173
11.2 创建单线程——SRAM静态内存 175
11.2.1 定义线程函数 175
11.2.2 定义线程栈 176
11.2.3 定义线程控制块 176
11.2.4 初始化线程 176
11.2.5 启动线程 177
11.2.6 main.c文件内容 177
11.3 下载验证SRAM静态内存单线程 179
11.4 创建单线程——SRAM动态内存 179
11.4.1 动态内存空间堆的来源 180
11.4.2 定义线程函数 181
11.4.3 定义线程栈 181
11.4.4 定义线程控制块指针 181
11.4.5 创建线程 181
11.4.6 启动线程 182
11.4.7 main.c文件内容 182
11.5 下载验证SRAM动态内存单线程 184
11.6 创建多线程——SRAM动态内存 185
11.7 下载验证SRAM动态内存多线程 187
第12章 重映射串口到rt_kprintf()函数 188
12.1 rt_kprintf()函数定义 188
12.2 自定义rt_hw_console_output()函数 189
12.3 测试rt_kprintf()函数 191
12.3.1 硬件初始化 191
12.3.2 编写rt_kprintf()测试代码 192
12.3.3 下载验证 192
第13章 RT-Thread的启动流程 194
13.1 “万事俱备,只欠东风”法 194
13.2 “小心翼翼,十分谨慎”法 195
13.3 两种方法的适用情况 197
13.4 RT-Thread的启动流程 197
13.4.1 $Sub$$main()函数 198
13.4.2 rtthread_startup()函数 199
13.4.3 rt_application_init()函数 201
13.4.4 $Super$$main()函数 202
13.4.5 main()函数 203
第14章 线程管理 205
14.1 线程的基本概念 205
14.2 线程调度器的基本概念 205
14.3 线程状态的概念 206
14.4 线程状态迁移 206
14.5 常用的线程函数 207
14.5.1 线程挂起函数rt_thread_suspend() 207
14.5.2 线程恢复函数rt_thread_resume() 209
14.6 线程的设计要点 210
14.7 线程管理实验 212
14.8 实验现象 215
第15章 消息队列 216
15.1 消息队列的基本概念 216
15.2 消息队列的运作机制 217
15.3 消息队列的阻塞机制 218
15.4 消息队列的应用场景 218
15.5 消息队列控制块 218
15.6 消息队列函数 219
15.6.1 消息队列创建函数rt_mq_create() 219
15.6.2 消息队列删除函数rt_mq_delete() 221
15.6.3 消息队列发送消息函数rt_mq_send() 223
15.6.4 消息队列接收消息函数rt_mq_recv() 226
15.7 消息队列使用注意事项 229
15.8 消息队列实验 230
15.9 实验现象 233
第16章 信号量 234
16.1 信号量的基本概念 234
16.2 二值信号量的应用场景 235
16.3 二值信号量的运作机制 236
16.4 计数型信号量的运作机制 236
16.5 信号量控制块 237
16.6 信号量函数 237
16.6.1 信号量创建函数rt_sem_create() 238
16.6.2 信号量删除函数rt_sem_delete() 239
16.6.3 信号量释放函数rt_sem_release() 240
16.6.4 信号量获取函数rt_sem_take() 242
16.7 信号量实验 245
16.7.1 二值信号量同步实验 245
16.7.2 计数型信号量实验 248
16.8 实验现象 251
16.8.1 二值信号量同步实验现象 251
16.8.2 计数型信号量实验现象 252
第17章 互斥量 253
17.1 互斥量的基本概念 253
17.2 互斥量的优先级继承机制 253
17.3 互斥量的应用场景 256
17.4 互斥量的运作机制 256
17.5 互斥量控制块 257
17.6 互斥量函数 258
17.6.1 互斥量创建函数rt_mutex_create() 258
17.6.2 互斥量删除函数rt_mutex_delete() 260
17.6.3 互斥量释放函数rt_mutex_release() 261
17.6.4 互斥量获取函数rt_mutex_take() 264
17.7 互斥量使用注意事项 268
17.8 互斥量实验 268
17.9 实验现象 271
第18章 事件 272
18.1 事件的基本概念 272
18.2 事件的应用场景 273
18.3 事件的运作机制 273
18.4 事件控制块 275
18.5 事件函数 275
18.5.1 事件创建函数rt_event_create() 275
18.5.2 事件删除函数rt_event_delete() 276
18.5.3 事件发送函数rt_event_send() 277
18.5.4 事件接收函数rt_event_recv() 281
18.6 事件实验 285
18.7 实验现象 288
第19章 软件定时器 289
19.1 软件定时器的基本概念 289
19.2 软件定时器的应用场景 290
19.3 软件定时器的精度 291
19.4 软件定时器的运作机制 291
19.5 定时器超时函数 293
19.6 软件定时器的使用 297
19.7 软件定时器实验 299
19.8 实验现象 302
第20章 邮箱 303
20.1 邮箱的基本概念 303
20.2 邮箱的运作机制 304
20.3 邮箱的应用场景 305
20.4 邮箱的应用技巧 305
20.5 邮箱控制块 306
20.6 邮箱函数 306
20.6.1 邮箱创建函数rt_mb_create() 306
20.6.2 邮箱删除函数rt_mb_delete() 308
20.6.3 邮箱邮件发送函数rt_mb_send_wait()(阻塞) 310
20.6.4 邮箱邮件发送函数rt_mb_send ()(非阻塞) 315
20.6.5 邮箱邮件接收函数rt_mb_recv() 316
20.7 邮箱实验 320
20.8 实验现象 324
第21章 内存管理 325
21.1 内存管理的基本概念 325
21.2 内存管理的运作机制 327
21.2.1 静态内存管理 327
21.2.2 动态内存管理 328
21.3 内存管理的应用场景 330
21.4 静态内存管理函数 331
21.4.1 静态内存控制块 331
21.4.2 静态内存创建函数rt_mp_create() 332
21.4.3 静态内存删除函数rt_mp_delete() 335
21.4.4 静态内存初始化函数rt_mp_init() 338
21.4.5 静态内存申请函数rt_mp_alloc() 340
21.4.6 静态内存释放函数rt_mp_free() 344
21.5 动态内存管理函数 346
21.5.1 系统堆内存初始化函数rt_system_heap_init() 346
21.5.2 系统堆内存申请函数rt_malloc() 350
21.5.3 系统堆内存释放函数rt_free() 354
21.6 内存管理实验 357
21.6.1 静态内存管理实验 357
21.6.2 动态内存管理实验 361
21.7 实验现象 364
21.7.1 静态内存管理实验现象 364
21.7.2 动态内存管理实验现象 364
第22章 中断管理 366
22.1 异常与中断的基本概念 366
22.1.1 中断 367
22.1.2 和中断相关的术语 367
22.2 中断管理的运作机制 368
22.3 中断延迟的概念 369
22.4 中断管理的应用场景 370
22.5 ARM Cortex-M的中断管理 370
22.6 中断管理实验 372
22.7 实验现象 377
第23章 双向链表 378
23.1 双向链表的基本概念 378
23.2 双向链表函数 378
23.2.1 链表初始化函数rt_list_init() 378
23.2.2 向链表中插入节点 379
23.2.3 从链表删除节点函数rt_list_remove() 381
23.3 双向链表实验 382
23.4 实验现象 385
第24章 CPU利用率统计 387
24.1 CPU利用率的基本概念 387
24.2 CPU利用率的作用 387
24.3 CPU利用率统计实现 388
24.4 CPU利用率实验 392
24.5 实验现象 394
附录 参考资料和配套硬件 396

推荐

车牌查询
桂ICP备20004708号-3