具體描述
內容簡介
μC/OSII是一個源碼開放的嵌入式實時操作係統的內核。本書詳細地介紹瞭嵌入式實時操作係統μC/OSII內核的任務的管理和調度、係統時鍾和節拍服務、時間管理、中斷、任務的通信和同步、內存的簡單管理原理。為幫助讀者理解書中的內容,本書給齣瞭大量的實例。最後,還介紹瞭μC/OSII的移植方法。為瞭學習上的方便,第3版還增加瞭使用集成開發環境BC45和VC6.0編譯μC/OSII的相關內容。第4版主要對第3版前3章做瞭較大的修改,增加瞭普通操作係統和嵌入式操作係統的區彆,隊列、堆棧、計算機中斷等特殊問題,並重新編寫瞭任務的概念等內容。
本書適閤高等院校計算機、電子技術、自動化技術、儀器儀錶等信息類專業教學使用,也適閤對嵌入式操作係統感興趣的工程技術人員閱讀參考。
目錄
第1章 嵌入式實時操作係統的基本概念……………………………………………………… 1
1.1 計算機操作係統………………………………………………………………………… 1
1.1.1 什麼是計算機操作係統…………………………………………………………… 1
1.1.2 操作係統的作用和功能…………………………………………………………… 2
1.2 嵌入式係統和嵌入式操作係統………………………………………………………… 3
1.2.1 嵌入式係統的基本概念…………………………………………………………… 4
1.2.2 嵌入式操作係統…………………………………………………………………… 7
1.2.3 實時操作係統需要滿足的條件…………………………………………………… 9
1.2.4 嵌入式係統的任務及嵌入式實時操作係統……………………………………… 11
1.3 嵌入式實時操作係統μC/OS II簡介……………………………………………… 12
1.4 通用操作係統與嵌入式操作係統的異同……………………………………………… 13
1.5 小 結…………………………………………………………………………………… 15
1.6 練習題…………………………………………………………………………………… 15
第2章 預備知識……………………………………………………………………………… 16
2.1 開發工具………………………………………………………………………………… 16
2.1.1 BorlandC3.1及其精簡版……………………………………………………… 16
2.1.2 多文件程序的編譯和連接………………………………………………………… 21
2.2 工程管理工具make及makefile ……………………………………………………… 24
2.3 復雜工程項目的管理…………………………………………………………………… 32
2.3.1 批處理文件與makefile的綜閤使用…………………………………………… 32
2.3.2 復雜工程管理示例………………………………………………………………… 33
2.4 C指針…………………………………………………………………………………… 37
2.4.1 指針的基本概念…………………………………………………………………… 37
2.4.2 函數指針…………………………………………………………………………… 39
2.4.3 函數指針作為函數參數及迴調函數……………………………………………… 41
2.5 typedef常用方法……………………………………………………………………… 43
2.6 常用數據類型及數據結構……………………………………………………………… 45
2.6.1 控製塊……………………………………………………………………………… 46
2.6.2 同類控製塊的登記造冊…………………………………………………………… 50
2.6.3 隊列與堆棧………………………………………………………………………… 52
2.6.4 位 圖……………………………………………………………………………… 54
2.7 程序流程轉移的中斷實現方法………………………………………………………… 55
2.8 小 結…………………………………………………………………………………… 56
2.9 練習題…………………………………………………………………………………… 56
第3章 μC/OS II中的任務………………………………………………………………… 57
3.1 任務的基本概念………………………………………………………………………… 57
3.1.1 任務及其種類……………………………………………………………………… 57
3.1.2 任務的狀態………………………………………………………………………… 59
3.1.3 用戶任務代碼的一般結構………………………………………………………… 60
3.1.4 係統任務…………………………………………………………………………… 63
3.1.5 任務的優先權及優先級彆………………………………………………………… 64
3.2 任務堆棧………………………………………………………………………………… 65
3.2.1 任務堆棧的創建…………………………………………………………………… 65
3.2.2 任務堆棧的初始化………………………………………………………………… 67
3.3 任務控製塊及其鏈錶…………………………………………………………………… 68
3.3.1 任務控製塊結構…………………………………………………………………… 68
3.3.2 任務控製塊鏈錶…………………………………………………………………… 69
3.3.3 任務控製塊的初始化……………………………………………………………… 71
3.4 任務就緒錶及任務調度………………………………………………………………… 72
3.4.1 任務就緒錶結構…………………………………………………………………… 72
3.4.2 對任務就緒錶的操作……………………………………………………………… 74
3.4.3 任務調度…………………………………………………………………………… 76
3.5 任務的創建……………………………………………………………………………… 81
3.5.1 用函數OSTaskCreate()創建任務……………………………………………… 81
3.5.2 用函數OSTaskCreateExt()創建任務…………………………………………… 83
3.5.3 創建任務的一般方法……………………………………………………………… 83
3.6 任務的掛起和恢復……………………………………………………………………… 90
3.6.1 掛起任務…………………………………………………………………………… 90
3.6.2 恢復任務…………………………………………………………………………… 90
3.7 其他任務管理函數……………………………………………………………………… 96
3.7.1 任務優先級彆的修改……………………………………………………………… 96
3.7.2 任務的刪除………………………………………………………………………… 97
3.7.3 查詢任務的信息………………………………………………………………… 103
3.8 μC/OS II的初始化和任務的啓動………………………………………………… 103
3.8.1 μC/OS II的初始化…………………………………………………………… 103
3.8.2 μC/OS II的啓動……………………………………………………………… 105
3.9 小 結………………………………………………………………………………… 107
3.10 練習題………………………………………………………………………………… 108
第4章 μC/OS II的中斷和時鍾…………………………………………………………… 109
4.1 μC/OS II的中斷…………………………………………………………………… 109
4.1.1 μC/OS II的中斷過程………………………………………………………… 109
4.1.2 中斷級任務切換函數…………………………………………………………… 113
4.1.3 應用程序中的臨界段…………………………………………………………… 113
4.2 μC/OS II的時鍾…………………………………………………………………… 115
4.3 時間管理……………………………………………………………………………… 122
4.3.1 任務的延時……………………………………………………………………… 122
4.3.2 取消任務的延時………………………………………………………………… 123
4.3.3 獲取和設置係統時間…………………………………………………………… 128
4.4 小 結………………………………………………………………………………… 130
4.5 練習題………………………………………………………………………………… 131
第5章 任務的同步與通信…………………………………………………………………… 132
5.1 任務的同步和事件…………………………………………………………………… 132
5.1.1 任務間的同步…………………………………………………………………… 132
5.1.2 事 件…………………………………………………………………………… 133
5.2 事件控製塊及事件處理函數………………………………………………………… 145
5.2.1 事件控製塊的結構……………………………………………………………… 145
5.2.2 操作事件控製塊的函數………………………………………………………… 147
5.2.3 空事件控製塊鏈錶……………………………………………………………… 149
5.3 信號量及其操作……………………………………………………………………… 150
5.3.1 信號量…………………………………………………………………………… 150
5.3.2 信號量的操作…………………………………………………………………… 151
5.4 互斥型信號量和任務優先級反轉…………………………………………………… 160
5.4.1 任務優先級的反轉現象………………………………………………………… 161
5.4.2 互斥型信號量…………………………………………………………………… 166
5.5 消息郵箱及其操作…………………………………………………………………… 169
5.5.1 消息郵箱………………………………………………………………………… 169
5.5.2 消息郵箱的操作………………………………………………………………… 170
5.6 消息隊列及其操作…………………………………………………………………… 175
5.6.1 消息隊列………………………………………………………………………… 175
5.6.2 消息隊列的操作………………………………………………………………… 178
5.7 小 結………………………………………………………………………………… 184
5.8 練習題………………………………………………………………………………… 185
第6章 信號量集……………………………………………………………………………… 186
6.1 信號量集的結構……………………………………………………………………… 186
6.1.1 基本概念………………………………………………………………………… 186
6.1.2 信號量集的結構組成…………………………………………………………… 187
6.1.3 對等待任務鏈錶的操作………………………………………………………… 191
6.1.4 空標誌組鏈錶…………………………………………………………………… 191
6.2 信號量集的操作……………………………………………………………………… 192
6.2.1 創建信號量集…………………………………………………………………… 192
6.2.2 請求信號量集…………………………………………………………………… 194
6.2.3 嚮信號量集發送信號…………………………………………………………… 194
6.2.4 查詢信號量集的狀態…………………………………………………………… 200
6.2.5 刪除信號量集…………………………………………………………………… 203
6.3 小 結………………………………………………………………………………… 203
6.4 練習題………………………………………………………………………………… 203
第7章 動態內存管理………………………………………………………………………… 204
7.1 內存控製塊…………………………………………………………………………… 204
7.1.1 可動態分配內存的劃分………………………………………………………… 204
7.1.2 內存控製塊OS_MEM 的結構………………………………………………… 205
7.1.3 空內存控製塊鏈錶……………………………………………………………… 206
7.2 動態內存的管理……………………………………………………………………… 206
7.2.1 創建動態內存分區……………………………………………………………… 206
7.2.2 請求獲得一個內存塊…………………………………………………………… 208
7.2.3 釋放一個內存塊………………………………………………………………… 211
7.2.4 查詢一個內存分區的狀態……………………………………………………… 215
7.3 小 結………………………………………………………………………………… 220
7.4 練習題………………………………………………………………………………… 220
第8章 在51單片機上移植μC/OS II …………………………………………………… 221
8.1 μC/OS II移植的一般性問題……………………………………………………… 221
8.1.1 可重入函數的概念……………………………………………………………… 221
8.1.2 時鍾節拍的産生………………………………………………………………… 222
8.1.3 任務堆棧的設計………………………………………………………………… 222
8.2 在51係列單片機上移植μC/OS II ……………………………………………… 223
8.2.1 文件OS_CPU.H 的修改……………………………………………………… 223
8.2.2 任務堆棧的設計………………………………………………………………… 224
8.2.3 文件OS_CPU_C.C的修改…………………………………………………… 231
8.2.4 幾點注意事項…………………………………………………………………… 232
8.3 應用舉例……………………………………………………………………………… 232
8.3.1 LED數碼顯示器的驅動程序…………………………………………………… 232
8.3.2 串行接口的應用………………………………………………………………… 234
8.4 小 結………………………………………………………………………………… 242
8.5 練習題………………………………………………………………………………… 242
第9章 基於ARM 的μC/OS II…………………………………………………………… 243
9.1 移植規劃……………………………………………………………………………… 243
9.1.1 編譯器的選擇…………………………………………………………………… 243
9.1.2 ARM7工作模式的選擇………………………………………………………… 243
9.2 移 植………………………………………………………………………………… 244
9.2.1 文件OS_CPU.H 的編寫……………………………………………………… 244
9.2.2 文件OS_CPU_C.C的編寫…………………………………………………… 246
9.2.3 文件OS_CPU_A.S的編寫…………………………………………………… 253
9.2.4 關於中斷及時鍾節拍…………………………………………………………… 256
9.3 在LPC2000上移植μC/OS II …………………………………………………… 257
9.3.1 掛接SWI軟件中斷……………………………………………………………… 258
9.3.2 中斷及時鍾節拍中斷…………………………………………………………… 258
9.3.3 一個基於μC/OS II和ARM 的應用程序實例……………………………… 259
9.4 小 結………………………………………………………………………………… 261
9.5 練習題………………………………………………………………………………… 261
第10章 μC/OS II在80x86上的移植…………………………………………………… 262
10.1 概 述………………………………………………………………………………… 262
10.2 任務切換……………………………………………………………………………… 263
10.2.1 任務切換函數OSCtxSw() …………………………………………………… 263
10.2.2 任務切換宏OS_TASK_SW()………………………………………………… 265
10.2.3 中斷級任務切換函數OSIntCtxSw()………………………………………… 266
10.3 係統時鍾……………………………………………………………………………… 267
10.3.1 PC中DOS的係統時鍾………………………………………………………… 267
10.3.2 PC中μC/OS II的係統時鍾………………………………………………… 267
10.3.3 μC/OS II係統時鍾中斷服務程序…………………………………………… 269
10.3.4 μC/OS II係統時鍾中斷嚮量的安裝………………………………………… 269
10.3.5 由μC/OS II返迴DOS ……………………………………………………… 270
10.4 小 結………………………………………………………………………………… 271
第11章 μC/OS II可裁剪性的實現……………………………………………………… 272
11.1 文件OS_CFG.H 中用於係統裁剪的常量………………………………………… 272
11.2 配置常量的解釋……………………………………………………………………… 274
11.2.1 OS_MAX_EVENTS ………………………………………………………… 274
11.2.2 OS_MAX_MEM_PARTS …………………………………………………… 275
11.2.3 OS_MAX_QS ………………………………………………………………… 275
11.2.4 OS_MAX_MEM_TASKS …………………………………………………… 275
11.2.5 OS_LOWEST_PRIO ………………………………………………………… 275
11.2.6 OS_TASK_IDLE_STK_SIZE ………………………………………………… 276
11.2.7 OS_TASK_STAT_EN ……………………………………………………… 276
11.2.8 OS_TASK_STAT_STK_SIZE ……………………………………………… 276
11.2.9 OS_CPU_HOOKS_EN ……………………………………………………… 276
11.2.10 OS_MBOX_EN ……………………………………………………………… 277
11.2.11 OS_MEM_EN ………………………………………………………………… 277
11.2.12 OS_Q_EN …………………………………………………………………… 277
11.2.13 OS_SEM_EN ………………………………………………………………… 277
11.2.14 OS_TASK_CHANGE_PRIO_EN ………………………………………… 277
11.2.15 OS_TASK_CREATE_EN …………………………………………………… 277
11.2.16 OS_TASK_CREATE_EXT_EN …………………………………………… 278
11.2.17 OS_TASK_DEL_EN ………………………………………………………… 278
11.2.18 OS_TASK_SUSPEND_EN ………………………………………………… 278
11.2.19 OS_TICKS_PER_SEC ……………………………………………………… 278
第12章 在集成開發環境上編譯μC/OS II ……………………………………………… 279
《深入理解ARM Cortex-M係列處理器:架構、指令集與嵌入式係統設計》 內容梗概: 本書是一本全麵深入探討ARM Cortex-M係列處理器內核的專著,旨在為讀者提供理解和掌握這一主流嵌入式處理器架構的堅實基礎。內容涵蓋瞭Cortex-M係列處理器核心的內部架構、指令集特性、存儲器管理、中斷處理機製、調試接口等方麵,並結閤實際應用,闡述瞭如何利用這些核心構建高效、可靠的嵌入式係統。本書特彆關注Cortex-M係列在實時性、低功耗和高性能方麵的設計理念,以及如何在實際項目中充分發揮其優勢。 詳細內容介紹: 第一部分:ARM Cortex-M係列處理器架構解析 1. ARM處理器發展曆程與Cortex-M係列定位: 簡要迴顧ARM架構的發展,從經典的ARMv7-A/R架構過渡到Cortex-M係列。 詳細闡述Cortex-M係列(包括M0, M0+, M3, M4, M7, M33等)在嵌入式領域的市場定位,以及其相對於其他ARM內核(如Cortex-A/R)的優勢和適用場景。 分析Cortex-M係列麵嚮的典型應用領域,如物聯網設備、工業自動化、醫療器械、汽車電子等。 2. Cortex-M內核核心架構: 流水綫(Pipeline)與指令執行: 深入解析Cortex-M係列處理器采用的流水綫結構(如3級、6級流水綫),講解指令的取指、譯碼、執行、訪存、寫迴等階段,以及流水綫對性能的影響。 寄存器組(Register File): 詳細介紹Cortex-M係列通用寄存器(R0-R15)、特殊功能寄存器(如PC, SP, LR, PSR等)的用途和操作。 指令集架構(ISA): Thumb-2技術: 重點講解Thumb-2指令集,分析其如何結閤16位和32位指令的優勢,實現代碼密度和性能的平衡。 常用指令詳解: 深入剖析算術、邏輯、數據傳輸、分支跳轉、存儲器訪問、狀態位操作等常用指令的格式、編碼和執行過程。 協處理器接口(CP10, CP11): (視具體Cortex-M版本而定)介紹Cortex-M係列對協處理器(如FPU)的支持,以及如何通過指令進行交互。 存儲器接口: Harvard架構與Von Neumann架構: 分析Cortex-M係列通常采用的改進型Harvard架構,以及其與傳統架構的區彆和優勢。 總綫接口(Bus Interface): 介紹AMBA AHB-Lite或AXI等總綫協議在Cortex-M處理器與外部設備(存儲器、外設)之間的通信機製。 存儲器映射(Memory Map): 講解Cortex-M係列處理器的存儲器地址空間劃分,包括Flash、SRAM、外設寄存器等區域的分配原則。 3. Cortex-M係列處理器特有的功能模塊: 嵌套嚮量中斷控製器(NVIC - Nested Vectored Interrupt Controller): 中斷優先級與分組: 詳細闡述NVIC如何管理中斷源,包括中斷優先級、可嵌套性、中斷分組機製。 中斷嚮量錶(Interrupt Vector Table): 講解中斷嚮量錶的結構、作用以及中斷觸發時CPU如何查找並跳轉到相應中斷服務例程。 中斷使能與屏蔽: 介紹如何通過NVIC配置寄存器來使能、禁用和配置中斷的優先級。 係統控製塊(SCB - System Control Block): 運行模式與狀態: 講解處理器的運行模式(如Thread Mode, Handler Mode)和處理狀態(如Active, Running)。 復位與時鍾控製: 描述Cortex-M處理器的復位機製和內部/外部時鍾配置。 電源管理: 介紹Cortex-M係列提供的低功耗模式(如Sleep Mode, Deep Sleep Mode)及其喚醒機製。 總綫矩陣(Bus Matrix): (針對部分高級Cortex-M內核)講解總綫矩陣如何實現多個總綫主設備(如CPU, DMA)對多個總綫從設備(如SRAM, Peripherals)的高效並發訪問。 調試支持(Debug Support): JTAG/SWD接口: 詳細介紹JTAG和Serial Wire Debug (SWD) 接口,以及如何通過它們進行在綫仿真、斷點設置、變量查看等調試操作。 CoreSight調試架構: (針對部分高級Cortex-M內核)簡要介紹ARM CoreSight調試技術,包括ETM(嵌入式跟蹤宏單元)、ITM(指令跟蹤宏單元)等,實現更高級的調試和跟蹤功能。 第二部分:嵌入式係統設計與Cortex-M應用 1. Cortex-M處理器與外設交互: GPIO(通用輸入輸齣): 講解如何配置和使用GPIO引腳作為輸入、輸齣,以及其在驅動LED、讀取按鍵等場景的應用。 UART(通用異步收發器): 演示如何通過UART接口實現串口通信,用於調試信息輸齣或與外部設備交互。 SPI(串行外設接口)與I2C(集成電路總綫): 講解這些標準通信協議在連接外部傳感器、存儲器、顯示器等設備時的應用。 ADC(模數轉換器)與DAC(數模轉換器): 介紹如何讀取模擬信號(如溫度、電壓)或輸齣模擬信號。 定時器(Timers): 講解定時器的多種工作模式(如計數、PWM生成、捕捉),以及在延時、周期性任務、電機控製等方麵的應用。 DMA(直接存儲器訪問): 深入闡述DMA的工作原理,以及如何利用DMA實現CPU與外設之間的高效數據傳輸,減輕CPU負擔。 2. 實時操作係統(RTOS)與Cortex-M的結閤: RTOS核心概念迴顧(僅限概念,不展開RTOS具體內容): 簡述任務(Task)、調度器(Scheduler)、信號量(Semaphore)、互斥鎖(Mutex)、消息隊列(Message Queue)等RTOS基本概念,強調它們在構建復雜嵌入式應用中的重要性。 RTOS在Cortex-M上的移植與優化: 探討將RTOS移植到Cortex-M平颱的關鍵技術,包括中斷嚮量錶配置、上下文切換實現、時鍾節拍(SysTick)的利用等。 多任務並發與同步: 演示如何在Cortex-M平颱上利用RTOS實現多個任務的並發執行,並通過同步機製(如信號量、互斥鎖)協調任務間的訪問,避免競態條件。 中斷與RTOS的協同工作: 分析中斷服務例程(ISR)如何與RTOS交互,例如在ISR中發送信號量喚醒任務,以及ISR的執行長度對係統實時性的影響。 3. Cortex-M係列處理器的功耗管理策略: 低功耗模式的應用: 結閤具體的Cortex-M內核特性,詳細介紹如何利用Sleep Mode、Deep Sleep Mode等低功耗模式來節省能源。 外設時鍾門控(Clock Gating): 講解如何按需開啓和關閉外設的時鍾,進一步降低功耗。 動態電壓頻率調節(DVFS): (針對部分高級Cortex-M內核)介紹如何在不同工作負載下動態調整處理器電壓和頻率,以平衡性能和功耗。 功耗分析工具與方法: 提及常用的功耗分析方法和工具,幫助開發者進行功耗優化。 4. 實際項目中的Cortex-M應用案例分析: 物聯網節點設計: 以一個典型的物聯網傳感器節點為例,闡述如何利用Cortex-M處理器、低功耗通信模塊(如BLE、LoRa)和傳感器接口,構建低功耗、高性價比的設備。 工業控製單元: 分析如何利用Cortex-M強大的實時處理能力和豐富的通信接口,構建用於電機控製、數據采集和通信的工業控製單元。 消費電子産品: 探討Cortex-M係列在智能穿戴設備、傢用電器等消費電子産品中的應用,強調其成本效益和性能優勢。 第三部分:工具鏈與開發實踐 1. ARM開發工具鏈(Keil MDK, IAR Embedded Workbench, GCC for ARM): 集成開發環境(IDE)介紹: 詳細介紹主流的ARM開發IDE的使用,包括工程創建、代碼編輯、編譯鏈接、下載調試等流程。 編譯器(Compiler)與匯編器(Assembler): 講解C/C++編譯器如何將源代碼轉換為匯編代碼,以及匯編器如何將匯編代碼轉換為機器碼。 鏈接器(Linker): 闡述鏈接器如何將多個目標文件和庫文件組閤成可執行程序,並進行地址分配。 調試器(Debugger)與仿真器(Emulator): 深入講解調試器的功能,包括斷點、單步執行、變量監視、內存查看、寄存器查看等。 2. 調試技巧與性能優化: 常見嵌入式開發問題的排查: 總結和分析嵌入式開發過程中常見的調試難題,如內存溢齣、棧溢齣、死鎖、總綫錯誤等,並提供解決方案。 性能分析與代碼優化: 介紹如何利用性能分析工具(如IDE內置的性能分析器、Trace功能)來識彆性能瓶頸,並講解代碼優化技巧,如算法改進、指令選擇、緩存利用等。 嵌入式係統測試與驗證: 討論單元測試、集成測試、係統測試等在嵌入式係統開發中的重要性,以及如何設計有效的測試用例。 總結: 本書力求以清晰的邏輯、翔實的案例和深入的剖析,幫助讀者全麵掌握ARM Cortex-M係列處理器的精髓,並能夠將其成功應用於實際的嵌入式係統設計開發中。通過對本書的學習,讀者將能夠構建齣更加高效、穩定、可靠且具備優異性能的嵌入式産品。