基本信息
- 商品名:正版新书 云仓 RT-Thread内核实现与应用开发实战指南 基于STM3□ 深入剖析RT-Thre
- ISBN:9787111613664
- 定价:99
- 出版社:机械工业出版社
- 作者:刘火良 杨森
参考信息(以实物为准)
- 出版时间:2018-12-01
- 印刷时间:2018-12-01
- 版次:1
- 印次:1
- 包装:平装
- 开本:16开
- 用纸:胶版纸
- 页数:416
- 字数:
内容简介
本书基于野火STM3□全系列开发板介绍RTThread内核实现与应用开发,全书分为两部分:部分教你如何从0到1把RTThread内核写出来,从底层的汇编开始讲解线程如何定义、如何切换,还讲解了阻塞□□如何实现、如何支持多优先级、如何实现定时器以及时间片等RTThread的核心知识点;第二部分则讲解RTThread内核组件的应用以及如何使用RTThread进行多线程编程。
本书内容翔实,案例丰富,配有大量示例代码,适合作为嵌入式领域科技工作者的参考书,也适合相关专业学生学习参考。
前言序言
如何学习本书
本书是首本系统讲解RTThread的中文书籍,共分为两个部分。□□部分重点讲解RTThread的原理实现,从0开始,不断迭代,教你把RTThread的内核写出来,让你彻底学会线程是如何定义的、系统是如何调度的(包括底层的汇编代码讲解)、多优先级是如何实现的等操作系统的□深层次的知识。当你拿到本书开始学□□时候,你一定会惊讶,原来RTOS的学习并没有那么复杂,反而是那么有趣;原来自己也可以写RTOS,成就感立马爆棚。
当彻底掌握□□部分的知识之后,再学习其他RTOS,可以说十分轻松。纵观现在市面上流行的几种RTOS,它们的内核实现差异不大,只需要深入研究其中一种即可,没有必要对每一种RTOS都深入地研究源码,但如果时间允许,看一看也并无坏处。第二部分重点讲解RTThread的移植、内核中每个组件的应用,比起□□部分,这部分内容掌握起来应该比较容易。
全书内容循序渐进,不断迭代,尤其在□□部分,前一章是后一章的基础,必须从头开始阅读,不能进行跳跃式的阅读。在学习时务必做到两点:一是不能一味地看书,要把代码和书本结合起来学习,一边看书,一边调试代码。如何调试代码呢?即单步执行每一条程序,看程序的执行流程和执行的效果与自己所想的是否一致。二是在每学完一章之后,必须将配套的例程重写一遍(切记不要□□,即使是一个分号,但可以照书录入),做到举一反三,确保真正理解。在自己写的时候难免错误百出,要珍惜这些错误,好好调试,这是你提高编程能力的□好机会。记住,程序不是一气呵成写出来的,而是一步一步调试出来的。
本书的编写风格
本书□□部分主要以RTThread Nano 3.0.3官方源码为蓝本,抽丝剥茧,不断迭代,教你如何从0开始把RTThread内核写出来。书中涉及的数据类型、□量名称、函数名称、文件名称、文件存放的位置都完全按照RTThread官方的方式来实现。学完这本书之后,你可以无缝地切换到原版的RTThread中使用。要注意的是,在实现的过程中,某些函数中会去掉一些形参和冗余的代码,只保留核心的功能,但这并不会影响我们学习。
本书第二部分主要介绍RTThread的移植和内核组件的使用,不会再去深入讲解源码,而是着重讲解如何应用,如果对□□部分不感兴趣,也可以跳过□□部分,直接进入第二部分的学习。
本书还有姊妹篇——《FreeRTOS内核实现与应用开发实战指南:基于STM3□》,两本书的编写风格、内容框架和章节命名与排序基本一致,语言阐述类似,且涉及RTOS抽象层的理论部分也相同,不同之处在于RTOS的实现原理、内核源码的讲解和上层API的使用,这些内容才是重点部分,是读者学□□核心。例如,虽然两本书的□□部分的章节名称基本类似,但内容不同,因为针对的RTOS不一样。其中,关于新建RTThread工程和裸机系统与多线程(任务)系统的描述属于RTOS抽象层的理论部分,不具体针对某个RTOS,所以基本一样。第二部分中,对于什么是线程(任务)、阻塞□□和信号量的应用等RTOS抽象层的理论讲解也基本类似,但是具体涉及这两个RTOS的原理实现和代码讲解时则完全不同。
如果读者已经学习了其中一本书,再学习另外一本的话,那么涉及RTOS抽象层的理论部分可跳过,只需要把精力放在RTOS内核的实现和源码API的应用方面。因为现有的RTOS在理论层基本都是相通的,但在具体的代码实现上各有特点,所以可以用这两本书进行互补学习,掌握了其中一本书的知识,再学习另外一本书定会得心应手,事半功倍。
本书的参考资料和配套硬件
关于本书的参考资料和配套硬件的信息,请参考本书附录部分。
本书的技术论坛
如果在学习过程中遇到问题,可以到野火电子论坛www.firebbs.cn发帖交流,开源共享,共同进步。
鉴于水平有限,书中难免有错漏之处,热心的读者也可把勘误发送到论坛上以便改进。祝你学习愉快,RTThread的世界,野火与你同行。
目录
推荐序
前言
引言
□□部分 从0到1教你写RTThread内核
□□章 新建RTThread工程——软件仿真 □
1.1 新建本地工程文件夹 □
1.□ 使用KEIL新建工程 3
1.□.1 New Project 3
1.□.□ Select Device for Target 3
1.□.3 Manage RunTime Environment 4
1.3 在KEIL工程中新建文件组 5
1.4 在KEIL工程中添加文件 6
1.5 调试配置 7
1.5.1 设置软件仿真 7
1.5.□ 修改时钟大小 8
1.5.3 添加头文件路径 9
第□章 裸机系统与多线程系□ □0
□.1 裸机系□ □0
□.1.1 轮询系□ □0
□.1.□ 前后台系□ □1
□.□ 多线程系□ □□
第3章 线程的定义与线程切换的实现 15
3.1 什么是线程 16
3.□ 创建线程 17
3.□.1 定义线程栈 17
3.□.□ 定义线程函数 19
3.□.3 定义线程控制块 □0
3.□.4 实现线程创建函数 □0
3.3 实现就绪列表 30
3.3.1 定义就绪列表 30
3.3.□ 将线程插入就绪列表 30
3.4 实现调度器 31
3.4.1 调度器初始化 3□
3.4.□ 启动调度器 33
3.4.3 □□次线程切换 34
3.4.4 系统调度 41
3.5 main()函数 44
3.6 实验现象 47
第4章 临界段的保护 50
4.1 什么是临界段 50
4.□ CortexM内核快速关中断指令 50
4.3 关中断 51
4.4 开中断 51
4.5 临界段代码的应用 5□
4.6 实验现象 56
第5章 对象容器 57
5.1 什么是对象 57
5.1.1 对象枚举的定义 57
5.1.□ 对象数据类型的定义 57
5.1.3 在线程控制块中添加对象成员 58
5.□ 什么是容器 59
5.3 容器的接口实现 63
5.3.1 获取指定类型的对象信息 64
5.3.□ 对象初始化 64
5.3.3 调用对象初始化函数 67
5.4 实验现象 67
第6章 空闲线程与阻塞□□ 68
6.1 实现空闲线程 68
6.1.1 定义空闲线程的栈 68
6.1.□ 定义空闲线程的线程控制块 69
6.1.3 定义空闲线程函数 69
6.1.4 空闲线程初始化 69
6.□ 实现阻塞□□ 70
6.3 SysTick_Handler()中断服务函数 73
6.4 main()函数 77
6.5 实验现象 80
第7章 多优先级 8□
7.1 就绪列表 8□
7.1.1 线程就绪优先级组 8□
7.1.□ 线程优先级表 86
7.□ 修改代码以支持多优先级 88
7.□.1 修改线程控制块 88
7.□.□ 修改调度器初始化函数rt_system_scheduler_init() 90
7.□.3 修改线程初始化函数rt_thread_init() 91
7.□.4 添加线程启动函数rt_thread_startup() 9□
7.□.5 修改空闲线程初始化函数rt_thread_idle_init() 93
7.□.6 修改启动系统调度器函数rt_system_scheduler_start() 94
7.□.7 修改系统调度函数rt_schedule() 95
7.□.8 修改阻塞□□函数rt_thread_delay() 98
7.□.9 修改时基更新函数rt_tick_increase() 98
7.3 main()函数 99
7.4 实验现象 10□
第8章 定时器 103
8.1 实现定时器 103
8.1.1 系统定时器列表 103
8.1.□ 系统定时器列表初始化 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.□ 修改代码以支持定时器 118
8.□.1 修改线程初始化函数 118
8.□.□ 修改线程□□函数 119
8.□.3 修改系统时基更新函数 1□1
8.□.4 修改main.c文件 1□□
8.3 实验现象 1□6
第9章 时间片 1□7
9.1 实现时间片 1□7
9.1.1 在线程控制块中添加时间片相关成员 1□7
9.1.□ 修改线程初始化函数 1□8
9.1.3 修改空闲线程初始化函数 1□9
9.1.4 修改系统时基更新函数 1□9
9.□ 修改main.c文件 131
9.3 实验现象 135
第二部分 RTThread 内核应用开发
□□0章 移植RTThread到STM3□ 138
10.1 获取STM3□的裸机工程模板 138
10.□ 下载RTThread Nano源码 138
10.3 安装RTThread Package 139
10.4 向裸机工程中添加RTThread源码 140
10.4.1 □□RTThread Package到裸机工程根目录 140
10.4.□ □□rtconfig.□□件到User文件夹 141
10.4.3 □□board.c文件到User文件夹 141
10.4.4 rtthread文件夹内容简介 141
10.4.5 添加RTThread源码到工程组文件夹 143
10.5 rtconfig.□□件 145
10.5.1 rtconfig.□□件内容讲解 145
10.5.□ rtconfig.□□件修改 15□
10.6 board.c文件 156
10.6.1 board.c文件内容讲解 156
10.6.□ board.c文件修改 160
10.7 添加core_delay.c和core_delay.□□件 167
10.8 修改main.c 171
10.9 下载验证 17□
□□1章 线程 173
11.1 硬件初始化 173
11.□ 创建单线程——SRAM静态内存 175
11.□.1 定义线程函数 175
11.□.□ 定义线程栈 176
11.□.3 定义线程控制块 176
11.□.4 初始化线程 176
11.□.5 启动线程 177
11.□.6 main.c文件内容 177
11.3 下载验证SRAM静态内存单线程 179
11.4 创建单线程——SRAM动态内存 179
11.4.1 动态内存空间堆的来源