北航《嵌入式系統(tǒng)》課件-第八章

上傳人:san****019 文檔編號:22689291 上傳時間:2021-05-30 格式:PPT 頁數(shù):107 大小:4.48MB
收藏 版權申訴 舉報 下載
北航《嵌入式系統(tǒng)》課件-第八章_第1頁
第1頁 / 共107頁
北航《嵌入式系統(tǒng)》課件-第八章_第2頁
第2頁 / 共107頁
北航《嵌入式系統(tǒng)》課件-第八章_第3頁
第3頁 / 共107頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《北航《嵌入式系統(tǒng)》課件-第八章》由會員分享,可在線閱讀,更多相關《北航《嵌入式系統(tǒng)》課件-第八章(107頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、1 嵌 入 式 系 統(tǒng)嵌 入 式 實 時 操 作 系 統(tǒng) C/OS- 分 析2006年 5月 2 主 要 內(nèi) 容n 嵌 入 式 操 作 系 統(tǒng)n C/OS- 簡 介n C/OS- 內(nèi) 核 結(jié) 構n C/OS- 任 務 管 理n C/OS- 時 間 管 理 n C/OS- 任 務 通 信 與 同 步 3 為 什 么 需 要 操 作 系 統(tǒng) 嵌 入 式 微 處 理 器 SDRAM ROM I/O A/D D/A 人 機 交 互 接 口 通 用 接 口 實 時 操 作 系 統(tǒng) (RTOS) 圖 形 用 戶 接 口 BSP/HAL 硬 件 抽 象 層 /板 極 支 持 包 任 務 管 理文 件 系 統(tǒng)

2、 應 用 程 序 嵌 入 式 計 算 機 系 統(tǒng) 硬 件 層 軟 件 層 中 間 層 功 能 層 4 硬 件 抽 象 層 的 引 入 n 嵌 入 式 實 時 系 統(tǒng) 自 底 向 上 包 含 三 個 部 分 n 硬 件 環(huán) 境n 嵌 入 式 實 時 操 作 系 統(tǒng) RTOSn 嵌 入 式 實 時 應 用 程 序n 由 于 嵌 入 式 系 統(tǒng) 應 用 的 硬 件 環(huán) 境 差 異 較 大 n 新 增 加 的 中 間 層 位 于 操 作 系 統(tǒng) 和 硬 件 之 間 ,包 含 了 系 統(tǒng) 中 與 硬 件 相 關 的 大 部 分 功 能 ,隱 蔽 了 底 層 硬 件 的 多 樣 性 5 嵌 入 式 系 統(tǒng)

3、 的 體 系 結(jié) 構 嵌 入 式 微 處 理 器 SDRAM ROM I/O A/D D/A 人 機 交 互 接 口 通 用 接 口 實 時 操 作 系 統(tǒng) (RTOS) 圖 形 用 戶 接 口 BSP/HAL 硬 件 抽 象 層 /板 極 支 持 包 任 務 管 理文 件 系 統(tǒng) 應 用 程 序 嵌 入 式 計 算 機 系 統(tǒng) 硬 件 層 軟 件 層 中 間 層 功 能 層 6 HAL簡 介n 硬 件 抽 象 層 ( HAL) 是 體 系 結(jié) 構 相 關 的 底 層 程 序n 處 理 系 統(tǒng) 啟 動 、 硬 件 初 始 化 以 及 中 斷 與 異 常n 硬 件 抽 象 層 對 內(nèi) 核 其 它

4、 部 分 提 供 統(tǒng) 一 的 調(diào) 用 接 口 n HAL可 以 提 供 BSP規(guī) 范 , 提 供 跨 平 臺 可 移 植 性 7 硬 件 抽 象 層 接 口 定 義 和 代 碼 設 計 特 點 n 硬 件 抽 象 層 具 有 與 硬 件 密 切 相 關 性n 硬 件 抽 象 層 具 有 與 操 作 系 統(tǒng) 無 關 性n 接 口 定 義 的 功 能 應 包 含 硬 件 或 系 統(tǒng) 所 需 硬 件 支持 的 所 有 功 能n 接 口 定 義 簡 單 明 了 , 太 多 接 口 函 數(shù) 會 增 加 軟 件模 擬 的 復 雜 性n 具 有 可 測 性 的 接 口 設 計 有 利 于 系 統(tǒng) 的 軟 硬

5、 件 測試 和 集 成 8 HAL設 計 目 標n 支 持 多 種 的 國 際 主 流 嵌 入 式 芯 片n 支 持 數(shù) 字 電 視 機 頂 盒 、 智 能 手 機 、 數(shù) 字 化 音 視 頻 、 數(shù) 字 儀 表 等 數(shù) 字 化 產(chǎn)品 中 常 見 外 設 的 驅(qū) 動 n 基 于 甚 高 端 通 訊 設 備 的 硬 件 抽 象 層 , 能 夠 支 持 多 CPU體 系 結(jié) 構 ( SMP) ,以 及 基 于 網(wǎng) 絡 元 素 NE的 甚 高 端 通 訊 設 備 n 基 于 智 能 手 機 的 硬 件 抽 象 層 , 能 夠 支 持 以 Intel PCA體 系 結(jié) 構 為 內(nèi) 核 的智 能 手 機

6、 、 以 Intel EIA體 系 結(jié) 構 為 內(nèi) 核 的 智 能 手 機 , 以 及 以 Motorola的 88000系 列 為 內(nèi) 核 的 PDAn 基 于 IC卡 的 匯 編 級 硬 件 抽 象 層 , 能 夠 支 持 數(shù) 字 電 視 條 件 接 收 CA的8/16/32位 CPU IC設 計 和 機 器 碼 級 匯 編 抽 象 層 9 通 用 操 作 系 統(tǒng) 和 嵌 入 式 ( 實 時 ) 操 作 系 統(tǒng)n 通 用 操 作 系 統(tǒng) : Windows/NT/XP、 Linux、 UNIX等 , 用于 PC機 、 服 務 器 ,n 嵌 入 式 ( 實 時 ) 操 作 系 統(tǒng) : 用 于

7、 嵌 入 式 設 備 的 操 作 系統(tǒng) , 具 有 通 用 操 作 系 統(tǒng) 的 基 本 特 點 , 又 具 有 系 統(tǒng) 實 時性 、 硬 件 的 相 關 依 賴 性 、 軟 件 固 態(tài) 化 以 及 應 用 的 專 用性 等 特 點 ;n 嵌 入 式 ( 實 時 ) 操 作 系 統(tǒng) 通 常 包 括 與 硬 件 相 關 的 底 層驅(qū) 動 軟 件 、 系 統(tǒng) 內(nèi) 核 、 設 備 驅(qū) 動 接 口 、 通 信 協(xié) 議 、 圖形 界 面 、 標 準 化 瀏 覽 器 Browser等 ; n 嵌 入 式 ( 實 時 ) 操 作 系 統(tǒng) 的 重 要 指 標 : 實 時 性 ( 中 斷響 應 時 間 、 任 務

8、 切 換 時 間 等 ) 、 尺 寸 ( 可 裁 剪 性 ) 、可 擴 展 性 ( 內(nèi) 核 、 中 間 件 ) 10 嵌 入 式 操 作 系 統(tǒng) 的 發(fā) 展操 作 系 統(tǒng) 內(nèi) 核應 用 程 序 驅(qū) 動 程 序 和 固 件 操 作 系 統(tǒng) 內(nèi) 核文 件 系 統(tǒng)驅(qū) 動 程 序 和 固 件API GUI應 用 程 序 操 作 系 統(tǒng) 內(nèi) 核文 件 系 統(tǒng)驅(qū) 動 程 序 和 固 件API GUI應 用 程 序通 信 協(xié) 議 庫 函 數(shù)80年 代 初 期 80年 代 中 期 -90年 代 中期 90年 代 末 期 -21世 紀 11 常 見 的 嵌 入 式 操 作 系 統(tǒng) 實 時 嵌 入 式 操 作 系

9、 統(tǒng) 的 種 類 繁 多 , 大 體上 可 分 為 兩 種 , 商 用 型 和 免 費 型 。n 商 用 型 的 實 操 作 系 統(tǒng) 功 能 穩(wěn) 定 、 可 靠 , 有完 善 的 技 術 支 持 和 售 后 服 務 , 但 往 往 價 格昂 貴 ,如 Vxworks、 QNX、 WinCE、 Palm OS等 。n 免 費 型 的 實 時 操 作 系 統(tǒng) 在 價 格 方 面 具 有 優(yōu)勢 , 目 前 主 要 有 Linux, C/OS是 一 種 源 碼開 放 的 商 業(yè) RTOS 12 學 習 嵌 入 式 操 作 系 統(tǒng) n 學 習 一 種 實 時 操 作 系 統(tǒng) RTOS, 如C/OS- ,

10、掌 握 實 時 系 統(tǒng) 的 概 念 和 設計 方 法n 嵌 入 式 系 統(tǒng) 以 應 用 為 中 心 , 要 選 擇“ 適 用 ” 的 操 作 系 統(tǒng)n 嵌 入 式 Linuxn 自 己 嘗 試 “ 寫 ” RTOS 13 RTOS在 嵌 入 式 系 統(tǒng) 中 的 位 置嵌 入 式 硬 件 平 臺BSPKERNELFS TCP/IP設 備 驅(qū) 動 設 備 I/O調(diào) 試 工 具 其 它 組 件應 用RTOSC/C+ 14 主 要 內(nèi) 容n 嵌 入 式 操 作 系 統(tǒng)n C/OS- 簡 介n C/OS- 內(nèi) 核 結(jié) 構n C/OS- 任 務 管 理n C/OS- 時 間 管 理 n C/OS- 任 務

11、 通 信 與 同 步 15 C/OS簡 介1、 C/OSMicro Controller O S,微 控 制 器 操 作 系 統(tǒng)2、 C/OS簡 介n 美 國 人 Jean Labrosse 1992年 完 成n 應 用 面 覆 蓋 了 諸 多 領 域 , 如 照 相 機 、 醫(yī) 療 器 械 、 音 響設 備 、 發(fā) 動 機 控 制 、 高 速 公 路 電 話 系 統(tǒng) 、 自 動 提 款 機等 n 1998年 C/OS-II, 目 前 的 版 本 C/OS -II V2.61,2.72n 2000年 , 得 到 美 國 航 空 管 理 局 ( FAA) 的 認 證 , 可 以 用于 飛 行 器

12、 中n 網(wǎng) 站 www.ucos-II.com( ) 16 u 公 開 源 代 碼u 可 移 植 性 ( Portable) 絕 大 部 分 C/OS-II的 源 碼 是 用 移 植 性 很 強 的 ANSI C寫 的 。 和 微處 理 器 硬 件 相 關 的 那 部 分 是 用 匯 編 語 言 寫 的 。 匯 編 語 言 寫 的 部分 已 經(jīng) 壓 到 最 低 限 度 , 使 得 C/OS-II便 于 移 植 到 其 他 微 處 理 器上 。 C/OS-II可 以 在 絕 大 多 數(shù) 8位 、 16位 、 32位 以 至 64位 微 處 理器 、 微 控 制 器 、 數(shù) 字 信 號 處 理 器

13、 ( DSP) 上 運 行 。u 可 固 化 ( ROMable) C/OS-II是 為 嵌 入 式 應 用 而 設 計 的 , 這 就 意 味 著 , 只 要 用 戶 有固 化 手 段 ( C編 譯 、 連 接 、 下 載 和 固 化 ) , C/OS-II可 以 嵌 入到 用 戶 的 產(chǎn) 品 中 成 為 產(chǎn) 品 的 一 部 分 。 u 可 裁 剪 ( Scalable) 可 以 只 使 用 C/OS-II中 應 用 程 序 需 要 的 那 些 系 統(tǒng) 服 務 。 也 就 是說 某 產(chǎn) 品 可 以 只 使 用 很 少 幾 個 C/OS-II調(diào) 用 , 而 另 一 個 產(chǎn) 品 則使 用 了 幾

14、 乎 所 有 C/OS-II的 功 能 , 這 樣 可 以 減 少 產(chǎn) 品 中 的 C/OS-II所 需 的 存 儲 器 空 間 ( RAM和 ROM) 。 這 種 可 剪 裁 性 是 靠條 件 編 譯 實 現(xiàn) 的 。C/OS的 性 能 特 點 ( 一 ) 17 u 占 先 式 ( Preemptive)u 多 任 務 C/OS-II可 以 管 理 64個 任 務 , 然 而 , 目 前 這 一 版 本 保 留 8個 給 系 統(tǒng) 。 應用 程 序 最 多 可 以 有 56個 任 務u 可 確 定 性 全 部 C/OS-II的 函 數(shù) 調(diào) 用 與 服 務 的 執(zhí) 行 時 間 具 有 可 確 定

15、性 。u 任 務 棧 每 個 任 務 有 自 己 單 獨 的 棧 , C/OS-II允 許 每 個 任 務 有 不 同 的 棧 空 間 , 以便 壓 低 應 用 程 序 對 RAM的 需 求 。 u 系 統(tǒng) 服 務 C/OS-II提 供 很 多 系 統(tǒng) 服 務 , 例 如 郵 箱 、 消 息 隊 列 、 信 號 量 、 塊 大 小 固定 的 內(nèi) 存 的 申 請 與 釋 放 、 時 間 相 關 函 數(shù) 等 。u 中 斷 管 理 中 斷 可 以 使 正 在 執(zhí) 行 的 任 務 暫 時 掛 起 , 如 果 優(yōu) 先 級 更 高 的 任 務 被 該 中 斷喚 醒 , 則 高 優(yōu) 先 級 的 任 務 在

16、中 斷 嵌 套 全 部 退 出 后 立 即 執(zhí) 行 , 中 斷 嵌 套 層數(shù) 可 達 255層 。u 穩(wěn) 定 性 與 可 靠 性C/OS的 性 能 特 點 ( 二 ) 18 C/OS-II圖 籍n 描 述 了 C/OS-II內(nèi) 部 的 工 作 原 理n 隨 書 的 CD中 包 含 了 源 代 碼n 工 業(yè) 界 最 清 晰 的 源 代 碼n 除 英 文 版 外 , 有 中 文 和 韓 文 版 Chinese KoreanEnglishISBN 1-57820-103-9美 國 CMP BOOK ISBN 7-81077-290-2北 京 航 空 航 天 大 學 出 版 社 ISBN 89-951

17、540-5-5 19 C/OS-II的 各 種 商 業(yè) 應 用n 全 世 界 有 數(shù) 百 種 產(chǎn) 品 在 應 用 :n Avionics( 航 空 電 子 設 備 )n Medicaln Cell phonesn Routers and switches n High-end audio equipmentn Washing machines and dryersn UPS (Uninterruptible Power Supplies)n Industrial controllersn GPS Navigation Systemsn Microwave Radiosn Instrumenta

18、tionn Point-of-sale terminals n 更 多 20 C/OS-II提 供 的 系 統(tǒng) 服 務n 信 號 量n 帶 互 斥 機 制 的 信 號 量n 減 少 優(yōu) 先 級 倒 置 的 問 題n 事 件 標 志n 消 息 信 箱n 消 息 隊 列n 內(nèi) 存 管 理 n 時 鐘 管 理n 任 務 管 理 21 C/GUI and C/FSn C/GUIn 嵌 入 式 的 用 戶 界 面n 用 ANSI C書 寫n 支 持 任 何 8, 16, 32-bits CPUn 彩 色 , 灰 度 等 級 或 黑 白 顯 示n 代 碼 尺 寸 小n C/FS n 嵌 入 式 的 文 件

19、 系 統(tǒng)n 用 ANSI C書 寫n 支 持 任 何 8, 16, 32-bits CPUn 支 持 SMC, MMC, SD, CF, IDE, Flash, RAM其 他 介 質(zhì) 22 主 要 內(nèi) 容n 嵌 入 式 操 作 系 統(tǒng)n C/OS- 簡 介n C/OS- 內(nèi) 核 結(jié) 構n C/OS- 任 務 管 理n C/OS- 時 間 管 理 n C/OS- 任 務 通 信 與 同 步 23 C/OS-II的 文 件 結(jié) 構 24 n 內(nèi) 核 結(jié) 構n 任 務 管 理n 時 間 管 理n 任 務 之 間 通 信 與 同 步n C/OS的 移 植C/OS-II分 析 25 n 當 處 理 臨

20、界 段 代 碼 時 , 須 關 中 斷 , 處 理 完 畢 后 , 再 開 中 斷n 關 中 斷 時 間 是 實 時 內(nèi) 核 最 重 要 的 指 標 之 一 。 它 影 響 用 戶 系統(tǒng) 對 實 時 事 件 的 相 應 特 性 。n 在 實 際 應 用 中 , 關 中 斷 的 時 間 很 大 程 度 上 取 決 于 微 處 理 器的 結(jié) 構 和 編 譯 器 生 成 的 代 碼 質(zhì) 量n 微 處 理 器 通 常 具 有 關 中 斷 /開 中 斷 操 作 。 C編 譯 器 須 具 有 某種 機 制 , 能 夠 在 c中 直 接 實 現(xiàn) 關 中 斷 /開 中 斷 操 作 n C源 代 碼 中 插 入

21、 匯 編 語 言 的 語 句 , 易 實 現(xiàn) 關 中 斷 /開 中 斷 操 作n 關 中 斷 /開 中 斷 操 作 作 為 語 言 的 擴 展 部 分 , 直 接 從 C語 言 中 可 以 關 中 斷 /開 中 斷C/OS-II開 關 中 斷 的 方 法 26 C/OS-II開 關 中 斷 的 方 法 ( 續(xù) 1)n C/OS-II定 義 了 兩 個 宏 調(diào) 用 來 開 關 中 斷 :n OS_ENTER_CRITICAL( ) ( 禁 止 中 斷 的 宏 ) n OS_EXIT_CRITICAL( ) (啟 用 中 斷 的 宏 )n 通 常 成 對 出 現(xiàn)n 上 述 宏 定 義 取 決 于

22、使 用 的 微 處 理 器 。 在 文 件OS_CPU.H有 相 應 的 宏 定 義n 在 C/OS-II中 , 每 種 微 處 理 器 都 有 自 己 的OS_CPU.H文 件 27 C/OS-II開 關 中 斷 的 方 法 ( 續(xù) 2) 28 C/OS-II開 關 中 斷 的 方 法 ( 續(xù) 3)可 以 選 擇具 體 使 用 哪 種 方 法 n 該 常 數(shù) 在 與 CPU類 型 有 關 的 移 植 文 件 OS_CPU.H中 定 義 29 n OS_CRITICAL_METHOD=1n 用 最 簡 單 的 方 式 來 實 現(xiàn) 2個 宏 調(diào) 用n 用 處 理 器 指 令 關 中 斷 , 完

23、成 OS_ENTER_CRITICAL()n 用 開 中 斷 指 令 完 成 OS_EXIT_CRITICAL()n 問 題 : n 如 果 調(diào) 用 C/OS-II功 能 函 數(shù) 時 , 中 斷 是 關 掉 的 , 則 從 C/OS-II函 數(shù) 返 回 時 ,中 斷 就 打 開 了n 若 調(diào) 用 C/OS-II功 能 函 數(shù) 之 前 已 將 中 斷 關 掉 , 那 么 用 戶 往 往 希 望 從 C/OS-II函 數(shù) 返 回 時 , 中 斷 仍 然 是 關 著 的 。 這 時 , 這 種 方 法 就 不 妥 當 。n 對 特 定 的 處 理 器 , 這 種 辦 法 是 唯 一 的 選 擇C/O

24、S-II中 采 用 了 3種 開 關 中 斷 的 方 法 30 C/OS-II中 采 用 了 3種 開 關 中 斷 的 方 法 ( 續(xù) 1)n OS_CRITICAL_METHOD=2n 在 堆 棧 中 保 存 中 斷 的 開 /關 狀 態(tài) , 然 后 再 關 中 斷n 實 現(xiàn) OS_ENTER_CRITICAL()時 , 先 在 堆 棧 中 保 存 中 斷 的 開 /關 狀 態(tài) , 然 后 再 關 中 斷 n 實 現(xiàn) OS_EXIT_CRITICAL()時 , 從 堆 棧 中 彈 出 原 來 中 斷 的 開/關 狀 態(tài)n 利 用 這 種 機 制 , 不 論 用 戶 在 調(diào) 用 C/OS-II

25、功 能 函 數(shù)之 前 中 斷 是 開 或 關 , 函 數(shù) 的 進 入 和 返 回 狀 態(tài) 都 得 到了 保 護 。 即 : 調(diào) 用 前 中 斷 的 開 /關 狀 態(tài) , 在 調(diào) 用 之后 保 持 不 變 31 C/OS-II中 采 用 了 3種 開 關 中 斷 的 方 法 ( 續(xù) 2)n OS_CRITICAL_METHOD=3n 把 當 前 處 理 器 的 狀 態(tài) 字 ( PSW) 保 存 在 C函 數(shù)的 局 部 變 量 中 ( 如 OS_CPU_SR)n 關 中 斷 時 保 存 , 開 中 斷 時 恢 復 32 C/OS-II中 采 用 了 3種 開 關 中 斷 的 方 法 ( 續(xù) 3)V

26、oid Some_ uCOS_II_Service(arguments) OS_CPU_SR cpu_sr; cpu_sr=get_processor_psw(); disable_interrupts(); /*臨 界 段 代 碼 */ set_processor_psw(cpu_sr); 33 任 務 ( task) 典 型 的 任 務 : 一 個 無 限 循 環(huán)void mytask(void *pdata) for (;) do something; waiting; do something; 34 Task Structure void YourTask (void *pdata)

27、 (1) for (;) (2) /* 用 戶 代 碼 */ 調(diào) 用uC/OS-II的 某 種 系 統(tǒng) 服 務: OSMboxPend(); OSQPend(); OSSemPend(); OSTaskDel(OS_PRIO_SELF); OSTaskSuspend(OS_PRIO_SELF); OSTimeDly(); OSTimeDlyHMSM(); /* 用 戶 代 碼 */ 35 任 務 完 成 后 的 自 我 刪 除n當 任 務 完 成 后 , 任 務 可 以 自 我 刪 除n任 務 代 碼 并 非 真 的 刪 除 了 , 系 統(tǒng) 只 是 簡 單 地 不 再 理 會這 個 任 務n這

28、 個 任 務 的 代 碼 也 不 會 再 運 行 了 , 即 使 任 務 調(diào) 用 了OSTaskDel( ) , 這 個 任 務 也 絕 不 會 返 回 void YourTask (void *pdata) /* 用 戶 代 碼 */ OSTaskDel(OS_PRIO_SELF); 36 C/OS II中 的 任 務n C/OS II 2.5版 本 支 持 64個 任 務 , 每 個 任 務 一 個 特 定 的 優(yōu) 先 級 。數(shù) 字 越 小 , 優(yōu) 先 級 越 高n 系 統(tǒng) 總 是 運 行 進 入 就 緒 態(tài) 優(yōu) 先 級 最 高 的 任 務n 任 務 優(yōu) 先 級 號 就 是 任 務 編 號

29、 ( ID) .優(yōu) 先 級 號 也 被 一 些 內(nèi) 核 功 能函 數(shù) 調(diào) 用 。 如 OsTaskChangePrio( )及 OsTaskDel( ). n 系 統(tǒng) 占 用 了 8個 任 務 , 保 留 優(yōu) 先 級 為 0、 1、 2、 3、OS_LOWEST_PRIO-3、 OS_LOWEST_PRIO-2、 OS_LOWEST_PRIO-1、 OS_LOWEST_PRIO-0n 即 : 建 議 不 使 用 上 述 最 高 4個 和 最 低 4個 優(yōu) 先 級 , 用 戶 任 務 仍 可 達56個 37 任 務 狀 態(tài)n 在 任 一 給 定 的 時 刻 , 任 務 的 狀 態(tài) 一 定 是以

30、下 五 種 狀 態(tài) 之 一 :n 睡 眠 態(tài) ( task dormant)n 就 緒 態(tài) ( task ready)n 運 行 態(tài) ( task running) n 等 待 狀 態(tài) ( task waiting)n 中 斷 服 務 態(tài) ( ISR running) 38 睡 眠 態(tài) ( task dormant)n 指 任 務 駐 留 在 程 序 空 間 ( ROM或 RAM) , 還 沒 有交 給 系 統(tǒng) 來 管 理 的 狀 態(tài)n 任 務 交 給 系 統(tǒng) 通 過 調(diào) 用 以 下 函 數(shù) 之 一 來 實 現(xiàn) : n OSTaskCreate( )n OSTaskCreateExt( )n

31、告 知 系 統(tǒng) : n 任 務 的 起 始 地 址n 任 務 建 立 時 , 用 戶 給 任 務 賦 予 的 優(yōu) 先 級n 任 務 要 使 用 的 棧 空 間 大 小 等 39 就 緒 態(tài) ( task ready)n 任 務 一 旦 創(chuàng) 建 就 進 入 就 緒 態(tài) , 準 備 運 行n 任 務 的 創(chuàng) 建 可 以 是 在 多 任 務 開 始 之 前 , 也 可 以動 態(tài) 地 由 一 個 運 行 著 的 任 務 創(chuàng) 建n 若 剛 創(chuàng) 建 任 務 的 優(yōu) 先 級 高 于 創(chuàng) 建 它 的 任 務 的 優(yōu)先 級 , 它 將 立 即 獲 得 cpu的 使 用 權n 任 務 可 通 過 OSTaskDe

32、l( ) 返 回 睡 眠 態(tài) ; 或 調(diào)用 該 函 數(shù) 讓 另 一 個 任 務 進 入 睡 眠 態(tài) 40 運 行 態(tài) ( task running)n 就 緒 的 任 務 只 有 當 所 有 優(yōu) 先 級 高 于 它 的 任 務 都 轉(zhuǎn) 為 等待 狀 態(tài) , 或 被 刪 除 后 , 才 能 進 入 運 行 態(tài)n 任 何 時 刻 只 有 一 個 任 務 處 于 運 行 態(tài)n 調(diào) 用 OSStart( ) 可 以 啟 動 多 任 務 。 該 函 數(shù) 只 能 在 啟 動時 調(diào) 用 一 次 n OSStart( ) 運 行 用 戶 初 始 化 代 碼 中 已 經(jīng) 建 立 的 、 進 入就 緒 態(tài) 的 優(yōu)

33、 先 級 最 高 的 任 務 41 等 待 狀 態(tài) ( task waiting)n 正 在 運 行 的 任 務 可 以 通 過 下 面 的 調(diào) 用 進 入 等 待 狀 態(tài) 。 延 遲 時 間 到 ,立 即 強 制 執(zhí) 行 任 務 切 換 , 讓 下 一 個 優(yōu) 先 級 最 高 、 并 進 入 就 緒 態(tài) 的 任務 執(zhí) 行 。n OSTimeDly( ) n OSTimeDlyHMSM( )n 等 待 時 間 過 去 后 , 系 統(tǒng) 服 務 ( 內(nèi) 部 ) 函 數(shù) OSTimeTick( ) 使 延 遲 了的 任 務 進 入 就 緒 態(tài)n 用 戶 無 需 在 應 用 程 序 代 碼 中 調(diào) 用

34、 這 個 函 數(shù) 42 等 待 狀 態(tài) ( 續(xù) )n 正 在 運 行 的 任 務 可 能 需 要 通 過 調(diào) 用 函 數(shù) 等 待 某一 事 件 發(fā) 生 。 如 果 該 事 件 并 未 發(fā) 生 , 任 務 就 進入 等 待 狀 態(tài)n OSFlagPend( ) ; OSMutexPend( )n OSSemPend( ) ; OSMboxPend( ) n 當 事 件 發(fā) 生 或 等 待 超 時 , 被 掛 起 的 任 務 就 進 入就 緒 態(tài) 43 中 斷 服 務 態(tài) ( ISR running)n 正 在 執(zhí) 行 的 任 務 是 可 以 被 中 斷 的 , 除 非 該任 務 將 中 斷 關

35、閉 , 或 系 統(tǒng) 將 中 斷 關 閉 。 被中 斷 的 任 務 便 進 入 了 中 斷 服 務 態(tài)n 響 應 中 斷 后 , 正 在 運 行 的 任 務 被 掛 起 , 中斷 服 務 子 程 序 控 制 了 CPU的 使 用 權 44 中 斷 服 務 態(tài) ( ISR running)n 中 斷 服 務 子 程 序 可 能 會 報 告 一 個 或 多 個 事 件 的 發(fā) 生 ,而 使 一 個 或 多 個 任 務 進 入 就 緒 態(tài)n 上 述 情 況 下 , 從 中 斷 服 務 子 程 序 返 回 之 前 , C/OS II 要 判 定 :n 被 中 斷 的 任 務 是 否 還 是 就 緒 態(tài)

36、任 務 中 優(yōu) 先 級 最 高 的 n 如 果 中 斷 服 務 子 程 序 使 另 一 個 優(yōu) 先 級 更 高 的 任 務 進 入 了就 緒 態(tài) , 則 新 進 入 就 緒 態(tài) 的 這 個 優(yōu) 先 級 更 高 的 任 務 將 得以 運 行 ; 否 則 , 原 來 被 中 斷 了 的 任 務 將 繼 續(xù) 運 行 。 45 任 務 狀 態(tài)n 當 所 有 的 任 務 都 在 等 待 時 間 發(fā) 生 或 等 待延 遲 時 間 結(jié) 束 時 , C/OS II 執(zhí) 行 被 稱為 空 閑 任 務 ( Idle Task) 的 內(nèi) 部 函 數(shù) ,即 : OSTaskIdle( ) 46 任 務 狀 態(tài) 任 務

37、 的 CPU使 用 權被 剝 奪 中 斷恢 復任 務 47 任 務 控 制 塊 ( TCB)n 任 務 控 制 塊 OS_TCB是 一 個 數(shù) 據(jù) 結(jié) 構 , 保 存 該 任 務 的 相 關參 數(shù) , 包 括 任 務 堆 棧 指 針 、 狀 態(tài) 、 優(yōu) 先 級 、 任 務 表 位 置 、任 務 鏈 表 指 針 等n 所 有 的 任 務 控 制 塊 分 為 兩 條 鏈 表 :n 空 閑 鏈 表 n 使 用 鏈 表n 當 任 務 的 CPU使 用 權 被 剝 奪 時 , 系 統(tǒng) 用 它 來 保 存 該 任 務 的狀 態(tài)n 全 部 駐 留 在 RAM中 48 C/OS-II任 務 控 制 塊 .ty

38、pedef struct os_tcb OS_STK *OSTCBStkPtr( 當 前 任 務 堆 棧 棧 頂 指 針 );#if OS_TASK_CREATE_EXT_EN0 void *OSTCBExtPtr; ( 指 向 用 戶 定 義 的 任 務 控 制 塊 擴 展 ) OS_STK *OSTCBStkBottom;( 指 向 任 務 堆 棧 棧 底 指 針 ) INT32U OSTCBStkSize;( 存 有 棧 中 可 容 納 的 指 針 元 數(shù) 目 ) INT16U OSTCBOpt; INT16U OSTCBId; ( 存 儲 任 務 的 識 別 碼ID, 備 用 )#en

39、dif struct os_tcb *OSTCBNext; ( 任 務 控 制 塊OS-TCB雙 向 鏈 表 的 后 鏈 接 ) struct os_tcb *OSTCBPrev; ( 任 務 控 制 塊OS-TCB雙 向 鏈 表 的 前 鏈 接 ) #if (OS_Q_EN ( 指 向 事 件 控 制 塊 的 指 針 )#endif 49 #if (OS_Q_EN ( 指 向 傳 遞 給 任 務 的 消 息 的 指 針 )#endif INT16U OSTCBDly; INT8U OSTCBStat;( 任 務 的 狀 態(tài) 字 ) INT8U OSTCBPrio; ( 任 務 的 優(yōu) 先 級

40、 ) INT8U OSTCBX; INT8U OSTCBY; INT8U OSTCBBitX; INT8U OSTCBBitY;#if OS_TASK_DEL_EN BOOLEAN OSTCBDelReq;#endif OS_TCB; 50 空 任 務 列 表n所 有 的 任 務 控 制 塊 都 被 放 置 在 任 務 控 制 塊 列 表 數(shù) 組 OSTCBTbl 中n系 統(tǒng) 初 始 化 時 , 所 有 任 務 控 制 塊 被 鏈 接 成 空 任 務 控 制 塊 的 單 向 鏈 表n任 務 建 立 后 , 空 任 務 控 制 塊 指 針 OSTCBFreeList指 向 的 任 務 控 制 塊

