当前位置:首页 > 工业技术
RT-Thread内核实现与应用开发实战指南  基于STM32
RT-Thread内核实现与应用开发实战指南  基于STM32

RT-Thread内核实现与应用开发实战指南 基于STM32PDF电子书下载

工业技术

  • 电子书积分:14 积分如何计算积分?
  • 作 者:刘火良,杨森编著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2019
  • ISBN:9787111613664
  • 页数:402 页
图书介绍:本书基于野火STM32全系列开发板介绍RT-Thread内核实现与应用开发,全书分为两部分:第一部分教你如何从0到1把RT-Thread内核写出来,从底层的汇编开始,讲解任务如何定义、如何切换,还讲解了阻塞延时如何实现、如何支持多优先级、如何实现定时器以及时间片等RT-Thread的核心知识点;第二部分则讲解RT-Thread内核组件的应用以及如何使用RT-Thread进行多任务编程。
《RT-Thread内核实现与应用开发实战指南 基于STM32》目录

第一部分从0到1教你写RT- Thread内核 2

第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_hread_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内核应用开发 138

第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.1rtconfig.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

相关图书
作者其它书籍
返回顶部