圖書簡介
本書介紹RW/CZXT-1.0小型嵌入式作業系統核心的模型結構及其程式代碼,全書分為三大篇14章。第1篇:實現一個基礎的小型嵌入式作業系統,設計核心的功能結構及其程式代碼。第2篇:擴展小型嵌入式作業系統核心的套用功能,建立信號量、信箱、訊息佇列、特殊服務及記憶體管理等功能。第3篇:用實際工程例子介紹RW/CZXT-1.0嵌入式作業系統的套用。本書99%的程式代碼用C語言進行編寫,具有結構合理、內容豐富、描述詳細、知識淺顯易懂的特點,並且注重理論與套用相結合,對每一章節的設計要點進行總結,重點章節附有實驗套用實例。本書可作為機電類專業的教材,也可作為嵌入式系統技術人員、單片機技術人員、單片機業餘愛好者、電氣自動化控制技術人員等人員學習或參考用書。
圖書目錄
第1篇小型嵌入式作業系統基礎第0章概述3
第1章實現一個簡單的3任務調度系統8
1.1硬體和軟體的準備9
1.1.1實驗開發板9
1.1.2集成環境開發工具軟體10
1.2構建簡單的3任務調度作業系統10
1.2.1用KEILC51建立一個工程11
1.2.2定義系統需要的變數15
1.2.3系統初始化及建立任務函式16
1.2.4建立一個簡單的任務調度器25
1.2.5在實驗板上運行29
總結32
第2章嵌入式作業系統的程式檔案34
2.1RW/CZXT-1.0嵌入式作業系統的功能和特點34
2.2RW/CZXT-1.0嵌入式作業系統的程式檔案35
2.2.1系統的宏定義檔案:XT-HDY.H36
2.2.2系統的配置檔案:XT-PZ.H37
2.2.3系統的頭檔案XT.H37
2.2.4系統的初始化檔案XT-INT.C38
2.2.5系統的調度檔案XT-TD.C38
2.2.6系統任務管理檔案XT-RWGL.C38
2.2.7系統時間管理檔案XT-SHIJ.C39
2.2.8信號量、信箱檔案XT-XHL.C,XT-XXYX.C39
2.2.9訊息佇列功能檔案XT-XXDL.C39
2.2.10記憶體管理功能檔案XT-NCGL.C39
2.2.11系統服務功能檔案XT-FUWU.C40
2.2.12系統MAIN檔案XT-MAIN.C40
總結40
第3章系統變數定義及初始化41
3.1系統的宏定義41
3.1.1系統狀態模式的宏標誌42
3.1.2任務狀態宏標誌42
3.1.3其他宏標誌42
3.2系統變數的定義及其作用43
3.2.1定義系統管理控制塊43
3.3.2定義任務的任務棧44
3.2.3定義任務的運行佇列45
3.3任務控制塊的定義及其作用45
3.3.1定義一個類型結構體:RWK45
3.3.2用類型結構體為每個任務定義任務控制塊46
3.4系統的初始化操作46
3.4.1系統變數初始化47
3.4.2系統總初始化函式的結構48
3.5靜態創建套用任務49
3.5.1在系統的頭檔案XT.H中,聲明任務函式50
3.5.2定義任務棧50
3.5.3把任務函式的入口地址存放在任務棧中51
3.5.4初始化任務控制塊53
3.3.5任務在運行佇列中進行登記54
3.5.6在MAIN檔案中編寫任務函式模型54
3.6系統基礎模型的編譯和調試56
3.6.1在MAIN檔案中加入各個程式檔案56
3.6.2為系統建立MAIN函式56
3.6.3編譯和調試57
3.6.4採用簡單的方式啟動任務運行57
總結58
目錄輕鬆自編小型嵌入式作業系統第4章任務調度器設計59
4.1時間片輪轉調度方法60
4.1.1時間片輪轉調度工作原理60
4.1.2時間片輪轉調度工作模式61
4.1.3基於“優先和普通結合”的時間片輪轉調度算法61
4.1.4提高系統實時性的其他方法63
4.2任務運行佇列64
4.2.1運行佇列的結構64
4.2.2運行佇列的操作64
4.3堆疊原理、堆疊操作71
4.3.1任務棧設計71
4.3.2堆疊操作72
4.4任務調度器設計與實現73
4.4.1任務級調度器設計與實現74
4.4.2中斷級調度器設計與實現79
4.4.3調度器設計注意事項82
4.5調度時機82
4.5.1任務調度的時機和調度限制82
4.5.2調度器上鎖、解鎖83
4.5.3中斷嵌套計數器84
4.6調度器的套用對象85
4.7系統啟動設計86
總結87
第5章系統時間管理與套用函式設計88
5.1AT89Sxx單片機定時器的設定89
5.1.1T0定時器的工作方式設定89
5.1.2T0定時器中斷功能設定90
5.1.3T0定時器初值設定90
5.1.4T0定時器設定的程式代碼90
5.2定時器驅動作業系統運行的原理91
5.2.1時間節拍與任務的運行時間片91
5.2.2定時器中斷服務92
5.3時間延時套用函式設計99
5.3.1時間節拍延時函式100
5.3.2100ms延時函式102
5.3.31s延時函式103
5.3.4恢復正在延時的任務104
5.4套用實驗105
總結108
第6章任務管理與套用函式設計110
6.1任務的狀態111
6.1.1任務狀態的宏定義111
6.1.2任務狀態111
6.2任務狀態的改變112
6.2.1任務狀態遷移圖112
6.2.2狀態轉換過程說明113
6.3控制任務的套用函式設計114
6.3.1掛起任務114
6.3.2恢復掛起的任務117
6.3.3任務等待中斷信號119
6.3.4恢復等待中斷的任務121
6.4套用實驗123
6.4.1任務的工作要求123
6.4.2在MAIN檔案中定義LED指示燈連線埠及相關變數123
總結129
第7章嵌入式作業系統的實驗套用130
7.1組織程式檔案131
7.2系統關鍵參數配置132
7.2.1任務的總數量132
7.2.2任務棧長度132
7.2.3系統時鐘粒度132
7.2.4時間片長度133
7.2.5延時基數133
7.3設計任務及其程式代碼133
7.3.1確定任務的工作133
7.3.2定義任務運行所需的相關變數134
7.3.3任務函式的工作流程134
7.3.4任務函式的程式代碼136
7.4在實驗板上運行測試138
總結139
第2篇核心功能擴展
第8章擴展任務管理功能143
8.1任務類型143
8.1.1系統空閒任務143
8.1.2首次任務144
8.1.3普通任務144
8.1.4實時任務144
8.2片外任務棧設計144
8.2.1堆疊指針144
8.2.2任務私有棧與公共運行棧結合的形式145
8.3動態創建套用任務146
8.3.1修改相關功能函式146
8.3.2實現動態創建任務148
8.4調度器任務切換操作149
8.4.1任務級調度器任務切換操作149
8.4.2中斷級調度器任務切換操作154
8.4.3啟動函式中任務調度操作155
8.5實時任務管理157
8.5.1實時令旗設計157
8.5.2就緒登記表159
8.5.3實時任務調度策略163
8.5.4為系統功能函式設計實時任務管理功能165
8.6套用實驗173
8.6.1任務工作分配174
8.6.2動態創建套用任務174
8.6.3實驗工程完整的程式代碼174
總結176
第9章信號量設計177
9.1信號量的作用178
9.1.1作為任務運行的標誌178
9.1.2作為共享資源的使用標誌179
9.1.3作為資源的數量標誌179
9.2從簡單實例了解信號量179
9.3信號量的類型182
9.3.1二進制型信號量182
9.3.2十進制型信號量182
9.3.3互斥型信號量183
9.4信號量的數據結構183
9.4.1信號量的宏定義標誌及配置183
9.4.2定義信號量控制塊184
9.4.3初始化控制塊185
9.5信號量的套用函式設計186
9.5.1內部操作函式187
9.5.2創建信號量191
9.5.3阻塞申請信號量194
9.5.4非阻塞申請信號量199
9.5.5釋放信號量201
9.5.6阻塞申請互斥信號量204
9.6套用實驗210
9.6.1實驗的項目211
9.6.2套用任務的工作分配211
9.6.3本實驗的程式代碼212
總結215
第10章信箱設計216
10.1從簡單實例了解訊息信箱218
10.2信箱的數據結構220
10.2.1有關信箱的宏定義標誌220
10.2.2定義信箱控制塊221
10.2.3初始化信箱控制塊222
10.3信箱的套用函式設計222
10.3.1內部操作函式223
10.3.2創建信箱226
10.3.3發訊息給信箱229
10.3.4阻塞式讀信箱232
10.3.5非阻塞式讀信箱236
10.4套用實驗237
10.4.1實驗的項目238
10.4.2套用任務的工作分配238
10.4.3本實驗的程式代碼238
總結240
第11章訊息佇列設計242
11.1從簡單實例了解訊息佇列243
11.2訊息佇列的數據結構246
11.2.1有關訊息佇列的宏定義標誌246
11.2.2定義訊息佇列控制塊247
11.2.3初始化訊息佇列控制塊249
11.3訊息佇列套用函式設計249
11.3.1內部操作函式250
11.3.2創建訊息佇列253
11.3.3傳送訊息給佇列257
11.3.4非阻塞式讀訊息佇列260
11.3.5阻塞式讀訊息佇列261
11.4套用實驗266
11.4.1實驗的項目266
11.4.2套用任務的工作分配266
11.4.3本實驗的程式代碼266
總結269
第12章實現簡單記憶體管理功能270
12.1記憶體分區管理機制271
12.1.1記憶體分區271
12.1.2記憶體塊271
12.1.3定義記憶體分區271
12.1.4記憶體分區管理271
12.2記憶體管理控制塊272
12.2.1記憶體管理控制塊的數據結構272
12.2.2記憶體管理控制塊初始化275
12.3記憶體分區管理套用函式設計275
12.3.1創建記憶體分區276
12.3.2申請一個記憶體塊279
12.3.3釋放歸還一個記憶體塊283
12.4記憶體塊操作函式設計286
12.4.1清空記憶體塊287
12.4.2在記憶體塊中寫入一個數據289
12.4.3從記憶體塊中讀出一個數據291
12.5套用實驗293
12.5.1實驗的項目293
12.5.2套用任務的工作分配293
12.5.3本實驗的程式代碼294
總結298
第13章作業系統的服務功能299
13.1系統服務功能介紹299
13.2系統服務功能設計300
13.2.1系統服務功能的工作原理300
13.2.2工作原理分析300
13.2.3服務功能配置301
13.2.4相關定義301
13.2.1作業系統復位服務302
13.2.2作業系統暫停服務304
總結309
第3篇作業系統的套用實戰
第14章作業系統在水處理控制系統中的套用313
14.1礦泉水水處理系統結構313
14.1.1水處理系統的結構及工藝處理流程313
14.1.2礦泉水的處理方法314
14.2水處理系統控制方案314
14.2.1系統的工作模式315
14.2.2CO2混合控制315
14.2.3臭氧混合控制315
14.2.4設備運行信號檢測316
14.2.5控制信號檢測316
14.2.6鍵盤輸入和顯示316
14.3控制系統主機板硬體設計317
14.3.1控制主機板硬體結構317
14.3.2控制主機板硬體設計方案317
14.4控制系統軟體設計322
14.4.1軟體功能處理方案分析323
14.4.2為任務分配軟體功能325
14.4.3作業系統套用配置327
14.4.4控制系統程式代碼設計329
14.5控制系統軟體測試337
14.5.1程式代碼語法檢查337
14.5.2軟體仿真測試338
14.5.3軟硬體功能測試338
總結338
附錄A系統API套用函式套用說明339
A.1任務管理功能的API套用函式339
A.2時間管理功能的API套用函式341
A.3信號量管理功能的API套用函式342
A.4信箱管理功能的API套用函式343
A.5訊息佇列管理功能的API套用函式344
A.6記憶體管理功能的API套用函式345
A.7服務功能的API套用函式347
附錄B基礎系統完整的程式代碼349
B.1宏定義檔案349
B.2配置檔案349
B.3系統頭檔案350
B.4系統初始化檔案351
B.5系統調度檔案353
B.6時間管理檔案359
B.7任務管理檔案363
參考文獻367
圖書前言
隨著越來越多的實時嵌入式作業系統移植到單片機晶片上,或者直接基於單片機編寫嵌入式作業系統,是可以讓單片機應付更複雜、更高要求、更尖端的套用領域,也是一種提升單片機套用性能的有效方法。作為一名單片機嵌入式系統開發的技術人員或者業餘愛好者,學習嵌入式作業系統,是一種必然的趨勢,把嵌入式作業系統用在自己開發的項目中,可以讓開發的項目具有更高的技術水平,並且能夠套用於更高端的技術領域。筆者從2009年4月份開始接觸和學習嵌入式作業系統,剛開始用的是keil軟體自帶的一個RTX51作業系統。後來學習μC/OS-II嵌入式實時作業系統,剛接觸時,感覺是進入了另一片知識的空間,看了兩三天的書,覺得自己的腦袋裡面都是模模糊糊,沒有清晰的思路和邏輯,當時我就想:如果有一本基礎教材來教我們這些初學者一步一步地入門嵌入式作業系統那該多好啊!哪怕是最簡單的都行,先激發起我們的興趣,讓我們從最簡單功能的核心開始一步一步地學習,跟著編寫、調試、實驗,建立起學習的信心,先入門後提高,相信這是很多初學者的共同願望。
試想:初學者如果自己動手編寫小型嵌入式作業系統,哪怕只有進行簡單任務調度的功能,在經過多次的調試和修改後,可以在實驗板上運行起來的時候,那種興奮的心情和無比的成就感是無法形容的。在這裡,給初學者一句鼓勵的話:“自己動手編寫基於單片機的嵌入式作業系統,並不困難,關鍵是要循序漸進,先構建一個功能簡單的核心,再通過不斷的學習來完善這個核心,在成功的快樂中逐步完善這個核心的功能。”
本書99%的程式代碼採用淺顯易懂的C語言進行編寫,讓初學者易於理解和掌握,通過本書的學習讓初學者掌握嵌入式作業系統簡單核心的構成和自己編寫的方法,但是要求初學者具備有一定C語言的基礎和A51彙編語言的基礎。本書介紹的這個嵌入式作業系統,其實算不上是一個真正的實時嵌入式作業系統,只是一個簡單的小型嵌入式作業系統,是讓初學者入門為目的,所以沒有涉及過多的系統功能和系統的API函式。
在構建小型嵌入式作業系統核心時,筆者對系統設計和實現的過程進行詳細敘述,儘量做到深入淺出,通俗易懂,並注重理論與套用相結合,採用較常用、通俗、淺顯易懂的方法來設計和實現程式代碼,有關變數的名稱都是用漢語拼音的第一個字母結合或全拼來定義,有助於讀者的閱讀和理解。