μC/OS-III內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南:基于STM32
定 價:129 元
叢書名:電子與嵌入式系統(tǒng)設(shè)計叢書
- 作者:劉火良 楊森
- 出版時間:2019/7/1
- ISBN:9787111628248
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP316.2-62
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書基于野火STM32全系列開發(fā)板介紹uC/OS-III內(nèi)核實現(xiàn)與應(yīng)用開發(fā),全書分為兩部分,第壹部分先教你如何從0到1把uC/OS-III內(nèi)核寫出來,從底層的匯編開始講解任務(wù)如何定義、如何切換,還講解了阻塞延時如何實現(xiàn)、如何支持多優(yōu)先級、如何實現(xiàn)任務(wù)延時列表以及時間片等uC/OS的核心知識點(diǎn);第二部分講解uC/OS-III內(nèi)核組件的應(yīng)用以及使用uC/OS-III進(jìn)行多任務(wù)編程。
本書內(nèi)容翔實,案例豐富,配有大量示例代碼,適合作為嵌入式領(lǐng)域科技工作者的參考書,也適合相關(guān)專業(yè)的學(xué)生學(xué)習(xí)參考。
如何學(xué)習(xí)本書
本書從0開始教你如何把C/OS-III寫出來,既講解源碼實現(xiàn),也講解API如何使用。當(dāng)你拿到本書開始學(xué)習(xí)時一定會驚訝,原來RTOS(Real Time Operation System,實時操作系統(tǒng))的學(xué)習(xí)并沒有那么復(fù)雜,原來自己也可以寫操作系統(tǒng),成就感立馬爆棚。
全書內(nèi)容循序漸進(jìn),不斷迭代,前一章都是后一章的基礎(chǔ),因此最好從頭開始閱讀,不要跳躍。在學(xué)習(xí)時務(wù)必做到兩點(diǎn):一是不能一味地看書,要把代碼和書本結(jié)合起來學(xué)習(xí),一邊看書,一邊調(diào)試代碼。如何調(diào)試代碼呢?即單步執(zhí)行每一條程序,看程序的執(zhí)行流程和執(zhí)行效果與自己所想的是否一致;二是在每學(xué)完一章之后,必須將配套的例程重寫一遍(切記不要復(fù)制,哪怕是一個分號,但可以照書錄入),以做到舉一反三,確保真正理解。在自己寫的時候肯定會錯漏百出,這個時候要認(rèn)真糾錯,好好調(diào)試,這是你提高編程能力的最好機(jī)會。記住,編寫程序不是一氣呵成的,而是要一步一步地調(diào)試。
本書的編寫風(fēng)格
本書以C/OS-III官方源碼為藍(lán)本,抽絲剝繭,不斷迭代,教你逐步寫出C/OS-III。書中涉及的數(shù)據(jù)類型、變量名稱、函數(shù)名稱、文件名稱、文件存放的位置都完全按照C/OS-III官方的方式來實現(xiàn)。學(xué)完本書之后,可以無縫地切換到原版的C/OS-III中使用。要注意的是,在實現(xiàn)的過程中某些函數(shù)中會去掉一些形參和冗余的代碼,只保留核心的功能,但這并不會影響學(xué)習(xí)。注意,本書的目的并不是讓你自己寫一個操作系統(tǒng),而是讓你了解C/OS-III是如何寫出來的,著重講解原理實現(xiàn),當(dāng)你學(xué)完這本書之后,再學(xué)習(xí)其他RTOS將會事半功倍。
本書的技術(shù)論壇
如果在學(xué)習(xí)過程中遇到問題,可以到野火電子論壇www.firebbs.cn發(fā)帖交流,開源共享,共同進(jìn)步。
鑒于水平有限,本書難免有錯漏之處,熱心的讀者也可把勘誤發(fā)送到論壇上以便改進(jìn)。祝你學(xué)習(xí)愉快,C/OS-III的世界,野火與你同行。
前言
引言
第一部分 從0到1教你寫
C/OS內(nèi)核
第1章 新建工程—軟件仿真2
1.1 新建本地工程文件夾2
1.2 使用KEIL新建工程2
1.2.1 New Project2
1.2.2 Select Device For Target3
1.2.3 Manage Run-Time Environment3
1.3 在KEIL工程中新建文件組4
1.4 在KEIL工程中添加文件4
1.5 調(diào)試配置6
1.5.1 設(shè)置軟件仿真6
1.5.2 修改時鐘大小6
1.5.3 添加頭文件路徑7
第2章 裸機(jī)系統(tǒng)與多任務(wù)系統(tǒng)8
2.1 裸機(jī)系統(tǒng)8
2.1.1 輪詢系統(tǒng)8
2.1.2 前后臺系統(tǒng)9
2.2 多任務(wù)系統(tǒng)10
第3章 任務(wù)的定義與任務(wù)切換13
3.1 多任務(wù)系統(tǒng)中任務(wù)的概念14
3.2 創(chuàng)建任務(wù)15
3.2.1 定義任務(wù)棧15
3.2.2 定義任務(wù)函數(shù)16
3.2.3 定義任務(wù)控制塊17
3.2.4 實現(xiàn)任務(wù)創(chuàng)建函數(shù)18
3.3 操作系統(tǒng)初始化22
3.4 啟動系統(tǒng)24
3.5 任務(wù)切換27
3.6 main()函數(shù)33
3.7 實驗現(xiàn)象37
第4章 任務(wù)時間片運(yùn)行39
4.1 SysTick簡介39
4.2 初始化SysTick40
4.3 編寫SysTick中斷服務(wù)函數(shù)41
4.4 main()函數(shù)42
4.5 實驗現(xiàn)象44
第5章 空閑任務(wù)與阻塞延時45
5.1 實現(xiàn)空閑任務(wù)45
5.1.1 定義空閑任務(wù)棧45
5.1.2 定義空閑任務(wù)的任務(wù)控制塊46
5.1.3 定義空閑任務(wù)函數(shù)47
5.1.4 空閑任務(wù)初始化47
5.2 實現(xiàn)阻塞延時48
5.3 main()函數(shù)50
5.4 實驗現(xiàn)象52
第6章 時間戳53
6.1 時間戳簡介53
6.2 時間戳的實現(xiàn)53
6.3 時間戳代碼54
6.3.1 CPU_Init()函數(shù)54
6.3.2 CPU_TS_Init()函數(shù)55
6.3.3 CPU_TS_TmrInit()函數(shù)56
6.3.4 BSP_CPU_ClkFreq()函數(shù)57
6.3.5 CPU_TS_TmrFreqSet()函數(shù)58
6.3.6 CPU_TS_TmrRd()函數(shù)58
6.3.7 OS_TS_GET()函數(shù)59
6.4 main()函數(shù)59
6.5 實驗現(xiàn)象61
第7章 臨界段62
7.1 臨界段簡介62
7.2 Cortex-M內(nèi)核快速關(guān)中斷指令62
7.3 關(guān)中斷63
7.4 開中斷63
7.5 臨界段代碼的應(yīng)用64
7.6 測量關(guān)中斷時間68
7.6.1 測量關(guān)中斷時間初始化68
7.6.2 測量最大關(guān)中斷時間69
7.6.3 獲取最大關(guān)中斷時間70
7.7 main()函數(shù)71
7.8 實驗現(xiàn)象71
第8章 就緒列表72
8.1 優(yōu)先級表的定義及函數(shù)72
8.2 就緒列表的定義及函數(shù)80
8.3 main()函數(shù)88
8.4 實驗現(xiàn)象88
第9章 多優(yōu)先級89
9.1 定義優(yōu)先級相關(guān)全局變量89
9.2 修改OSInit()函數(shù)89
9.3 修改任務(wù)控制塊90
9.4 修改OSTaskCreate()函數(shù)90
9.5 修改OS_IdleTaskInit()函數(shù)92
9.6 修改OSStart()函數(shù)93
9.7 修改PendSV_Handler()函數(shù)93
9.8 修改OSTimeDly()函數(shù)94
9.9 修改OSSched()函數(shù)95
9.10 修改OSTimeTick()函數(shù)97
9.11 main()函數(shù)98
9.12 實驗現(xiàn)象101
第10章 時基列表103
10.1 實現(xiàn)時基列表103
10.1.1 定義時基列表變量103
10.1.2 修改任務(wù)控制塊104
10.1.3 實現(xiàn)時基列表相關(guān)函數(shù)106
10.2 修改OSTimeDly()函數(shù)113
10.3 修改OSTimeTick()函數(shù)114
10.4 main()函數(shù)114
10.5 實驗現(xiàn)象114
第11章 時間片115
11.1 實現(xiàn)時間片115
11.1.1 修改任務(wù)控制塊115
11.1.2 實現(xiàn)時間片調(diào)度函數(shù)116
11.2 修改OSTimeTick()函數(shù)118
11.3 修改OSTaskCreate()函數(shù)118
11.4 修改OS_IdleTaskInit()函數(shù)120
11.5 main()函數(shù)120
11.6 實驗現(xiàn)象122
第12章 任務(wù)的掛起和恢復(fù)124
12.1 實現(xiàn)任務(wù)的掛起和恢復(fù)124
12.1.1 定義任務(wù)的狀態(tài)124
12.1.2 修改任務(wù)控制塊125
12.1.3 編寫任務(wù)掛起和恢復(fù)函數(shù)126
12.2 main()函數(shù)131
12.3 實驗現(xiàn)象133
第13章 任務(wù)的刪除134
13.1 實現(xiàn)任務(wù)刪除134
13.2 main()函數(shù)136
13.3 實驗現(xiàn)象136
第二部分 C/OS-III內(nèi)核
應(yīng)用開發(fā)
第14章 移植C/OS-III到STM32138
14.1 獲取STM32的裸機(jī)工程模板138
14.2 下載C/OS-III源碼138
14.3 C/OS-III源碼文件介紹141
14.3.1 EvalBoards141
14.3.2 C-CPU141
14.3.3 C-LIB143
14.3.4 C/OS-III143
14.4 移植到STM32工程145
14.4.1 在工程中添加文件分組145
14.4.2 添加文件到對應(yīng)分組145
14.4.3 添加頭文件路徑到工程中146
14.4.4 具體的工程文件修改147
14.4.5 修改源碼中的bsp.c與bsp.h文件149
14.5 按需配置最適合的工程151
14.5.1 os_cfg.h151
14.5.2 cpu_cfg.h153
14.5.3 os_cfg_app.h154
14.6 修改app.c155
14.7 下載驗證157
第15章 創(chuàng)建任務(wù)158
15.1 硬件初始化158
15.2 創(chuàng)建單任務(wù)160
15.2.1 定義任務(wù)棧160
15.2.2 定義任務(wù)控制塊160
15.2.3 定義任務(wù)主體函數(shù)160
15.2.4 創(chuàng)建任務(wù)161
15.2.5 啟動任務(wù)163
15.2.6 app.c163
15.3 下載驗證單任務(wù)166
15.4 創(chuàng)建多任務(wù)166
15.5 下載驗證多任務(wù)171
第16章 C/OS-III的啟動流程172
16.1 “萬事俱備,只欠東風(fēng)”法172
16.2 “小心翼翼,十分謹(jǐn)慎”法173
16.3 兩種方法的適用情況175
16.4 系統(tǒng)的啟動175
16.4.1 系統(tǒng)初始化175
16.4.2 CPU初始化179
16.4.3 SysTick初始化182
16.4.4 內(nèi)存初始化183
16.4.5 OSStart()函數(shù)183
16.4.6 app.c184
第17章 任務(wù)管理187
17.1 任務(wù)的基本概念187
17.2 任務(wù)調(diào)度器的基本概念188
17.3