41、 就賦 給 了 該 任 務 , 然 后 OSTCBFreeList的 值 調(diào) 整 為 指 向 鏈 表 中 的 下 一 個 空任 務 控 制 塊n任 務 一 旦 被 刪 除 , 任 務 控 制 塊 就 還 給 空 任 務 鏈 表 51 任 務 級 的 任 務 調(diào) 度 -OSSchedn C/OS是 占 先 式 實 時 多 任 務 內(nèi) 核 , 優(yōu) 先 級 最 高 的 任 務 一旦 準 備 就 緒 , 則 擁 有 CPU的 所 有 權 即 開 始 投 入 運 行 。n C/OS中 不 支 持 時 間 片 輪 轉(zhuǎn) 法 , 每 個 任 務 的 優(yōu) 先 級 要 求不 一 樣 且 是 唯 一 的 。 因 此

42、 , 任 務 調(diào) 度 就 是 : 查 找 準 備就 緒 的 最 高 優(yōu) 先 級 的 任 務 并 進 行 上 下 文 切 換 。 n C/OS任 務 調(diào) 度 所 花 的 時 間 為 常 數(shù) , 與 應 用 程 序 中 建 立的 任 務 數(shù) 無 關 。 52 就 緒 表根 據(jù) 就 緒 表 確 定 最 高 優(yōu) 先 級兩 個 關 鍵 :n 優(yōu) 先 級 數(shù) 分 解 為 高 三 位 和 低 三 位 分 別 確 定n 高 優(yōu) 先 級 有 著 小 的 優(yōu) 先 級 號 53 根 據(jù) 優(yōu) 先 級 找 到 任 務 在 就 緒 任 務 表 中 的 位 置每 個 就 緒 的 任 務 都 放 入 就 緒 表 中 ( re

43、ady list) 中 , 就 緒 表 用 兩 個 變量 表 示 : OSRdyGrp、 OSRdyTblOSRdyGrp 12 07 6 5 4 3 00 XXXYY Y任 務 優(yōu) 先 級 2 017 6 5 4 3 10 8915 14 13 12 11 18 161723 22 21 20 19 26 242531 30 29 28 27 34 323339 38 37 36 35 42 404147 46 45 44 43 50 484955 54 53 52 51 58 565763 62 61 60 5901234567 OSRdyTbl7X Y優(yōu) 先 級 最 低 任 務( 空 閑

44、 任 務 ) 優(yōu) 先 級 最 高 任 務任 務 優(yōu) 先 級 號00 0010 000 10100 1 1221 54 采 用 查 表 法 確 定 高 優(yōu) 先 級 任 務 查 表 法 具 有 確 定 的 時 間 , 增 加 了 系 統(tǒng) 的 可 預 測 性 , C/OS II中 所 有的 系 統(tǒng) 調(diào) 用 時 間 都 是 確 定 的High3 =OSUnMapTblOSRdyGrp;Low3 =OSUnMapTblOSRdyTblHigh3;Prio =(High33)+Low3;OSRdyGrp 12 07 6 5 4 3 00 XXXYY Y任 務 優(yōu) 先 級 2 017 6 5 4 3 10

