嵌入式實時作業系統μC/OS原理與實踐(第2版)

任務................................51.3.1 任務的刪除.........................532.5.1 ..............................1284.4.5

圖書信息

書名:嵌入式實時作業系統μC/OS原理與實踐(第2版)
作者:盧有亮 編著
ISBN:978-7-121-22517-8
出版時間:2014年4月出版
定價:49.00元
頁數:288頁
開本:16開

目錄

第1章 實時作業系統基礎............................1
1.1 作業系統概述........................1
1.1.1 什麼是作業系統...............................1
1.1.2 作業系統基本功能...........................2
1.2 實時作業系統概述....................3
1.2.1 什麼是實時作業系統.......................3
1.2.2 實時作業系統的基本特徵...............4
1.3 任務................................5
1.3.1 任務簡介..........................................5
1.3.2 多任務..............................................6
1.3.3 任務狀態..........................................7
1.3.4 任務切換..........................................8
1.3.5 可重入函式和不可重入函式 ..........9
1.4 基於優先權的可剝奪核心.............11
1.4.1 核心 ...............................................11
1.4.2 基於優先權的調度算法.................11
1.4.3 不可剝奪型核心和可剝奪型核心 .12
1.5 同步與通信.........................13
1.5.1 同步 ...............................................13
1.5.2 互斥................................................14
1.5.3 臨界區............................................14
1.5.4 事件................................................15
1.5.5 信號量............................................15
1.5.6 互斥信號量....................................17
1.5.7 事件標誌組....................................17
1.5.8 訊息信箱和訊息佇列.....................17
1.6 時鐘和中斷.........................19
1.7 記憶體管理...........................21
1.8 嵌入式實時作業系統μC/OS學習開發指引 ....21
習題....................................22
第2章 任務管理..........................................23
2.1 任務管理數據結構...................24
2.1.1 任務控制塊....................................24
2.1.2 空閒鍊表和就緒鍊表.....................28
2.1.3 任務優先權指針表.........................30
2.1.4 任務堆疊........................................31
2.1.5 任務就緒表和就緒組.....................33
2.2 任務控制塊初始化...................38
2.2.1 代碼解析........................................38
2.2.2 流程分析........................................40
2.3 作業系統初始化.....................41
2.3.1 代碼解析........................................41
2.3.2 流程分析........................................45
2.4 任務的創建.........................45
2.4.1 OSTaskCreate代碼解析..................46
2.4.2 OSTaskCreate流程分析..................48
2.4.3 OSTaskCreateExt代碼解析............49
2.4.4 OSTaskCreateExt流程分析............52
2.5 任務的刪除.........................53
2.5.1 任務刪除代碼解析.........................54
2.5.2 任務刪除流程分析.........................57
2.5.3 請求刪除任務代碼解析.................58
2.5.4 請求刪除任務流程.........................59
2.6 任務掛起和恢復.....................60
2.6.1 OSTaskSuspend代碼解析...............61
2.6.2 OSTaskSuspend流程分析...............63
2.6.3 OSTaskResume代碼解析...............63
2.6.4 OSTaskResume流程分析...............65
2.7 任務的調度和多任務的啟動...........66
2.7.1 任務調度器....................................66
2.7.2 任務切換函式................................68
2.7.3 中斷中的任務調度.........................73
2.7.4 多任務的啟動 ..............................74
2.8 特殊任務...........................75
2.8.1 空閒任務OS_TaskIdle....................75
2.8.2 統計任務OS_TaskStat....................76
2.9 任務管理總結.......................78
習題....................................79
第3章 中斷和時間管理.............................80
3.1 中斷管理...........................80
3.1.1 中斷管理核心思路.........................80
3.1.2 中斷處理的流程.............................82
3.1.3 時鐘中斷服務................................82
3.2 時間管理...........................83
3.2.1 時間管理主要數據結構.................83
3.2.2 時間的獲取和設定.........................84
3.2.3 任務延時函式OSTimeDly.............84
3.2.4 任務按分秒延遲函式
OSTimeDlyHMSM...........................86
3.2.5 延時恢複函數OSTimeDlyResume.....87
習題....................................90
第4章 事件管理..........................................91
4.1 事件管理的重要數據結構.............91
4.1.1 事件控制塊(ECB).....................91
4.1.2 事件等待組和事件等待表.............92
4.1.3 事件控制塊空閒鍊表.....................93
4.2 事件管理程式.......................94
4.2.1 事件控制塊(ECB)初始化.........94
4.2.2 事件等待表初始化.........................94
4.2.3 設定事件等待................................95
4.2.4 取消事件等待................................97
4.2.5 將等待事件的任務就緒.................97
4.3 信號量管理.........................99
4.3.1 信號量的建立OSSemCreate...........99
4.3.2 信號量的刪除OSSemDel..............101
4.3.3 請求信號量OSSemPend................104
4.3.4 提交信號量...................................107
4.3.5 無等待請求信號量........................109
4.3.6 放棄等待信號量............................110
4.3.7 信號量值設定...............................111
4.3.8 查詢信號量狀態............................112
4.3.9 信號量套用舉例............................113
4.4 互斥信號量管理....................117
4.4.1 互斥信號量的建立........................118
4.4.2 請求互斥信號量............................120
4.4.3 互斥信號量的刪除........................125
4.4.4 發互斥信號量 ..............................128
4.4.5 無等待請求互斥信號量................130
4.4.6 查詢互斥信號量狀態....................131
4.4.7 改變任務的優先權並重新就緒....133
4.4.8 互斥信號量套用舉例....................133
4.5 事件標誌組管理....................137
4.5.1 事件標誌組數據結構....................138
4.5.2 事件標誌組初始化........................140
4.5.3 創建事件標誌組............................141
4.5.4 事件標誌組阻塞函式....................142
4.5.5 請求事件標誌...............................143
4.5.6 刪除事件標誌組............................150
4.5.7 提交事件標誌組............................152
4.5.8 標誌節點任務就緒........................154
4.5.9 無等待的請求事件標誌................155
4.5.10 事件標誌管理套用舉例..............157
習題...................................161
第5章 訊息管理........................................162
5.1 訊息信箱..........................162
5.1.1 建立訊息信箱...............................163
5.1.2 等待訊息.......................................165
5.1.3 發訊息...........................................168
5.1.4 刪除訊息信箱...............................170
5.1.5 放棄等待信箱...............................173
5.1.6 無等待請求訊息............................175
5.1.7 查詢訊息信箱狀態........................175
5.1.8 訊息信箱的例子............................176
5.2 訊息佇列..........................178
5.2.1 訊息佇列數據結構........................179
5.2.2 初始化訊息佇列............................182
5.2.3 建立訊息佇列...............................183
5.2.4 發訊息到訊息佇列........................185
5.2.5 等待訊息佇列中的訊息................186
5.2.6 刪除訊息佇列...............................188
5.2.7 取得訊息佇列的狀態....................190
5.2.8 訊息佇列套用舉例........................191
習題...................................194
第6章 記憶體管理........................................195
6.1 記憶體管理數據結構..................195
6.1.1 記憶體控制塊...................................195
6.1.2 記憶體控制塊實體............................196
6.1.3 空閒記憶體控制塊鍊表....................196
6.1.4 記憶體分區.......................................196
6.2 記憶體控制塊初始化..................197
6.3 創建記憶體分區......................198
6.4 記憶體分區獲取......................200
6.5 記憶體分區釋放......................201
6.6 查詢記憶體分區的狀態................202
6.7 記憶體管理實例......................203
習題...................................205
第7章 移植 ..............................................206
7.1 移植說明..........................206
7.1.1 μC/OS-II的代碼結構..................206
7.1.2 作業系統中與CPU相關的代碼解析....209
7.1.3 μC/OS-II移植步驟......................213
7.2 在Visual C++ 6.0上實現基於
Windows的虛擬μC/OS-II移植.........213
7.2.1 目錄結構和工程的建立................213
7.2.2 包含檔案includes.h........................214
7.2.3 os_cpu.h中修改的代碼..................215
7.2.4 os_cpu.c中修改的代碼..................216
7.2.5 主程式代碼實現............................219
7.2.6 移植測試.......................................220
7.3 μC/OS-II在ARM Cortex M3下的移植......221
7.3.1 與移植相關的ARM Cortex M3研究....221
7.3.2 os_cpu.h代碼解析.........................223
7.3.3 os_cpu_c.c移植代碼解析..............225
7.3.4 os_cpu_a.asm移植代碼解析..........227
7.3.5 移植後的目錄結構........................233
習題...................................234
第8章 工程實踐 .....................................235
8.1 工程需求說明......................235
8.2 分析..............................236
8.3 工程設計..........................236
8.3.1 整體設計.......................................236
8.3.2 主機硬體接口設計........................237
8.3.3 多任務設計...................................238
8.3.4 串口數據格式...............................239
8.4 程式設計..........................239
8.4.1 主程式...........................................239
8.4.2 串口中斷服務程式........................240
8.4.3 緩衝區處理任務代碼....................240
8.4.4 顯示任務代碼...............................242
8.4.5 AD 採集任務代碼........................243
8.4.6 觸控螢幕任務代碼............................244
8.4.7 μC/GUI訊息處理任務代碼..........244
8.4.8 啟動任務代碼...............................245
8.4.9 工程代碼結構...............................245
8.5 運行測試..........................246
習題...................................246
設計題.................................247
第9章 μC/OS-III分析、移植與套用實踐.....248
9.1 本章說明..........................248
9.2 μC/OS-III代碼結構.................248
9.3 μC/OS-III在STM32上的移植..........250
9.3.1 os_cpu.h代碼.................................250
9.3.2 os_cpu_c.c移植代碼......................251
9.3.3 os_cpu_a.asm移植代碼..................252
9.4 μC/OS-III函式.....................253
9.4.1 任務管理函式...............................253
9.4.2 時間管理函式...............................255
9.4.3 信號量管理函式............................255
9.4.4 互斥信號量管理函式....................257
9.4.5 訊息佇列管理函式........................258
9.4.6 中斷管理函式...............................259
9.4.7 核心函式.......................................259
9.5 μC/OS-III工程示例.................260
9.5.1 工程分組.......................................260
9.5.2 主程式...........................................261
9.5.3 串口中斷服務程式........................263
9.5.4 緩衝區處理任務代碼....................264
9.5.5 顯示任務代碼...............................266
9.5.6 啟動任務代碼 ..............................266
9.5.7 其他代碼 ......................................267
9.5.8 運行測試.......................................267
習題...................................267
設計題.................................267
附錄A 亮點STM32開發板資源...............268
A.1 硬體資源概述......................268
A.2 硬體資源按引腳分配................269
A.3 接口描述..........................271
A.4 軟體資源..........................276
A.5 網路資源..........................277
參考文獻...................................................278

