3dwoo大學簡體電腦書店
uC/OS-III內核實現與應用開發實戰指南:基于STM32
( 簡體 字)
作者:劉火良 楊森 編著類別:1. -> 電腦組織與體系結構 -> 嵌入式系統
出版社:機械工業出版社uC/OS-III內核實現與應用開發實戰指南:基于STM32 3dWoo書號: 51346
詢問書籍請說出此書號!
有庫存
NT售價: 645
出版日:6/1/2019
頁數:505
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787111628248 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
前言
引言
第一部分 從0到1教你寫
C/OS內核
第1章 新建工程—軟件仿真 2
1.1 新建本地工程文件夾 2
1.2 使用KEIL新建工程 2
1.2.1 New Project 2
1.2.2 Select Device For Target 3
1.2.3 Manage Run-Time Environment 3
1.3 在KEIL工程中新建文件組 4
1.4 在KEIL工程中添加文件 4
1.5 調試配置 6
1.5.1 設置軟件仿真 6
1.5.2 修改時鐘大小 6
1.5.3 添加頭文件路徑 7
第2章 裸機系統與多任務系統 8
2.1 裸機系統 8
2.1.1 輪詢系統 8
2.1.2 前后臺系統 9
2.2 多任務系統 10
第3章 任務的定義與任務切換 13
3.1 多任務系統中任務的概念 14
3.2 創建任務 15
3.2.1 定義任務棧 15
3.2.2 定義任務函數 16
3.2.3 定義任務控制塊 17
3.2.4 實現任務創建函數 18
3.3 操作系統初始化 22
3.4 啟動系統 24
3.5 任務切換 27
3.6 main()函數 33
3.7 實驗現象 37
第4章 任務時間片運行 39
4.1 SysTick簡介 39
4.2 初始化SysTick 40
4.3 編寫SysTick中斷服務函數 41
4.4 main()函數 42
4.5 實驗現象 44
第5章 空閑任務與阻塞延時 45
5.1 實現空閑任務 45
5.1.1 定義空閑任務棧 45
5.1.2 定義空閑任務的任務控制塊 46
5.1.3 定義空閑任務函數 47
5.1.4 空閑任務初始化 47
5.2 實現阻塞延時 48
5.3 main()函數 50
5.4 實驗現象 52
第6章 時間戳 53
6.1 時間戳簡介 53
6.2 時間戳的實現 53
6.3 時間戳代碼 54
6.3.1 CPU_Init()函數 54
6.3.2 CPU_TS_Init()函數 55
6.3.3 CPU_TS_TmrInit()函數 56
6.3.4 BSP_CPU_ClkFreq()函數 57
6.3.5 CPU_TS_TmrFreqSet()函數 58
6.3.6 CPU_TS_TmrRd()函數 58
6.3.7 OS_TS_GET()函數 59
6.4 main()函數 59
6.5 實驗現象 61
第7章 臨界段 62
7.1 臨界段簡介 62
7.2 Cortex-M內核快速關中斷指令 62
7.3 關中斷 63
7.4 開中斷 63
7.5 臨界段代碼的應用 64
7.6 測量關中斷時間 68
7.6.1 測量關中斷時間初始化 68
7.6.2 測量最大關中斷時間 69
7.6.3 獲取最大關中斷時間 70
7.7 main()函數 71
7.8 實驗現象 71
第8章 就緒列表 72
8.1 優先級表的定義及函數 72
8.2 就緒列表的定義及函數 80
8.3 main()函數 88
8.4 實驗現象 88
第9章 多優先級 89
9.1 定義優先級相關全局變量 89
9.2 修改OSInit()函數 89
9.3 修改任務控制塊 90
9.4 修改OSTaskCreate()函數 90
9.5 修改OS_IdleTaskInit()函數 92
9.6 修改OSStart()函數 93
9.7 修改PendSV_Handler()函數 93
9.8 修改OSTimeDly()函數 94
9.9 修改OSSched()函數 95
9.10 修改OSTimeTick()函數 97
9.11 main()函數 98
9.12 實驗現象 101
第10章 時基列表 103
10.1 實現時基列表 103
10.1.1 定義時基列表變量 103
10.1.2 修改任務控制塊 104
10.1.3 實現時基列表相關函數 106
10.2 修改OSTimeDly()函數 113
10.3 修改OSTimeTick()函數 114
10.4 main()函數 114
10.5 實驗現象 114
第11章 時間片 115
11.1 實現時間片 115
11.1.1 修改任務控制塊 115
11.1.2 實現時間片調度函數 116
11.2 修改OSTimeTick()函數 118
11.3 修改OSTaskCreate()函數 118
11.4 修改OS_IdleTaskInit()函數 120
11.5 main()函數 120
11.6 實驗現象 122
第12章 任務的掛起和恢復 124
12.1 實現任務的掛起和恢復 124
12.1.1 定義任務的狀態 124
12.1.2 修改任務控制塊 125
12.1.3 編寫任務掛起和恢復函數 126
12.2 main()函數 131
12.3 實驗現象 133
第13章 任務的刪除 134
13.1 實現任務刪除 134
13.2 main()函數 136
13.3 實驗現象 136
第二部分 C/OS-III內核
應用開發
第14章 移植C/OS-III到STM32 138
14.1 獲取STM32的裸機工程模板 138
14.2 下載C/OS-III源碼 138
14.3 C/OS-III源碼文件介紹 141
14.3.1 EvalBoards 141
14.3.2 C-CPU 141
14.3.3 C-LIB 143
14.3.4 C/OS-III 143
14.4 移植到STM32工程 145
14.4.1 在工程中添加文件分組 145
14.4.2 添加文件到對應分組 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.h 151
14.5.2 cpu_cfg.h 153
14.5.3 os_cfg_app.h 154
14.6 修改app.c 155
14.7 下載驗證 157
第15章 創建任務 158
15.1 硬件初始化 158
15.2 創建單任務 160
15.2.1 定義任務棧 160
15.2.2 定義任務控制塊 160
15.2.3 定義任務主體函數 160
15.2.4 創建任務 161
15.2.5 啟動任務 163
15.2.6 app.c 163
15.3 下載驗證單任務 166
15.4 創建多任務 166
15.5 下載驗證多任務 171
第16章 C/OS-III的啟動流程 172
16.1 “萬事俱備,只欠東風”法 172
16.2 “小心翼翼,十分謹慎”法 173
16.3 兩種方法的適用情況 175
16.4 系統的啟動 175
16.4.1 系統初始化 175
16.4.2 CPU初始化 179
16.4.3 SysTick初始化 182
16.4.4 內存初始化 183
16.4.5 OSStart()函數 183
16.4.6 app.c 184
第17章 任務管理 187
17.1 任務的基本概念 187
17.2 任務調度器的基本概念 188
17.3 任務狀態遷移 188
17.4 C/OS的任務狀態 190
17.5 常用的任務函數 190
17.5.1 任務掛起函數OS_TaskSuspend() 191
17.5.2 任務恢復函數 OSTaskResume() 194
17.5.3 任務刪除函數OSTaskDel() 198
17.5.4 任務延時函數 201
17.6 任務的設計要點 212
17.7 任務管理實驗 213
17.8 實驗現象 222
第18章 消息隊列 223
18.1 消息隊列的基本概念 223
18.2 消息隊列的工作過程 224
18.2.1 消息池初始化 224
18.2.2 消息隊列的運作機制 226
18.3 消息隊列的阻塞機制 227
18.4 消息隊列的應用場景 227
18.5 消息隊列的結構 228
18.6 消息隊列常用函數 230
18.6.1 消息隊列創建函數OSQCreate() 230
18.6.2 消息隊列刪除函數OSQDel() 233
18.6.3 消息隊列發送函數OSQPost() 239
18.6.4 消息隊列獲取函數OSQPend() 249
18.7 使用消息隊列的注意事項 256
18.8 消息隊列實驗 257
18.9 實驗現象 263
第19章 信號量 264
19.1 信號量的基本概念 264
19.1.1 二值信號量 264
19.1.2 計數信號量 265
19.2 信號量的應用場景 265
19.3 二值信號量的運作機制 266
19.4 計數信號量的運作機制 267
19.5 信號量控制塊 267
19.6 信號量函數 268
19.6.1 信號量創建函數 OSSemCreate() 268
19.6.2 信號量刪除函數OSSemDel() 271
19.6.3 信號量釋放函數OSSemPost() 275
19.6.4 信號量獲取函數OSSemPend() 280
19.7 使用信號量的注意事項 285
19.8 信號量實驗 286
19.8.1 二值信號量同步實驗 286
19.8.2 計數信號量實驗 292
19.9 實驗現象 298
19.9.1 二值信號量同步實驗現象 298
19.9.2 計數信號量實驗現象 299
第20章 互斥量 300
20.1 互斥量的基本概念 300
20.2 互斥量的優先級繼承機制 300
20.3 互斥量的應用場景 303
20.4 互斥量的運作機制 303
20.5 互斥量控制塊 304
20.6 互斥量函數 306
20.6.1 創建互斥量函數OSMutexCreate() 306
20.6.2 刪除互斥量函數OSMutexDel() 308
20.6.3 獲取互斥量函數OSMutexPend() 314
20.6.4 釋放互斥量函數OSMutexPost() 320
20.7 互斥量相關實驗 324
20.7.1 模擬優先級翻轉實驗 324
20.7.2 互斥量實驗 330
20.8 實驗現象 336
20.8.1 模擬優先級翻轉實驗現象 336
20.8.2 互斥量實驗現象 336
第21章 事件 338
21.1 事件的基本概念 338
21.2 事件的應用場景 339
21.3 事件的運作機制 339
21.4 事件控制塊 341
21.5 事件函數 342
21.5.1 事件創建函數OSFlagCreate() 342
21.5.2 事件刪除函數OSFlagDel() 344
21.5.3 事件設置函數OSFlagPost() 348
21.5.4 事件等待函數OSFlagPend() 355
21.6 事件實驗 366
21.7 實驗現象 371
第22章 軟件定時器 372
22.1 軟件定時器的基本概念 372
22.2 軟件定時器的應用場景 374
22.3 軟件定時器的精度 374
22.4 軟件定時器控制塊 375
22.5 軟件定時器函數 376
22.5.1 軟件定時器創建函數 OSTmrCreate() 376
22.5.2 軟件定時器啟動函數OSTmrStart() 379
22.5.3 軟件定時器列表管理 384
22.5.4 軟件定時器停止函數OSTmrStop() 387
22.5.5 軟件定時器刪除函數OSTmrDel() 391
22.6 軟件定時器任務 393
22.7 軟件定時器實驗 398
22.8 實驗現象 403
第23章 任務信號量 405
23.1 任務信號量的基本概念 405
23.2 任務信號量函數 406
23.2.1 任務信號量釋放函數OSTaskSemPost() 406
23.2.2 任務信號量獲取函數OSTaskSemPend() 410
23.3 任務信號量實驗 414
23.3.1 任務信號量代替二值信號量實驗 414
23.3.2 任務信號量代替計數信號量實驗 419
23.4 實驗現象 424
23.4.1 任務信號量代替二值信號量實驗現象 424
23.4.2 任務信號量代替計數信號量實驗現象 425
第24章 任務消息隊列 426
24.1 任務消息隊列的基本概念 426
24.2 任務消息隊列函數 427
24.2.1 任務消息隊列發送函數OSTaskQPost() 427
24.2.2 任務消息隊列獲取函數OSTaskQPend() 431
24.3 任務消息隊列實驗 435
24.4 實驗現象 439
第25章 內存管理 440
25.1 內存管理的基本概念 440
25.2 內存管理的運作機制 441
25.3 內存管理的應用場景 443
25.4 內存管理函數 443
25.4.1 內存池創建函數OSMemCreate() 443
25.4.2 內存申請函數OSMemGet() 447
25.4.3 內存釋放函數OSMemPut() 449
25.5 內存管理實驗 451
25.6 實驗現象 456
第26章 中斷管理 457
26.1 異常與中斷的基本概念 457
26.1.1 與中斷相關的硬件 458
26.1.2 與中斷相關的術語 458
26.2 中斷的運作機制 459
26.3 中斷延遲的概念 460
26.4 中斷的應用場景 461
26.5 ARM Cortex-M的中斷管理 461
26.6 中斷延遲發布 463
26.6.1 中斷延遲發布的概念 463
26.6.2 中斷隊列控制塊 465
26.6.3 中斷延遲發布任務初始化函數OS_IntQTaskInit() 466
26.6.4 中斷延遲發布過程函數OS_IntQPost() 468
26.6.5 中斷延遲發布任務函數OS_IntQTask() 471
26.7 中斷管理實驗 475
26.8 實驗現象 481
第27章 CPU利用率及棧檢測統計 482
27.1 CPU利用率的基本概念及作用 482
27.2 CPU利用率統計初始化 483
27.3 棧溢出檢測概念及作用 485
27.4 棧溢出檢測過程 487
27.5 統計任務函數OS_StatTask() 487
27.6 棧檢測函數OSTaskStkChk() 493
27.7 任務棧大小的確定 496
27.8 CPU利用率及棧檢測統計實驗 496
27.9 實驗現象 502
附錄 503
本書基于野火STM32全系列開發板介紹μC/OS-III內核實現與應用開發,全書分為兩部分:第一部分先教你如何從0到1把μC/OS-III內核寫出來,從底層的匯編開始講解任務如何定義、如何切換,還講解了阻塞延時如何實現、如何支持多優先級、如何實現時基列表以及時間片等μC/OS的核心知識點;第二部分講解μC/OS-III內核組件的應用以及使用μC/OS-III進行多任務編程。