45、8915 14 13 12 11 18 161723 22 21 20 19 26 242531 30 29 28 27 34 323339 38 37 36 35 42 404147 46 45 44 43 50 484955 54 53 52 51 58 565763 62 61 60 5901234567 OSRdyTbl7X Y 55 任 務 調(diào) 度 器 ( task scheduler) 56 Task schedulervoid OSSched (void) INT8U y; OS_ENTER_CRITICAL(); ( 禁 止 中 斷 的 宏 ) if (OSLockNestin

46、g =0) ( 否 則 , 調(diào) 度 找 出 進入 就 緒 態(tài) 且 優(yōu) 先 級 最 高 的 任 務 , 就 緒 任 務 表 相 應 的 位 置 位 ) OSPrioHighRdy = (INT8U)(y 3) + OSUnMapTblOSRdyTbly) if (OSPrioHighRdy != OSPrioCur) ( 優(yōu) 先 級 最 高 的 任 務 是 否 是當 前 正 在 運 行 的 任 務 , 若 是 不 調(diào) 度 ) OSTCBHighRdy = OSTCBPrioTblOSPrioHighRdy;( 若 不 是 ,為 了 實 現(xiàn) 任 務 切 換 , 指 向 優(yōu) 先 級 最 高 的 任

47、務 控 制 塊 ) OSCtxSwCtr+; ( 統(tǒng) 計 計 數(shù) , 跟 蹤 任 務 切 換 次 數(shù) ) OS_TASK_SW(); ( 任 務 切 換 ) OS_EXIT_CRITICAL(); ( 開 放 中 斷 的 宏 ) 57 void OSSchedLock (void) if (OSRunning = TRUE) OS_ENTER_CRITICAL(); if(OSLockNesting 0) OSLockNesting-; if (OSLockNesting=0) OSSched(); else OS_EXIT_CRITICAL(); else OS_EXIT_CRITICAL(

48、); 59 任 務 切 換n 將 被 掛 起 的 任 務 寄 存 器 入 棧n 將 較 高 優(yōu) 先 級 任 務 的 寄 存 器 出 棧 60 任 務 級 的 任 務 切 換 OS_TASK_SW()n OS_TASK_SW()是 宏 調(diào) 用 , 含 有 微 處 理 器的 軟 中 斷 指 令 。 因 為 , 系 統(tǒng) 假 定 任 務 切換 是 靠 中 斷 級 代 碼 完 成 的 。n OS_TASK_SW()將 處 理 器 相 關 的 軟 件 中 斷機 制 封 裝 起 來 , 便 于 操 作 系 統(tǒng) 移 植 61 調(diào) 用 OS_TASK_SW()前 的 數(shù) 據(jù) 結(jié) 構低 優(yōu) 先 級 任 務 OS_

