热搜关键词: 电路基础ADC数字信号处理封装库PLC

pdf

RT-Thread内核实现与应用开发实战——基于STM32

  • 1星
  • 2021-03-21
  • 13.36MB
  • 需要2积分
  • 78次下载
标签: RT-Thread

RT-Thread

STM32

STM32

<<RT-Thread内核实现与应用开发实战——基于STM32>>

[野火]RT-Thread
内核实现与应用开发实战
——基于
STM32
EmbedFire
野火电子
2021
01
22
[野火]RT-Thread
内核实现与应用开发实战
Contents
关于本项目.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
关于野火
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
开源共享,共同进步
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
联系方式
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2
2.1
2.2
2.3
2.4
2.5
2.6
3
3.1
3.2
3.3
4
4.1
推荐序.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
前言
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
关于本书
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
如½学习本书
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
本书的参考资料
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
本书的编写风格
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
本书的配套硬件
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
本书的技术论坛
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2
2
2
3
7
7
8
8
9
9
19
TODO
和悬赏任务
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
如½学习
RTOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
为什么要学习
RTOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
如½学习
RTOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
选择什么
RTOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RT-Thread
简介
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1
4.1.2
4.2
5
6
6.1
6.2
版权
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
收费问题
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
22
22
23
23
23
23
初识
RT-Thread.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
RT-Thread
的意义
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
第一部分:从
0
1
教½写
RT-Thread
内核
. . . . . . . . . . . . . . . . . . . . . . . . . 25
新建
RT-Thread
工程—½件仿真
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
新建本地工程文件夹
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
½用
KEIL
新建工程
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1
New Progect
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i
26
28
28
论坛:https://www.firebbs.cn
天猫:https://yehuosm.tmall.com
[野火]RT-Thread
内核实现与应用开发实战
6.2.2
6.2.3
6.2.4
6.2.5
6.3
6.4
Select Device For Target
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Manage Run-Time Environment
. . . . . . . . . . . . . . . . . . . . . . . . .
KEIL
工程里面新建文件组
. . . . . . . . . . . . . . . . . . . . . . . . .
KEIL
工程里面添加文件
. . . . . . . . . . . . . . . . . . . . . . . . . . .
28
31
33
34
35
36
36
37
39
41
41
42
44
48
50
51
51
54
56
57
73
73
75
78
78
81
83
94
98
编写
main
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
调试配½
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.1
6.4.2
6.4.3
设½½件仿真
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
修改时钟大小
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
添加头文件路径
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
7.1
裸机系统与多线程系统
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
裸机系统
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.1
7.1.2
½询系统
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
前后台系统
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2
8
8.1
8.2
8.3
多线程系统
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
本章目标
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
什么是线程
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
创建线程
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3.1
8.3.2
8.3.3
8.3.4
定义线程栈
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
定义线程½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
定义线程控制块
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
实现线程创建½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
定义就绪列表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
将线程插入到就绪列表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
调度器初始化
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
启动调度器
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
第一次线程切换
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
系统调度
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
线程的定义与线程切换的实现.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
8.4
实现就绪列表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4.1
8.4.2
8.5
实现调度器
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.5.1
8.5.2
8.5.3
8.5.4
8.6
main
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
论坛:https://www.firebbs.cn
ii
天猫:https://yehuosm.tmall.com
[野火]RT-Thread
内核实现与应用开发实战
8.7
9
9.1
9.2
9.3
9.4
9.5
9.6
实验现象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
临界段的保护
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
什么是临界段
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Cortex-M
内核快速关中断指令
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
关中断
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
开中断
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
临界段代码的应用
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
实验现象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
10
章 对象容器的实现
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
10.1
什么是对象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
10.1.1
对象枚举定义
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
10.1.2
对象数据类型定义
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
10.1.3
在线程控制块中添加对象成员
. . . . . . . . . . . . . . . . . . . . . . . . . 121
10.2
什么是容器
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
10.2.1
容器的定义
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
10.3
容器的接口实现
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
10.3.1
获取指定类型的对象信息
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
10.3.2
对象初始化
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
10.3.3
调用对象初始化½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
10.4
实验现象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
11
章 空闲线程与阻塞延时的实现
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
11.1
实现空闲线程
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
11.1.1
定义空闲线程的栈
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
11.1.2
定义空闲线程的线程控制块
. . . . . . . . . . . . . . . . . . . . . . . . . . 138
11.1.3
定义空闲线程½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
11.1.4
空闲线程初始化
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
11.2
实现阻塞延时
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
11.3 SysTick_Handler
中断服务½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
11.3.1
系统时基更新½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
11.4 main
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
11.5
实验现象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
论坛:https://www.firebbs.cn
iii
天猫:https://yehuosm.tmall.com
[野火]RT-Thread
内核实现与应用开发实战
12
章 支持多优先级
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
12.1
就绪列表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
12.1.1
线程就绪优先级组
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
12.1.2
线程优先级表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
12.2
修改代码,支持多优先级
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
12.2.1
修改线程控制块
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
12.2.2
修改调度器初始化½数
rt_system_scheduler_init()
. . . . . . . . . . . . . . . 172
12.2.3
修改线程初始化½数
rt_thread_init()
. . . . . . . . . . . . . . . . . . . . . . 173
12.2.4
添加线程启动½数
rt_thread_startup()
. . . . . . . . . . . . . . . . . . . . . . 175
12.2.5
修改空闲线程初始化½数
rt_thread_idle_init()
. . . . . . . . . . . . . . . . . 178
12.2.6
修改启动系统调度器½数
rt_system_scheduler_start()
. . . . . . . . . . . . . 179
12.2.7
修改系统调度½数
rt_schedule ()
. . . . . . . . . . . . . . . . . . . . . . . . 180
12.2.8
修改阻塞延时½数
rt_thread_delay()
. . . . . . . . . . . . . . . . . . . . . . 184
12.2.9
修改时基更新½数
rt_tick_increase()
. . . . . . . . . . . . . . . . . . . . . . 186
12.3 main
½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
12.4
实验现象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
13
章 定时器的实现
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
13.1
实现定时器
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
13.1.1
系统定时器列表
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
13.1.2
系统定时器列表初始化
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
13.1.3
定义定时器结构½
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
13.1.4
在线程控制块中内½定时器
. . . . . . . . . . . . . . . . . . . . . . . . . . 196
13.1.5
定时器初始化½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
13.1.6
定时器删除½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
13.1.7
定时器停止½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
13.1.8
定时器控制½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
13.1.9
定时器启动½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
13.1.10
定时器扫描½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
13.2
修改代码,支持定时器
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
13.2.1
修改线程初始化½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
13.2.2
修改线程延时½数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
论坛:https://www.firebbs.cn
iv
天猫:https://yehuosm.tmall.com
展开预览