本書內容翔實,案例豐富,配有大量示例代碼,適合作為嵌入式領域科技工作者的參考書,也適合相關專業的學生學習參考。



全書內容循序漸進,不斷迭代,在學習的時候務必做到兩點:一是不能一味地看書,要把代碼和書本結合起來學習,一邊看書, 一邊調試代碼;二是在學完每一章之后,將配套例程重寫一遍,做到舉一反三,真正理解。

本書電子版和配套的源碼均可到野火論壇下載,歡迎各位讀者積極參與交流分享 。
如何學習本書

本書從0開始教你如何把C/OS-III寫出來,既講解源碼實現,也講解API如何使用。當你拿到本書開始學習時一定會驚訝,原來RTOS(Real Time Operation System,實時操作系統)的學習并沒有那么復雜,原來自己也可以寫操作系統,成就感立馬爆棚。

全書內容循序漸進,不斷迭代,前一章都是后一章的基礎,因此最好從頭開始閱讀,不要跳躍。在學習時務必做到兩點:一是不能一味地看書,要把代碼和書本結合起來學習,一邊看書,一邊調試代碼。如何調試代碼呢?即單步執行每一條程序,看程序的執行流程和執行效果與自己所想的是否一致;二是在每學完一章之后,必須將配套的例程重寫一遍(切記不要復制,哪怕是一個分號,但可以照書錄入),以做到舉一反三,確保真正理解。在自己寫的時候肯定會錯漏百出,這個時候要認真糾錯,好好調試,這是你提高編程能力的最好機會。記住,編寫程序不是一氣呵成的,而是要一步一步地調試。

本書的編寫風格

本書以C/OS-III官方源碼為藍本,抽絲剝繭,不斷迭代,教你逐步寫出C/OS-III。書中涉及的數據類型、變量名稱、函數名稱、文件名稱、文件存放的位置都完全按照C/OS-III官方的方式來實現。學完本書之后,可以無縫地切換到原版的C/OS-III中使用。要注意的是,在實現的過程中某些函數中會去掉一些形參和冗余的代碼,只保留核心的功能,但這并不會影響學習。注意,本書的目的并不是讓你自己寫一個操作系統,而是讓你了解C/OS-III是如何寫出來的,著重講解原理實現,當你學完這本書之后,再學習其他RTOS將會事半功倍。

本書的技術論壇

如果在學習過程中遇到問題,可以到野火電子論壇發帖交流,開源共享,共同進步。

鑒于水平有限,本書難免有錯漏之處,熱心的讀者也可把勘誤發送到論壇上以便改進。祝你學習愉快,C/OS-III的世界,野火與你同行。
pagetop