49、TCBOSTCBCur(1) 存 貯 器 低 地 址 存 貯 器 高 地 址堆 棧 方 向 SPR1R2R3R4PCPSW 存 貯 器 低 地 址存 貯 器 高 地 址 高 優(yōu) 先 級 任 務 ( 切 換后 運 行 的 任 務 ) OS_TCBOSTCBHighRdy(3)(2) CPU (4) (5) PSWPCR1R2R3R4即 將 被 掛 起 任 務 的 棧 頂 ( 即 將 被 掛 起 任 務 ) 指 向 即 將運 行 的 任務 的 棧 頂 62 保 存 當 前 CPU寄 存 器 的 值低 優(yōu) 先 級 任 務 OS_TCBOSTCBCur PSWPCR1R2R3R4存 貯 器 低 地 址

50、 存 貯 器 高 地 址堆 棧 方 向 SPR1R2R3R4PCPSW PSWPCR1R2R3R4存 貯 器 低 地 址存 貯 器 高 地 址 高 優(yōu) 先 級 任 務 OS_TCBOSTCBHighRdy(2) CPU (1)(3) (3) 63 重 新 裝 入 要 運 行 的 任 務低 優(yōu) 先 級 任 務 OS_TCBOSTCBCur PSWPCR1R2R3R4存 貯 器 低 地 址 存 貯 器 高 地 址堆 棧 方 向 SPR1R2R3R4PCPSW PSWPCR1R2R3R4存 貯 器 低 地 址存 貯 器 高 地 址 高 優(yōu) 先 級 任 務 OS_TCBOSTCBHighRdyOSTC