文档解析

《野火RT-Thread 内核实现与应用开发实战——基于 STM32》是一本由野火电子编写的专业书籍,专注于RT-Thread实时操作系统(RTOS)的内核实现和应用开发。该书以STM32微控制器作为硬件平台,详细介绍了RT-Thread的基本概念、内核原理、以及在STM32上的移植和应用方法。

全书分为多个章节,首先对RT-Thread进行了概述,包括其版权信息、收费政策和重要性。随后,通过一系列步骤指导读者如何从零开始编写RT-Thread内核,涵盖了线程定义、线程切换、调度器实现、临界段保护、对象容器、定时器、时间片等核心概念和技术。书中还提供了关于如何在KEIL环境下配置和使用RT-Thread工程的指导,以及如何通过软件仿真进行调试。

此外,本书还深入探讨了RT-Thread的启动流程、线程管理、消息队列、信号量、互斥量、事件、软件定时器、内存管理等高级主题。每个知识点都配有详细的代码示例和实验现象,帮助读者更好地理解和掌握RT-Thread的使用方法。

野火电子以其开源共享、共同进步的理念,为嵌入式软件工程师和学生提供了这本实战指南。通过学习本书,读者将能够深入理解RT-Thread的内核机制,提高在嵌入式系统开发中的RTOS应用能力。书籍的编写风格注重实践,鼓励读者通过实际操作来学习,适合有一定MCU开发经验的读者阅读和参考。

猜您喜欢

评论

zhangjt0713
国产实时操作系统,这几年做的风生水起,自己本身也是在学,野火的资料应该不错,自己曾看过正点的和野火,也对两家的资料做过对比,各有千秋,RTthread 基于STM32,很不错的。
2021-06-28 23:41:04
登录/注册

意见反馈

求资源

回顶部

推荐内容

热门活动

热门器件

随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
×