嵌入式實(shí)時(shí)操作系統(tǒng):RT-Thread設(shè)計(jì)與實(shí)現(xiàn)
定 價(jià):89 元
叢書名:電子與嵌入式系統(tǒng)設(shè)計(jì)叢書
- 作者:邱祎,熊譜翔,朱天龍 著
- 出版時(shí)間:2019/3/1
- ISBN:9787111619345
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP316.2
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書由自研開源嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread核心作者撰寫,專業(yè)性毋庸置疑,系統(tǒng)剖析嵌入式系統(tǒng)核心設(shè)計(jì)與實(shí)現(xiàn),掌握物聯(lián)網(wǎng)操作系統(tǒng)精髓。本書分為兩大部分,共16章,第1~10章為內(nèi)核篇;第11~16章為組件篇。
內(nèi)核篇(第1~10章)詳解RT-Thread內(nèi)核,先對(duì)RT-Thread進(jìn)行總體介紹,再分別介紹RT-Thread的核心技術(shù)線程管理、時(shí)鐘管理、線程間同步、線程間通信、內(nèi)存管理、中斷管理與內(nèi)核移植。
組件篇(第11~16章)分別介紹Env開發(fā)環(huán)境、FinSH控制臺(tái)、設(shè)備管理、文件系統(tǒng)和網(wǎng)絡(luò)框架。
各章均有配套示例,方便讀者動(dòng)手實(shí)踐和參考。
邱祎,睿賽德科技聯(lián)合創(chuàng)始人。從2006年在校時(shí)起參與開發(fā)RT-Thread開源操作系統(tǒng),和中國(guó)國(guó)內(nèi)優(yōu)秀的工程師一起將RT-Thread從零發(fā)展起來,RT-Thread被廣泛應(yīng)用于能源、車載、醫(yī)療、消費(fèi)電子等眾多行業(yè),成為國(guó)人自主開發(fā)、成熟穩(wěn)定和裝機(jī)量大的開源嵌入式操作系統(tǒng)。
熊譜翔,睿賽德科技創(chuàng)始人兼CEO,于2006年創(chuàng)立了RT-Thread開源操作系統(tǒng),并以開源社區(qū)的形式,帶領(lǐng)中國(guó)國(guó)內(nèi)優(yōu)秀的工程師,以從無到有的方式,融入實(shí)時(shí)面向?qū)ο笤O(shè)計(jì)開發(fā)了RT-Thread自主操作系統(tǒng)內(nèi)核,及大量周邊成熟、穩(wěn)定軟件組件,如文件系統(tǒng)、命令行、圖形用戶界面等。
朱天龍(Armink),睿賽德科技技術(shù)總監(jiān),負(fù)責(zé)RT-Thread物聯(lián)網(wǎng)組件的研發(fā),前沿技術(shù)探索及團(tuán)隊(duì)管理。曾任職于國(guó)內(nèi)某知名醫(yī)療設(shè)備企業(yè),擔(dān)任研發(fā)部門經(jīng)理要職,主導(dǎo)多個(gè)項(xiàng)目的研發(fā)實(shí)施和量產(chǎn),并獲得10余項(xiàng)國(guó)家發(fā)明專利。擁有近10年RT-Thread開發(fā)經(jīng)驗(yàn)。他也是一位嵌入式開源極客,分享開源了EasyLogger、EasyFlash、CmBacktrace等數(shù)個(gè)活躍度極高的開源軟件。
前言
第一篇內(nèi)核篇
第1章嵌入式實(shí)時(shí)操作系統(tǒng)2
1.1嵌入式系統(tǒng)3
1.2實(shí)時(shí)系統(tǒng)4
1.3嵌入式實(shí)時(shí)操作系統(tǒng)6
1.3.1主流嵌入式實(shí)時(shí)操作系統(tǒng)7
1.3.2發(fā)展趨勢(shì)8
1.4本章小結(jié)8
第2章了解與快速上手RT-Thread9
2.1RT-Thread概述9
2.2RT-Thread的架構(gòu)10
2.3RT-Thread的獲取11
2.4RT-Thread快速上手12
2.4.1準(zhǔn)備環(huán)境13
2.4.2初識(shí)RT-Thread16
2.4.3跑馬燈的例子20
2.5本章小結(jié)21
第3章內(nèi)核基礎(chǔ)22
3.1RT-Thread內(nèi)核介紹22
3.2RT-Thread啟動(dòng)流程24
3.3RT-Thread程序內(nèi)存分布26
3.4RT-Thread自動(dòng)初始化機(jī)制28
3.5RT-Thread內(nèi)核對(duì)象模型29
3.5.1靜態(tài)對(duì)象和動(dòng)態(tài)對(duì)象29
3.5.2內(nèi)核對(duì)象管理架構(gòu)31
3.5.3對(duì)象控制塊33
3.5.4內(nèi)核對(duì)象管理方式34
3.6RT-Thread內(nèi)核配置示例36
3.7常見宏定義說明38
3.8本章小結(jié)39
第4章線程管理40
4.1線程管理的功能特點(diǎn)40
4.2線程的工作機(jī)制41
4.2.1線程控制塊41
4.2.2線程的重要屬性42
4.2.3線程狀態(tài)切換45
4.2.4系統(tǒng)線程46
4.3線程的管理方式46
4.3.1創(chuàng)建和刪除線程47
4.3.2初始化和脫離線程48
4.3.3啟動(dòng)線程49
4.3.4獲得當(dāng)前線程50
4.3.5使線程讓出處理器資源50
4.3.6使線程睡眠50
4.3.7掛起和恢復(fù)線程51
4.3.8控制線程52
4.3.9設(shè)置和刪除空閑鉤子52
4.3.10設(shè)置調(diào)度器鉤子53
4.4線程應(yīng)用示例53
4.4.1創(chuàng)建線程示例54
4.4.2線程時(shí)間片輪轉(zhuǎn)調(diào)度示例56
4.4.3線程調(diào)度器鉤子示例57
4.5本章小結(jié)59
第5章時(shí)鐘管理60
5.1時(shí)鐘節(jié)拍60
5.1.1時(shí)鐘節(jié)拍的實(shí)現(xiàn)方式60
5.1.2獲取時(shí)鐘節(jié)拍61
5.2定時(shí)器管理62
5.2.1RT-Thread定時(shí)器介紹62
5.2.2定時(shí)器的工作機(jī)制63
5.2.3定時(shí)器的管理方式65
5.3定時(shí)器應(yīng)用示例69
5.4高精度延時(shí)72
5.5本章小結(jié)73
第6章線程間同步74
6.1信號(hào)量75
6.1.1信號(hào)量的工作機(jī)制75
6.1.2信號(hào)量控制塊75
6.1.3信號(hào)量的管理方式76
6.1.4信號(hào)量應(yīng)用示例79
6.1.5信號(hào)量的使用場(chǎng)合85
6.2互斥量87
6.2.1互斥量的工作機(jī)制87
6.2.2互斥量控制塊89
6.2.3互斥量的管理方式89
6.2.4互斥量應(yīng)用示例92
6.2.5互斥量的使用場(chǎng)合97
6.3事件集97
6.3.1事件集的工作機(jī)制97
6.3.2事件集控制塊98
6.3.3事件集的管理方式99
6.3.4事件集應(yīng)用示例101
6.3.5事件集的使用場(chǎng)合104
6.4本章小結(jié)104
第7章線程間通信105
7.1郵箱105
7.1.1郵箱的工作機(jī)制105
7.1.2郵箱控制塊106
7.1.3郵箱的管理方式106
7.1.4郵箱使用示例110
7.1.5郵箱的使用場(chǎng)合112
7.2消息隊(duì)列113
7.2.1消息隊(duì)列的工作機(jī)制113
7.2.2消息隊(duì)列控制塊114
7.2.3消息隊(duì)列的管理方式115
7.2.4消息隊(duì)列應(yīng)用示例118
7.2.5消息隊(duì)列的使用場(chǎng)合121
7.3信號(hào)123
7.3.1信號(hào)的工作機(jī)制123
7.3.2信號(hào)的管理方式124
7.3.3信號(hào)應(yīng)用示例126
7.4本章小節(jié)128
第8章內(nèi)存管理129
8.1內(nèi)存管理的功能特點(diǎn)129
8.2內(nèi)存堆管理130
8.2.1小內(nèi)存管理算法131
8.2.2slab管理算法132
8.2.3memheap管理算法133
8.2.4內(nèi)存堆配置和初始化134
8.2.5內(nèi)存堆的管理方式134
8.2.6內(nèi)存堆管理應(yīng)用示例136
8.3內(nèi)存池138
8.3.1內(nèi)存池的工作機(jī)制139
8.3.2內(nèi)存池的管理方式140
8.3.3內(nèi)存池應(yīng)用示例143
8.4本章小結(jié)145
第9章中斷管理146
9.1Cortex-MCPU架構(gòu)基礎(chǔ)146
9.1.1寄存器介紹147
9.1.2操作模式和特權(quán)級(jí)別148
9.1.3嵌套向量中斷控制器148
9.1.4PendSV系統(tǒng)調(diào)用149
9.2RT-Thread中斷工作機(jī)制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中斷服務(wù)程序掛接157
9.3.2中斷源管理158
9.3.3全局中斷開關(guān)158
9.3.4中斷通知160
9.4中斷與輪詢161
9.5全局中斷開關(guān)使用示例162
9.6本章小結(jié)164
第10章內(nèi)核移植165
10.1CPU架構(gòu)移植165
10.1.1實(shí)現(xiàn)全局中斷開關(guān)166
10.1.2實(shí)現(xiàn)線程棧初始化167
10.1.3實(shí)現(xiàn)上下文切換168
10.1.4實(shí)現(xiàn)時(shí)鐘節(jié)拍174
10.2BSP移植175
10.3內(nèi)核移植示例175
10.3.1準(zhǔn)備裸機(jī)工程176
10.3.2建立RT-Thread工程177
10.3.3實(shí)現(xiàn)時(shí)鐘管理179
10.3.4實(shí)現(xiàn)控制臺(tái)輸出180
10.3.5實(shí)現(xiàn)動(dòng)態(tài)堆內(nèi)存管理181
10.3.6移植到更多開發(fā)板183
10.4本章小結(jié)184
第二篇組件篇
第11章Env輔助開發(fā)環(huán)境186
11.1Env簡(jiǎn)介186
11.2Env的功能特點(diǎn)187
11.3Env工程構(gòu)建示例189
11.4構(gòu)建更多MDK工程196
11.4.1創(chuàng)建外設(shè)示例工程196
11.4.2創(chuàng)建文件系統(tǒng)示例工程198
11.4.3創(chuàng)建網(wǎng)絡(luò)示例工程202
11.5本章小結(jié)206
第12章FinSH控制臺(tái)207
12.1FinSH介紹207
12.2FinSH內(nèi)置命令209
12.2.1顯示線程狀態(tài)210
12.2.2顯示信號(hào)量狀態(tài)210
12.2.3顯示事件狀態(tài)210
12.2.4顯示互斥量狀態(tài)210
12.2.5顯示郵箱狀態(tài)211
12.2.6顯示消息隊(duì)列狀態(tài)211
12.2.7顯示內(nèi)存池狀態(tài)211
12.2.8顯示定時(shí)器狀態(tài)212
12.2.9顯示設(shè)備狀態(tài)212
12.2.10顯示動(dòng)態(tài)內(nèi)存狀態(tài)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應(yīng)用示例216
12.5.1自定義msh命令示例216
12.5.2帶參數(shù)的msh命令示例217
12.6本章小結(jié)218
第13章I/O設(shè)備管理219
13.1I/O設(shè)備介紹219
13.1.1I/O設(shè)備管理框架219
13.1.2I/O設(shè)備模型221
13.1.3I/O設(shè)備類型222
13.2創(chuàng)建和注冊(cè)I/O設(shè)備223
13.3訪問I/O設(shè)備226
13.3.1查找設(shè)備226
13.3.2初始化設(shè)備227
13.3.3打開和關(guān)閉設(shè)備227
13.3.4控制設(shè)備228
13.3.5讀寫設(shè)備229
13.3.6數(shù)據(jù)收發(fā)回調(diào)229
13.3.7設(shè)備訪問示例230
13.4本章小結(jié)231
第14章通用外設(shè)接口232
14.1UART串口232
14.1.1串口設(shè)備管理233
14.1.2創(chuàng)建和注冊(cè)串口設(shè)備233
14.1.3訪問串口設(shè)備235
14.1.4串口設(shè)備使用示例235
14.2GPIO237
14.2.1PIN設(shè)備管理238
14.2.2創(chuàng)建和注冊(cè)PIN設(shè)備238
14.2.3訪問PIN設(shè)備239
14.2.4PIN設(shè)備使用示例242
14.3SPI總線243
14.3.1SPI設(shè)備管理244
14.3.2創(chuàng)建和注冊(cè)SPI總線設(shè)備246
14.3.3創(chuàng)建和掛載SPI從設(shè)備247
14.3.4訪問SPI從設(shè)備249
14.3.5特殊使用場(chǎng)景254
14.3.6SPI設(shè)備使用示例255
14.4I2C總線256
14.4.1I2C設(shè)備管理258
14.4.2創(chuàng)建和注冊(cè)I2C總線設(shè)備258
14.4.3訪問I2C設(shè)備259
14.4.4I2C設(shè)備應(yīng)用示例260
14.5運(yùn)行設(shè)備應(yīng)用示例263
14.5.1運(yùn)行PIN設(shè)備示例264
14.5.2運(yùn)行SPI設(shè)備示例265
14.5.3運(yùn)行I2C設(shè)備示例266
14.5.4運(yùn)行串口設(shè)備示例266
14.6本章小結(jié)267
第15章虛擬文件系統(tǒng)268
15.1DFS介紹268
15.1.1DFS架構(gòu)269
15.1.2POSIX接口層269
15.1.3虛擬文件系統(tǒng)層270
15.1.4設(shè)備抽象層270
15.2文件系統(tǒng)掛載管理271
15.2.1DFS組件初始化271
15.2.2注冊(cè)文件系統(tǒng)271
15.2.3將存儲(chǔ)設(shè)備注冊(cè)為塊設(shè)備271
15.2.4格式化文件系統(tǒng)272
15.2.5掛載文件系統(tǒng)273
15.2.6卸載文件系統(tǒng)273
15.3文件管理273
15.3.1打開和關(guān)閉文件273
15.3.2讀寫數(shù)據(jù)274
15.3.3重命名275
15.3.4獲取狀態(tài)275
15.3.5刪除文件275
15.3.6同步文件數(shù)據(jù)到存儲(chǔ)設(shè)備276
15.3.7查詢文件系統(tǒng)相關(guān)信息276
15.3.8監(jiān)視I/O設(shè)備狀態(tài)276
15.4目錄管理277
15.4.1創(chuàng)建和刪除目錄277
15.4.2打開和關(guān)閉目錄277
15.4.3讀取目錄278
15.4.4獲取目錄流的讀取位置278
15.4.5設(shè)置下次讀取目錄的位置278
15.4.6重設(shè)讀取目錄的位置為開頭位置279
15.5DFS功能配置279
15.6DFS應(yīng)用示例279
15.6.1準(zhǔn)備工作280
15.6.2讀寫文件示例283
15.6.3更改文件名稱示例284
15.6.4獲取文件狀態(tài)示例285
15.6.5創(chuàng)建目錄示例286
15.6.6讀取目錄示例286
15.6.7設(shè)置讀取目錄位置示例287
15.7本章小結(jié)289
第16章網(wǎng)絡(luò)框架290
16.1TCP/IP網(wǎng)絡(luò)協(xié)議簡(jiǎn)介290
16.1.1OSI參考模型290
16.1.2TCP/IP參考模型291
16.1.3TCP/IP參考模型和OSI參考模型的區(qū)別291
16.1.4IP地址292
16.1.5子網(wǎng)掩碼292
16.1.6MAC地址292
16.2RT-Thread網(wǎng)絡(luò)框架介紹292
16.3網(wǎng)絡(luò)框架工作流程294
16.3.1網(wǎng)絡(luò)協(xié)議簇注冊(cè)294
16.3.2網(wǎng)絡(luò)數(shù)據(jù)接收流程295
16.3.3網(wǎng)絡(luò)數(shù)據(jù)發(fā)送流程296
16.4網(wǎng)絡(luò)套接字編程296
16.4.1TCPsocket通信流程296
16.4.2UDPsocket通信流程297
16.4.3創(chuàng)建套接字298
16.4.4綁定套接字298
16.4.5建立TCP連接299
16.4.6數(shù)據(jù)傳輸300
16.4.7關(guān)閉網(wǎng)絡(luò)連接301
16.5網(wǎng)絡(luò)功能配置302
16.6網(wǎng)絡(luò)應(yīng)用示例303
16.6.1準(zhǔn)備工作303
16.6.2TCP客戶端示例306
16.6.3UDP客戶端示例310
16.7本章小結(jié)312
附錄Amenuconfig配置選項(xiàng)313
附錄BSCons構(gòu)建系統(tǒng)317