51、BCur(1) (2)CPU (4) (4)(1)(3) (3)(4) 復 制 64 任 務 切 換 OS_TASK_SW()的 代 碼Void OSCtxSw(void) 將 R1,R2,R3及 R4推 入 當 前 堆 棧 ; OSTCBCurOSTCBStkPtr = SP; OSTCBCur = OSTCBHighRdy; SP = OSTCBHighRdy OSTCBSTKPtr; 將 R4,R3,R2及 R1從 新 堆 棧 中 彈 出 ; 執(zhí) 行 中 斷 返 回 指 令 ; 65 C/OS-II中 的 中 斷l(xiāng)中 斷 : 由 于 某 種 事 件 的 發(fā) 生 , 而 導 致 程 序 流

52、 程 的 改 變 。 產(chǎn) 生 中 斷 的事 件 稱 為 中 斷 源 。lCPU響 應 中 斷 的 條 件 :n至 少 有 一 個 中 斷 源 向 CPU發(fā) 出 中 斷 信 號 ;n系 統(tǒng) 允 許 中 斷 , 且 對 此 中 斷 信 號 未 予 屏 蔽l中 斷 類 型 :n硬 件 中 斷 n外 部 中 斷n陷 井 中 斷 n現(xiàn) 場 控 制 量 的 中 斷 66 C/OS-II中 的 中 斷 服 務 子 程 序用 戶 中 斷 服 務 子 程 序 : 保 存 全 部 CPU寄 存 器 ; 調(diào) 用 OSIntEnter()或 OSIntNesting直 接 加 1; if(OSIntNesting=1

53、) OSTCBCur-OSTCBStkPtr=SP; 清 中 斷 源 ; 重 新 開 中 斷 ; 執(zhí) 行 用 戶 代 碼 做 中 斷 服 務 ; 調(diào) 用 OSIntExit(); 恢 復 所 有 CPU寄 存 器 ; 執(zhí) 行 中 斷 返 回 指 令 ; 67 中 斷 服 務 68 69 Search for highest priority similar to schedulerHalf context switch is done by interrupt response i.e. registers saved 70 中 斷 與 時 鐘 節(jié) 拍n 時 鐘 節(jié) 拍 ( 時 鐘 滴 答 )