前言

智慧型系統的盛行使21世紀前10年成為手指尖在觸控螢幕上滑動拖曳的時代。不少高級科技人員解決了一個又一個困難,使裸奔的軟體在中斷和循環的糾纏中走了很遠很久。在ARM處理器走出江湖之後,處理器的處理速度和快閃記憶體Flash、靜態存儲器SRAM的容量都飛速提升,高性能處理器的出現也使高端的複雜處理程式採用嵌入式來實現,如物聯網、智慧型手機。存儲容量的擴充使嵌入式作業系統有了用武之地。在STM32使用的ARM Cortex處理器中,具有主堆疊MSP和進程堆疊PSP,具有PendSV和Systick中斷,這些很明顯是配合了μC/OS作業系統。
本書的第1版內容充實,有流程圖等輔助手段,筆者在部落格提供了PPT、實驗教程和代碼,受到了讀者的好評,並被一些有所作為的老師引為教材,不少工程師也因此嘗到了熟讀代碼的甜頭。因此,第2版的創作有了足夠的動力。這本書是筆者獨自完成的,第2版的改版經過和很多讀者的交流及論壇的諮詢交流。第1版的缺陷也顯而易見,缺少了硬體平台,只是在VC下仿真學習。因此,筆者設計的亮點STM32開發板彌補了這一個缺陷,也是第2版修改和增加的移植、工程實例及μC/OS-III的基礎平台。當然,實驗平台是選項,如果喜歡在VC下學習仍然是可以的,而在其他嵌入式系統及開發板下對筆者提供的代碼的配置信息進行修改,也可以勝任。
第2版中將提供在STM32(ARM Cortex核心系列晶片)下的移植和例程,增加套用性的工程示例。2013年μC/OS-III逐步進入市場,第2版也包含了這方面的內容。為方便讀者閱讀代碼,本書目前配套的亮點嵌入式開發板的資源也在附錄中列出,不選擇開發板的同樣可以下載代碼。另外以技術論壇作為交流平台或翻轉課堂,論壇地址在序言最後給出。
內容劃分
第1章是作業系統和嵌入式實時作業系統的基本原理。第2章是作業系統最核心的任務管理,需要對數據結構和原始碼仔細體會。第3章是中斷和事件管理。第4章、第5章是事件和訊息部分,包含了各種事件和訊息機制。第6章是記憶體管理。第7章是移植的流程分析和在虛擬平台及STM32下的移植。第8章是全新的工程實踐部分,給出一個在STM32下的完整的工程示例。第9章是與時俱進的μC/OS-III,並將工程實踐的代碼在μC/OS-III上實現了一遍。
本書特色
採用逐步深入,反覆印證的方法。 ●
採用從數據結構的設計入手,再到代碼分析、示例驗證的剖析方法。給出在虛擬平台 ●下的移植示例和針對各章內容的示例。
給出在實際嵌入式系統下的工程示例。 ●
表格、圖形化的風格。 ●
適用面廣,適合於廣大IT類學生及工作者。 ●
對於沒有學習過作業系統原理的讀者無障礙。 ●
與時俱進地擴展到μC/OS-III。 ●
學習本課程的先導知識是C語言、軟體技術基礎或數據結構,可以同步學習微機原理 ●或嵌入式系統設計。另外,本人的另一本著作《基於STM32的嵌入式系統原理與設計》可以與本書交相輝映。
作為本科生等教材的建議是:第1、2、3章詳細講解,第4、5、6章的內容每章選擇2~3節講解。第7、8章的內容可作為實踐部分。另外如果要上實驗,則可以選擇在Windows下的虛擬實驗,在論壇和部落格提供有實驗的PPT和代碼。另外,也可以選擇使用亮點STM32開發板作為實驗教學平台。本書在每章後提供了習題,筆者也編寫了PPT,適合32~48學時對高年級本科生或低年級研究生講授。同時歡迎廣大技術人員引為學習資料,歡迎進論壇和訪問筆者的部落格進行交流。
目前可以提供的資源主要有:
教學課件。 ●
15個學時的實驗教程代碼和PPT。 ●
亮點STM32開發板及配套μC/OS實例代碼。 ●
感謝讀者對本書的認可,歡迎讀者到論壇和部落格獲取資料、交流及提出寶貴意見。
筆者
2014年於成都

熱門詞條

聯絡我們