μC/OS-III內(nèi)核實(shí)現(xiàn)與應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)指南:基于STM32
定 價(jià):129 元
叢書(shū)名:電子與嵌入式系統(tǒng)設(shè)計(jì)叢書(shū)
- 作者:劉火良 楊森
- 出版時(shí)間:2019/7/1
- ISBN:9787111628248
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP316.2-62
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:16開(kāi)
本書(shū)基于野火STM32全系列開(kāi)發(fā)板介紹uC/OS-III內(nèi)核實(shí)現(xiàn)與應(yīng)用開(kāi)發(fā),全書(shū)分為兩部分,第壹部分先教你如何從0到1把uC/OS-III內(nèi)核寫(xiě)出來(lái),從底層的匯編開(kāi)始講解任務(wù)如何定義、如何切換,還講解了阻塞延時(shí)如何實(shí)現(xiàn)、如何支持多優(yōu)先級(jí)、如何實(shí)現(xiàn)任務(wù)延時(shí)列表以及時(shí)間片等uC/OS的核心知識(shí)點(diǎn);第二部分講解uC/OS-III內(nèi)核組件的應(yīng)用以及使用uC/OS-III進(jìn)行多任務(wù)編程。
本書(shū)內(nèi)容翔實(shí),案例豐富,配有大量示例代碼,適合作為嵌入式領(lǐng)域科技工作者的參考書(shū),也適合相關(guān)專業(yè)的學(xué)生學(xué)習(xí)參考。
如何學(xué)習(xí)本書(shū)
本書(shū)從0開(kāi)始教你如何把C/OS-III寫(xiě)出來(lái),既講解源碼實(shí)現(xiàn),也講解API如何使用。當(dāng)你拿到本書(shū)開(kāi)始學(xué)習(xí)時(shí)一定會(huì)驚訝,原來(lái)RTOS(Real Time Operation System,實(shí)時(shí)操作系統(tǒng))的學(xué)習(xí)并沒(méi)有那么復(fù)雜,原來(lái)自己也可以寫(xiě)操作系統(tǒng),成就感立馬爆棚。
全書(shū)內(nèi)容循序漸進(jìn),不斷迭代,前一章都是后一章的基礎(chǔ),因此最好從頭開(kāi)始閱讀,不要跳躍。在學(xué)習(xí)時(shí)務(wù)必做到兩點(diǎn):一是不能一味地看書(shū),要把代碼和書(shū)本結(jié)合起來(lái)學(xué)習(xí),一邊看書(shū),一邊調(diào)試代碼。如何調(diào)試代碼呢?即單步執(zhí)行每一條程序,看程序的執(zhí)行流程和執(zhí)行效果與自己所想的是否一致;二是在每學(xué)完一章之后,必須將配套的例程重寫(xiě)一遍(切記不要復(fù)制,哪怕是一個(gè)分號(hào),但可以照書(shū)錄入),以做到舉一反三,確保真正理解。在自己寫(xiě)的時(shí)候肯定會(huì)錯(cuò)漏百出,這個(gè)時(shí)候要認(rèn)真糾錯(cuò),好好調(diào)試,這是你提高編程能力的最好機(jī)會(huì)。記住,編寫(xiě)程序不是一氣呵成的,而是要一步一步地調(diào)試。
本書(shū)的編寫(xiě)風(fēng)格
本書(shū)以C/OS-III官方源碼為藍(lán)本,抽絲剝繭,不斷迭代,教你逐步寫(xiě)出C/OS-III。書(shū)中涉及的數(shù)據(jù)類型、變量名稱、函數(shù)名稱、文件名稱、文件存放的位置都完全按照C/OS-III官方的方式來(lái)實(shí)現(xiàn)。學(xué)完本書(shū)之后,可以無(wú)縫地切換到原版的C/OS-III中使用。要注意的是,在實(shí)現(xiàn)的過(guò)程中某些函數(shù)中會(huì)去掉一些形參和冗余的代碼,只保留核心的功能,但這并不會(huì)影響學(xué)習(xí)。注意,本書(shū)的目的并不是讓你自己寫(xiě)一個(gè)操作系統(tǒng),而是讓你了解C/OS-III是如何寫(xiě)出來(lái)的,著重講解原理實(shí)現(xiàn),當(dāng)你學(xué)完這本書(shū)之后,再學(xué)習(xí)其他RTOS將會(huì)事半功倍。
本書(shū)的技術(shù)論壇
如果在學(xué)習(xí)過(guò)程中遇到問(wèn)題,可以到野火電子論壇www.firebbs.cn發(fā)帖交流,開(kāi)源共享,共同進(jìn)步。
鑒于水平有限,本書(shū)難免有錯(cuò)漏之處,熱心的讀者也可把勘誤發(fā)送到論壇上以便改進(jìn)。祝你學(xué)習(xí)愉快,C/OS-III的世界,野火與你同行。
前言
引言
第一部分 從0到1教你寫(xiě)
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 修改時(shí)鐘大小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ái)系統(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 實(shí)現(xiàn)任務(wù)創(chuàng)建函數(shù)18
3.3 操作系統(tǒng)初始化22
3.4 啟動(dòng)系統(tǒng)24
3.5 任務(wù)切換27
3.6 main()函數(shù)33
3.7 實(shí)驗(yàn)現(xiàn)象37
第4章 任務(wù)時(shí)間片運(yùn)行39
4.1 SysTick簡(jiǎn)介39
4.2 初始化SysTick40
4.3 編寫(xiě)SysTick中斷服務(wù)函數(shù)41
4.4 main()函數(shù)42
4.5 實(shí)驗(yàn)現(xiàn)象44
第5章 空閑任務(wù)與阻塞延時(shí)45
5.1 實(shí)現(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 實(shí)現(xiàn)阻塞延時(shí)48
5.3 main()函數(shù)50
5.4 實(shí)驗(yàn)現(xiàn)象52
第6章 時(shí)間戳53
6.1 時(shí)間戳簡(jiǎn)介53
6.2 時(shí)間戳的實(shí)現(xiàn)53
6.3 時(shí)間戳代碼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 實(shí)驗(yàn)現(xiàn)象61
第7章 臨界段62
7.1 臨界段簡(jiǎn)介62
7.2 Cortex-M內(nèi)核快速關(guān)中斷指令62
7.3 關(guān)中斷63
7.4 開(kāi)中斷63
7.5 臨界段代碼的應(yīng)用64
7.6 測(cè)量關(guān)中斷時(shí)間68
7.6.1 測(cè)量關(guān)中斷時(shí)間初始化68
7.6.2 測(cè)量最大關(guān)中斷時(shí)間69
7.6.3 獲取最大關(guān)中斷時(shí)間70
7.7 main()函數(shù)71
7.8 實(shí)驗(yàn)現(xiàn)象71
第8章 就緒列表72
8.1 優(yōu)先級(jí)表的定義及函數(shù)72
8.2 就緒列表的定義及函數(shù)80
8.3 main()函數(shù)88
8.4 實(shí)驗(yàn)現(xiàn)象88
第9章 多優(yōu)先級(jí)89
9.1 定義優(yōu)先級(jí)相關(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 實(shí)驗(yàn)現(xiàn)象101
第10章 時(shí)基列表103
10.1 實(shí)現(xiàn)時(shí)基列表103
10.1.1 定義時(shí)基列表變量103
10.1.2 修改任務(wù)控制塊104
10.1.3 實(shí)現(xiàn)時(shí)基列表相關(guān)函數(shù)106
10.2 修改OSTimeDly()函數(shù)113
10.3 修改OSTimeTick()函數(shù)114
10.4 main()函數(shù)114
10.5 實(shí)驗(yàn)現(xiàn)象114
第11章 時(shí)間片115
11.1 實(shí)現(xiàn)時(shí)間片115
11.1.1 修改任務(wù)控制塊115
11.1.2 實(shí)現(xiàn)時(shí)間片調(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 實(shí)驗(yàn)現(xiàn)象122
第12章 任務(wù)的掛起和恢復(fù)124
12.1 實(shí)現(xiàn)任務(wù)的掛起和恢復(fù)124
12.1.1 定義任務(wù)的狀態(tài)124
12.1.2 修改任務(wù)控制塊125
12.1.3 編寫(xiě)任務(wù)掛起和恢復(fù)函數(shù)126
12.2 main()函數(shù)131
12.3 實(shí)驗(yàn)現(xiàn)象133
第13章 任務(wù)的刪除134
13.1 實(shí)現(xiàn)任務(wù)刪除134
13.2 main()函數(shù)136
13.3 實(shí)驗(yàn)現(xiàn)象136
第二部分 C/OS-III內(nèi)核
應(yīng)用開(kāi)發(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 添加文件到對(duì)應(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 下載驗(yàn)證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 啟動(dòng)任務(wù)163
15.2.6 app.c163
15.3 下載驗(yàn)證單任務(wù)166
15.4 創(chuàng)建多任務(wù)166
15.5 下載驗(yàn)證多任務(wù)171
第16章 C/OS-III的啟動(dòng)流程172
16.1 “萬(wàn)事俱備,只欠東風(fēng)”法172
16.2 “小心翼翼,十分謹(jǐn)慎”法173
16.3 兩種方法的適用情況175
16.4 系統(tǒng)的啟動(dò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