54、 Tick, 是 一 種 定時 器 中 斷 , 可 通 過 編 程 方 式 實 現(xiàn)n 時 鐘 節(jié) 拍 是 一 種 特 殊 的 中 斷 , 操 作 系 統(tǒng)的 心 臟 。 首 先 32位 的 整 數(shù) OSTime加 一 。對 任 務 列 表 進 行 掃 描 , 判 斷 是 否 有 延 時任 務 應 該 處 于 準 備 就 緒 狀 態(tài) , 最 后 進 行上 下 文 切 換 。 71 時 鐘 節(jié) 拍 中 斷 服 務 子 程 序Void OSTickISR(void) 保 存 處 理 器 寄 存 器 的 值 ; 調(diào) 用 OSIntEnter(),或 是 將 OSIntNesting加 1 if(OSIn

55、tNesting=1) OSTCBCur-OSTCBStkPtr=SP; 調(diào) 用 OSTimeTick(); 發(fā) 出 中 斷 設 備 的 中 斷 ; 重 新 允 許 中 斷 ( 可 選 用 ) 調(diào) 用 OSIntExit(); 恢 復 處 理 器 寄 存 器 的 值 ; 執(zhí) 行 中 斷 返 回 指 令 ; 72 void OSTimeTick (void) OS_TCB *ptcb; OSTimeTickHook(); (1) ptcb = OSTCBList; (2) while (ptcb-OSTCBPrio != OS_IDLE_PRIO) (3) OS_ENTER_CRITICAL()

