本书由自研开源嵌入式实时操作系统RT-Thread核心作者撰写,专业性毋庸置疑,系统剖析嵌入式系统核心设计与实现,掌握物联网操作系统精髓。
邱祎,睿赛德科技联合创始人。从2006年在校时起参与开发RT-Thread开源操作系统,和中国国内优秀的工程师一起将RT-Thread从零发展起来,RT-Thread被广泛应用于能源、车载、医疗、消费电子等众多行业,成为国人自主开发、成熟稳定和装机量大的开源嵌入式操作系统。
熊谱翔,睿赛德科技创始人兼CEO,于2006年创立了RT-Thread开源操作系统,并以开源社区的形式,带领中国国内优秀的工程师,以从无到有的方式,融入实时面向对象设计开发了RT-Thread自主操作系统内核,及大量周边成熟、稳定软件组件,如文件系统、命令行、图形用户界面等。
朱天龙(Armink),睿赛德科技技术总监,负责RT-Thread物联网组件的研发,前沿技术探索及团队管理。曾任职于国内某知名医疗设备企业,担任研发部门经理要职,主导多个项目的研发实施和量产,并获得10余项国家发明专利。拥有近10年RT-Thread开发经验。他也是一位嵌入式开源极客,分享开源了EasyLogger、EasyFlash、CmBacktrace等数个活跃度极高的开源软件。
前言
第一篇内核篇
第1章嵌入式实时操作系统2
1.1嵌入式系统3
1.2实时系统4
1.3嵌入式实时操作系统6
1.3.1主流嵌入式实时操作系统7
1.3.2发展趋势8
1.4本章小结8
第2章了解与快速上手RT-Thread9
2.1RT-Thread概述9
2.2RT-Thread的架构10
2.3RT-Thread的获取11
2.4RT-Thread快速上手12
2.4.1准备环境13
2.4.2初识RT-Thread16
2.4.3跑马灯的例子20
2.5本章小结21
第3章内核基础22
3.1RT-Thread内核介绍22
3.2RT-Thread启动流程24
3.3RT-Thread程序内存分布26
3.4RT-Thread自动初始化机制28
3.5RT-Thread内核对象模型29
3.5.1静态对象和动态对象29
3.5.2内核对象管理架构31
3.5.3对象控制块33
3.5.4内核对象管理方式34
3.6RT-Thread内核配置示例36
3.7常见宏定义说明38
3.8本章小结39
第4章线程管理40
4.1线程管理的功能特点40
4.2线程的工作机制41
4.2.1线程控制块41
4.2.2线程的重要属性42
4.2.3线程状态切换45
4.2.4系统线程46
4.3线程的管理方式46
4.3.1创建和删除线程47
4.3.2初始化和脱离线程48
4.3.3启动线程49
4.3.4获得当前线程50
4.3.5使线程让出处理器资源50
4.3.6使线程睡眠50
4.3.7挂起和恢复线程51
4.3.8控制线程52
4.3.9设置和删除空闲钩子52
4.3.10设置调度器钩子53
4.4线程应用示例53
4.4.1创建线程示例54
4.4.2线程时间片轮转调度示例56
4.4.3线程调度器钩子示例57
4.5本章小结59
第5章时钟管理60
5.1时钟节拍60
5.1.1时钟节拍的实现方式60
5.1.2获取时钟节拍61
5.2定时器管理62
5.2.1RT-Thread定时器介绍62
5.2.2定时器的工作机制63
5.2.3定时器的管理方式65
5.3定时器应用示例69
5.4高精度延时72
5.5本章小结73
第6章线程间同步74
6.1信号量75
6.1.1信号量的工作机制75
6.1.2信号量控制块75
6.1.3信号量的管理方式76
6.1.4信号量应用示例79
6.1.5信号量的使用场合85
6.2互斥量87
6.2.1互斥量的工作机制87
6.2.2互斥量控制块89
6.2.3互斥量的管理方式89
6.2.4互斥量应用示例92
6.2.5互斥量的使用场合97
6.3事件集97
6.3.1事件集的工作机制97
6.3.2事件集控制块98
6.3.3事件集的管理方式99
6.3.4事件集应用示例101
6.3.5事件集的使用场合104
6.4本章小结104
第7章线程间通信105
7.1邮箱105
7.1.1邮箱的工作机制105
7.1.2邮箱控制块106
7.1.3邮箱的管理方式106
7.1.4邮箱使用示例110
7.1.5邮箱的使用场合112
7.2消息队列113
7.2.1消息队列的工作机制113
7.2.2消息队列控制块114
7.2.3消息队列的管理方式115
7.2.4消息队列应用示例118
7.2.5消息队列的使用场合121
7.3信号123
7.3.1信号的工作机制123
7.3.2信号的管理方式124
7.3.3信号应用示例126
7.4本章小节128
第8章内存管理129
8.1内存管理的功能特点129
8.2内存堆管理130
8.2.1小内存管理算法131
8.2.2slab管理算法132
8.2.3memheap管理算法133
8.2.4内存堆配置和初始化134
8.2.5内存堆的管理方式134
8.2.6内存堆管理应用示例136
8.3内存池138
8.3.1内存池的工作机制139
8.3.2内存池的管理方式140
8.3.3内存池应用示例143
8.4本章小结145
第9章中断管理146
9.1Cortex-MCPU架构基础146
9.1.1寄存器介绍147
9.1.2操作模式和特权级别148
9.1.3嵌套向量中断控制器148
9.1.4PendSV系统调用149
9.2RT-Thread中断工作机制149
9.2.1中断向量表149
9.2.2中断处理过程151
9.2.3中断嵌套153
9.2.4中断栈154
9.2.5中断的底半处理154
9.3RT-Thread中断管理接口156
9.3.1中断服务程序挂接157
9.3.2中断源管理158
9.3.3全局中断开关158
9.3.4中断通知160
9.4中断与轮询161
9.5全局中断开关使用示例162
9.6本章小结164
第10章内核移植165
10.1CPU架构移植165
10.1.1实现全局中断开关166
10.1.2实现线程栈初始化167
10.1.3实现上下文切换168
10.1.4实现时钟节拍174
10.2BSP移植175
10.3内核移植示例175
10.3.1准备裸机工程176
10.3.2建立RT-Thread工程177
10.3.3实现时钟管理179
10.3.4实现控制台输出180
10.3.5实现动态堆内存管理181
10.3.6移植到更多开发板183
10.4本章小结184
第二篇组件篇
第11章Env辅助开发环境186
11.1Env简介186
11.2Env的功能特点187
11.3Env工程构建示例189
11.4构建更多MDK工程196
11.4.1创建外设示例工程196
11.4.2创建文件系统示例工程198
11.4.3创建网络示例工程202
11.5本章小结206
第12章FinSH控制台207
12.1FinSH介绍207
12.2FinSH内置命令209
12.2.1显示线程状态210
12.2.2显示信号量状态210
12.2.3显示事件状态210
12.2.4显示互斥量状态210
12.2.5显示邮箱状态211
12.2.6显示消息队列状态211
12.2.7显示内存池状态211
12.2.8显示定时器状态212
12.2.9显示设备状态212
12.2.10显示动态内存状态212
12.3自定义FinSH命令213
12.3.1自定义msh命令213
12.3.2自定义C-Style命令和变量213
12.3.3自定义命令重命名214
12.4FinSH功能配置214
12.5FinSH应用示例216
12.5.1自定义msh命令示例216
12.5.2带参数的msh命令示例217
12.6本章小结218
第13章I/O设备管理219
13.1I/O设备介绍219
13.1.1I/O设备管理框架219
13.1.2I/O设备模型221
13.1.3I/O设备类型222
13.2创建和注册I/O设备223
13.3访问I/O设备226
13.3.1查找设备226
13.3.2初始化设备227
13.3.3打开和关闭设备227
13.3.4控制设备228
13.3.5读写设备229
13.3.6数据收发回调229
13.3.7设备访问示例230
13.4本章小结231
第14章通用外设接口232
14.1UART串口232
14.1.1串口设备管理233
14.1.2创建和注册串口设备233
14.1.3访问串口设备235
14.1.4串口设备使用示例235
14.2GPIO237
14.2.1PIN设备管理238
14.2.2创建和注册PIN设备238
14.2.3访问PIN设备239
14.2.4PIN设备使用示例242
14.3SPI总线243
14.3.1SPI设备管理244
14.3.2创建和注册SPI总线设备246
14.3.3创建和挂载SPI从设备247
14.3.4访问SPI从设备249
14.3.5特殊使用场景254
14.3.6SPI设备使用示例255
14.4I2C总线256
14.4.1I2C设备管理258
14.4.2创建和注册I2C总线设备258
14.4.3访问I2C设备259
14.4.4I2C设备应用示例260
14.5运行设备应用示例263
14.5.1运行PIN设备示例264
14.5.2运行SPI设备示例265
14.5.3运行I2C设备示例266
14.5.4运行串口设备示例266
14.6本章小结267
第15章虚拟文件系统268
15.1DFS介绍268
15.1.1DFS架构269
15.1.2POSIX接口层269
15.1.3虚拟文件系统层270
15.1.4设备抽象层270
15.2文件系统挂载管理271
15.2.1DFS组件初始化271
15.2.2注册文件系统271
15.2.3将存储设备注册为块设备271
15.2.4格式化文件系统272
15.2.5挂载文件系统273
15.2.6卸载文件系统273
15.3文件管理273
15.3.1打开和关闭文件273
15.3.2读写数据274
15.3.3重命名275
15.3.4获取状态275
15.3.5删除文件275
15.3.6同步文件数据到存储设备276
15.3.7查询文件系统相关信息276
15.3.8监视I/O设备状态276
15.4目录管理277
15.4.1创建和删除目录277
15.4.2打开和关闭目录277
15.4.3读取目录278
15.4.4获取目录流的读取位置278
15.4.5设置下次读取目录的位置278
15.4.6重设读取目录的位置为开头位置279
15.5DFS功能配置279
15.6DFS应用示例279
15.6.1准备工作280
15.6.2读写文件示例283
15.6.3更改文件名称示例284
15.6.4获取文件状态示例285
15.6.5创建目录示例286
15.6.6读取目录示例286
15.6.7设置读取目录位置示例287
15.7本章小结289
第16章网络框架290
16.1TCP/IP网络协议简介290
16.1.1OSI参考模型290
16.1.2TCP/IP参考模型291
16.1.3TCP/IP参考模型和OSI参考模型的区别291
16.1.4IP地址292
16.1.5子网掩码292
16.1.6MAC地址292
16.2RT-Thread网络框架介绍292
16.3网络框架工作流程294
16.3.1网络协议簇注册294
16.3.2网络数据接收流程295
16.3.3网络数据发送流程296
16.4网络套接字编程296
16.4.1TCPsocket通信流程296
16.4.2UDPsocket通信流程297
16.4.3创建套接字298
16.4.4绑定套接字298
16.4.5建立TCP连接299
16.4.6数据传输300
16.4.7关闭网络连接301
16.5网络功能配置302
16.6网络应用示例303
16.6.1准备工作303
16.6.2TCP客户端示例306
16.6.3UDP客户端示例310
16.7本章小结312
附录Amenuconfig配置选项313
附录BSCons构建系统317
猜您喜欢
评论