56、; if (ptcb-OSTCBDly != 0) if (-ptcb-OSTCBDly = 0) if (!(ptcb-OSTCBStat (5) OSRdyTblptcb-OSTCBY |= ptcb-OSTCBBitX; else ptcb-OSTCBDly = 1; ptcb = ptcb-OSTCBNext; OS_EXIT_CRITICAL(); OS_ENTER_CRITICAL(); (6) OSTime+; (7) OS_EXIT_CRITICAL(); 時 鐘 節(jié) 拍 函 數(shù) OSTimeTick() 73 n系 統(tǒng) 總 要 建 立 一 個 空 閑 任 務 , 該 任 務

57、在 沒 有 其 它 任 務 進 入 就 緒 狀態(tài) 時 投 入 運 行n空 閑 任 務 永 遠 設 為 最 低 優(yōu) 先 級n空 閑 任 務 不 可 能 被 應 用 軟 件 刪 除void OSTaskIdle (void *pdata) pdata = pdata; for (;) OS_ENTER_CRITICAL(); OSIdleCtr+; OS_EXIT_CRITICAL(); 空 閑 任 務 OSTaskIdle() 74 C/OS-II初 始 化l 首 先 調(diào) 用 系 統(tǒng) 初 始 化 函 數(shù) OSIint()。 OSIint()初 始 化 C/OS- 所 有 的變 量 和 數(shù) 據(jù) 結(jié)

58、 構 ( 見 OS_CORE.C) 。l OSInit()建 立 空 閑 任 務 idle task, 這 個 任 務 總 是 處 于 就 緒 態(tài) 的 。 空 閑任 務 OSTaskIdle( ) 的 優(yōu) 先 級 總 是 設 成 最 低 , 即OS_LOWEST_PRIO。l 如 果 統(tǒng) 計 任 務 允 許 OS_TASK_STAT_EN和 任 務 建 立 擴 展 允 許 都 設 為1, 則 OSInit()還 得 建 立 統(tǒng) 計 任 務 OSTaskStat()并 且 讓 其 進 入 就 緒 態(tài)。 OSTaskStat的 優(yōu) 先 級 總 是 設 為 OS_LOWEST_PRIO-1 l 空

59、閑 和 統(tǒng) 計 任 務 的 任 務 控 制 塊 ( OS_TCBs) 是 用 雙 向 鏈 表 鏈 接 在 一起 的 。 OSTCBList指 向 這 個 鏈 表 的 起 始 處 。 當 建 立 一 個 任 務 時 , 這個 任 務 總 是 被 放 在 這 個 鏈 表 的 起 始 處 。 75 調(diào) 用 OSInit()之 后 的 數(shù) 據(jù) 結(jié) 構 76 空 閑 緩 沖 區(qū) 77 C/OS- 的 啟 動void main (void) OSInit(); /* 初 始 化uC/OS-II */ . . 通 過 調(diào) 用OSTaskCreate()或OSTaskCreateExt()創(chuàng) 建 至 少 一

60、個 任 務; . . OSStart(); /* 開 始 多 任 務 調(diào) 度!OSStart()永 遠 不 會 返 回 */ 78 啟 動 多 任 務void OSStart (void) INT8U y; INT8U x; if (OSRunning = FALSE) y = OSUnMapTblOSRdyGrp; x = OSUnMapTblOSRdyTbly; OSPrioHighRdy = (INT8U)(y OS_LOWEST_PRIO) (1) return (OS_PRIO_INVALID); OS_ENTER_CRITICAL(); if (OSTCBPrioTblprio =

61、 (OS_TCB *)0) (2) OSTCBPrioTblprio = (OS_TCB *)1; (3) 84 OSTaskCtr+; OSTaskCreateHook(OSTCBPrioTblprio); OS_EXIT_CRITICAL(); if (OSRunning) OSSched(); else OS_ENTER_CRITICAL(); OSTCBPrioTblprio = (OS_TCB *)0; OS_EXIT_CRITICAL(); return (err); else OS_EXIT_CRITICAL(); return (OS_PRIO_EXIST); 85 堆 棧 檢

62、 驗 , OSTaskStkChk()刪 除 任 務 , OSTaskDel()請 求 刪 除 任 務 , OSTaskDelReq()改 變 任 務 的 優(yōu) 先 級 , OSTaskChangePrio()掛 起 任 務 , OSTaskSuspend()恢 復 任 務 , OSTaskResume() 其 它 相 關 函 數(shù) 86 主 要 內(nèi) 容n 嵌 入 式 操 作 系 統(tǒng)n C/OS- 簡 介n C/OS- 內(nèi) 核 結(jié) 構n C/OS- 任 務 管 理n C/OS- 時 間 管 理 n C/OS- 任 務 通 信 與 同 步 87 時 間 管 理Five services:n OSTi

63、meDLY()n OSTimeDLYHMSM()n OSTimeDlyResmue()n OStimeGet()n OSTimeSet() 88 OSTimeDly( )void OSTimeDly (INT16U ticks) if (ticks 0) OS_ENTER_CRITICAL(); if (OSRdyTblOSTCBCur-OSTCBY OSTCBCur-OSTCBDly = ticks; OS_EXIT_CRITICAL(); 89 OSTimeDlyHMSM( ) 90 主 要 內(nèi) 容n 嵌 入 式 操 作 系 統(tǒng)n C/OS- 簡 介n C/OS- 內(nèi) 核 結(jié) 構n C/O

64、S- 任 務 管 理n C/OS- 時 間 管 理 n C/OS- 任 務 通 信 與 同 步 91 任 務 間 通 信 手 段 C/OS中 , 采 用 多 種 方 法 保 護 任 務 之 間的 共 享 數(shù) 據(jù) 和 提 供 任 務 之 間 的 通 信 。u 提 供 OS_ENTER_CRITICAL和OS_EXIT_CRITICAL來 對 臨 界 資 源 進 行 保 護u OSSchedLock( )禁 止 調(diào) 度 保 護 任 務 級 的 共 享資 源 。 u 提 供 了 經(jīng) 典 操 作 系 統(tǒng) 任 務 間 通 信 方 法 : 信 號量 、 郵 箱 、 消 息 隊 列 , 事 件 標 志 。

65、92 事 件 控 制 塊 ECB 程 序 4.5 ECB的 結(jié) 構 如 下 - typedef struct void *OSEventPtr; /*指 向 消 息 或 消 息 隊 列 的 指 針 */ INT8U OSEventTblOS_EVENT_TBL_SIZE; /*等 待 任 務 列 表 */ INT16U OSEventCnt; /*計 數(shù) 器 ( 當 事 件 是 信 號 量 時 ) */ INT8U OSEventType; /*事 件 類 型 : 信 號 量 、 郵 箱 等 */ INT8U OSEventGrp; /*等 待 任 務 組 */ OS_EVENT; 與 TCB

66、類 似 的 結(jié) 構 , 使 用 兩 個 鏈 表 , 空 閑 鏈 表 與 使 用 鏈 表所 有 的 通 信 信 號 都 被 看 成 是 事 件 (event), 一 個 稱 為 事 件 控 制 塊 (ECB, Event Control Block)的 數(shù) 據(jù) 結(jié) 構 來 表 征 每 一 個 具 體 事 件 , ECB的 結(jié) 構 如 下 93 事 件 的 等 待 任 務 列 表 94 空 閑 事 件 控 制 塊 鏈 表 95 事 件 控 制 塊 TCB的 操 作對 事 件 控 制 塊 進 行 的 操 作 包 括 :n 初 始 化 一 個 事 件 控 制 塊OS_EventWaitListInit();n 使 一 個 任 務 進 入 就 緒 態(tài) OS_EventTaskRdy();n 使 一 個 任 務 進 入 等 待 某 事 件 的 狀 態(tài)OS_EventTaskWait(); n 因 為 等 待 超 時 而 使 一 個 任 務 進 入 就 緒 態(tài)OS_EventTO()。 96 信 號 量 semaphoren 信 號 量 在 多 任 務 系 統(tǒng) 中 用 于 : 控 制 共 享 資 源

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!