小型的嵌入式操作系統(tǒng)μC╱OS-Ⅱ的研究和實現(xiàn)畢業(yè)論文.doc_第1頁
小型的嵌入式操作系統(tǒng)μC╱OS-Ⅱ的研究和實現(xiàn)畢業(yè)論文.doc_第2頁
小型的嵌入式操作系統(tǒng)μC╱OS-Ⅱ的研究和實現(xiàn)畢業(yè)論文.doc_第3頁
小型的嵌入式操作系統(tǒng)μC╱OS-Ⅱ的研究和實現(xiàn)畢業(yè)論文.doc_第4頁
小型的嵌入式操作系統(tǒng)μC╱OS-Ⅱ的研究和實現(xiàn)畢業(yè)論文.doc_第5頁
免費預(yù)覽已結(jié)束,剩余42頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

目目 錄錄 任務(wù)書 摘要 Abstract 1緒論 1 1 1嵌入式系統(tǒng) 1 1 2嵌入式處理器 1 1 3嵌入式實時操作系統(tǒng) RTOS 2 1 4X RTOS 的介紹 3 2硬件體系結(jié)構(gòu)和軟件平臺 4 2 1硬件體系結(jié)構(gòu) 4 2 2軟件平臺 4 3實時系統(tǒng)的基本概念 5 3 1前后臺系統(tǒng) 5 3 2代碼的臨界段 6 3 3資源 6 3 4共享資源 6 3 5多任務(wù) 6 3 6任務(wù) 7 3 7任務(wù)切換 8 3 8內(nèi)核 8 3 9調(diào)度 9 3 10 不可剝奪型內(nèi)核 9 3 11 可剝奪型內(nèi)核 10 3 12 時間片輪番調(diào)度法 11 3 13 任務(wù)優(yōu)先級 12 3 14 靜態(tài)優(yōu)先級 12 3 15 動態(tài)優(yōu)先級 12 3 16 優(yōu)先級反轉(zhuǎn) 12 4X RTOS 詳細(xì)設(shè)計及編碼實現(xiàn) 15 4 1X RTOS 內(nèi)核結(jié)構(gòu)概述 15 4 1 1 臨界區(qū) 15 4 1 2 任務(wù)及其任務(wù)控制塊 15 4 1 3 就緒表 15 4 1 4 任務(wù)調(diào)度 18 4 1 5 空閑任務(wù) 19 4 2任務(wù)管理 20 4 2 1 建立任務(wù) 20 4 2 2 任務(wù)堆棧 22 4 2 3 改變?nèi)蝿?wù)的優(yōu)先級 23 4 2 4 掛起任務(wù) 25 4 2 5 恢復(fù)任務(wù) 26 4 2 6 任務(wù)休眠 27 4 3任務(wù)通信與同步對象和與對象有關(guān)的函數(shù) 28 4 3 1 初始化一個事件對象 30 4 3 2 使一個任務(wù)處于等待態(tài) 31 4 3 3 把一個任務(wù)放入就緒隊列 32 4 4信號量 33 4 4 1 創(chuàng)建信號量 34 4 4 2 等待一個信號量 35 4 4 3 釋放一個信號量 35 4 5互斥信號量 36 4 5 1 創(chuàng)建一個互斥信號量 36 4 5 2 等待一個互斥信號量 36 4 5 3 釋放一個互斥信號量 37 4 6消息隊列 37 4 6 1 創(chuàng)建一個消息隊列 39 4 6 2 從消息隊列中得到一個消息 39 4 6 3 往消息隊列中放入一個消息 40 4 7事件組 40 4 7 1 創(chuàng)建一個事件組 40 4 7 2 等待事件組的事件 40 4 7 3 設(shè)置事件組的事件 42 總結(jié) 43 致謝 44 參考文獻(xiàn) 45 煙臺大學(xué)畢業(yè)論文 設(shè)計 1 1 緒論緒論 1 1 嵌入式系統(tǒng)嵌入式系統(tǒng) 隨著社會的信息化和網(wǎng)絡(luò)化的日益加強(qiáng) 對計算機(jī)系統(tǒng)小型化 實時性 可靠性的 要求越來越高 嵌入式系統(tǒng)正是在這種背景下應(yīng)運而生 目前嵌入式系統(tǒng)的應(yīng)用日益廣 泛 大到波音飛機(jī)小到 MP3 移動電話都有嵌入式系統(tǒng)的存在 因此 21 世紀(jì)也被一些 人戲稱為 嵌入式系統(tǒng)的世紀(jì) 1 嵌入式系統(tǒng)定義 按照歷史性 本質(zhì)性 普遍性要求 嵌入式系統(tǒng)應(yīng)定義為 嵌入到對象體系中的專 用計算機(jī)系統(tǒng) 嵌入性 專用性 與 計算機(jī)系統(tǒng) 是嵌入式系統(tǒng)的三個基本要素 對象 系統(tǒng)則是指嵌入式系統(tǒng)所嵌入的宿主系統(tǒng) 2 嵌入式系統(tǒng)的特點 與通用 PC 相比較 專用性 這是與傳統(tǒng) PC 最大的區(qū)別 嵌入式系統(tǒng)是面向用戶 面向產(chǎn)品 面向應(yīng) 用的 它只有和具體的應(yīng)用相結(jié)合才能體現(xiàn)出自己的優(yōu)勢 高實時性 這是嵌入式系統(tǒng)的基本條件 嵌入性 嵌入式系統(tǒng)是與具體的環(huán)境相結(jié)合的 與被控對象緊密連接的 智能性 操作使用人性化 儀表化 一般很少有人直接參與 3 嵌入式系統(tǒng)組成 嵌入式系統(tǒng)主要有兩部分組成 嵌入式微處理器等相關(guān)硬件和嵌入式操作系統(tǒng)等嵌 入式軟件 1 2 嵌入式處理器嵌入式處理器 嵌入式處理器的體系架構(gòu)可分為三種形式 1 IP Intellectual Property 級架構(gòu) 也就是片上系統(tǒng) SoC System on Chip 形式 即是依設(shè)備功能的需求 將不同的 IP 單元 集成在一塊總片中 它包含有處理器功能 I O 接口功能及嵌入式軟件功能 2 芯片級架構(gòu) 依應(yīng)用系統(tǒng)要求 選用相應(yīng)的微處理器 如 MCU MPU DSP RISC 等芯片 并 將 RAM ROM EPROM EEPROM Fash 及 I O 接口芯片等組成相應(yīng)的嵌入式系統(tǒng) 相 應(yīng)的系統(tǒng)軟件 應(yīng)用軟件是以固件形式固化在 ROM 中 這是目前常用的嵌入式系統(tǒng)的架 構(gòu)方式 MCU MPU 屬于單片機(jī)系列 這是大家熟知的 DSP Digita Signal Processor 數(shù)字 信號處理器 它具有數(shù)字信號處理能力強(qiáng) 特別適合于聲音 圖像等多媒體信息系統(tǒng) 但是其常規(guī)處理能力不強(qiáng) 尋址范圍有限 I O 功能弱及開發(fā)平臺問題 較少單獨作為嵌 入式系統(tǒng)的處理器 而是與嵌入式處理器相結(jié)合 構(gòu)成更強(qiáng)大的功能 RISC Reduced Instruction Set Computer 型處理器具有結(jié)構(gòu)簡單 處理速度快和處 煙臺大學(xué)畢業(yè)論文 設(shè)計 2 理功能強(qiáng)等優(yōu)點 因此 新型的嵌入式系統(tǒng)大多數(shù)采用 RISC 處理器 主流架構(gòu)由 ARM 架構(gòu)處理器 Intel 的 8051 處理器 Microchip 的 PIC 處理器和 ZiOG 的 Z80 處理器 目 前典型的代表是 ARM 架構(gòu)處理器 世界上許多公司均基于 ARM 架構(gòu)開發(fā)出相應(yīng)的微處 理器芯片 如 ATME 公司 AT91 系列 MCU 采用 ARM7TDMI 內(nèi)核 Intel 公司 SA 1110 微處理器 MPU 采用 Strong ARM 核 Cirros 公司 EP 及 CL PS 系列掌上型計算機(jī)產(chǎn)品的 MPU 采用 ARM720T 核 inkup Systems 公司 L720 互聯(lián)網(wǎng)處理器 采用 ARM720T 核 Sharp 公司 H77790 掌上型產(chǎn)品中的 MPU 采用 ARM 7TD 內(nèi)核 其它如 Hyundai 公司 OKI 公司 Rohm 公司 Samsung 公司 Netsiicom 公司等 其 產(chǎn)品中均采用 ARM 內(nèi)核 另外一種新型的微架構(gòu)處理器是 Inte 公司的 Xscale 它是新一代為無線掌上型應(yīng)用 產(chǎn)品開發(fā)的嵌入式處理器 是 PCA 開發(fā)式平臺架構(gòu)中應(yīng)用于子系統(tǒng)與通信子系統(tǒng)中的嵌 入式處理器 3 X86 處理器嵌入到應(yīng)用系統(tǒng)中 這樣可充分利用 PC 機(jī)的通用性和便利性 采用嵌入式操作系統(tǒng) 并且將操作系統(tǒng)和 應(yīng)用軟件均固化在固態(tài)電子盤中 以縮小體積 增加可靠性 典型的產(chǎn)品有研祥公司的 嵌入式 CPU 卡及威盛公司的 C3 CPU 卡 1 3 嵌入式實時操作系統(tǒng) 嵌入式實時操作系統(tǒng) RTOS 嵌入式實時操作系統(tǒng) Embedded Real Time OS 簡稱 RTOS 是嵌入式系統(tǒng)應(yīng)用開 發(fā)的核心軟件 是嵌入式系統(tǒng)的靈魂 就像我們?nèi)粘K糜嬎銠C(jī)桌面系統(tǒng)中 微軟公司 的 Windows 操作系統(tǒng)一樣重要 市場上有很多著名的商業(yè)化嵌入式操作系統(tǒng) 如 VxWorks Pam OS Windows CE 嵌入式 Linux 和 C OS II 等上千種 RTOS 風(fēng)河 VxWorks 是非常出色的設(shè)備軟件操作系統(tǒng)平臺 適用于從手持電子設(shè)備到大型 網(wǎng)絡(luò)設(shè)施的各種設(shè)備 它以其良好的可靠性和卓越的實時性被廣泛的應(yīng)用在通信 軍事 航空 航天等高精尖技術(shù)及實時性要求很高的領(lǐng)域中 如衛(wèi)星通信 軍事演習(xí)等 它是 目前嵌入式系統(tǒng)領(lǐng)域中使用最廣泛 市場占有率最高的系統(tǒng) 它支持多種處理器 如 x86 i960 StrongARM ARM 等 Palm OS 是由 Palm 公司自行開發(fā) 在掌上計算機(jī)和 PDA 市場上占有很大的市場份額 開放的操作系統(tǒng)應(yīng)用程序接口 API 開發(fā)商可以根據(jù)需要自行開發(fā)所需的應(yīng)用程序 Windows CE 是微軟開發(fā)的一個嵌入式操作系統(tǒng) 專門用于手持設(shè)備和信息家電 它 的模塊化設(shè)計允許他對從掌上計算機(jī)到專用的工業(yè)控制的用戶電子設(shè)備進(jìn)行定制 它的 特點是發(fā)展掌上型 Windows 系統(tǒng) 有文件兼容性高 功能多樣化的特點 可以看作是 Windows 95 的簡化版 Linux 是一套免費使用和自由傳播的類 Unix 操作系統(tǒng) 是一個基于 POSIX 和 UNIX 的多用戶 多任務(wù) 支持多線程和多 CPU 的操作系統(tǒng) Linux 繼承了 Unix 以網(wǎng)絡(luò)為核心 煙臺大學(xué)畢業(yè)論文 設(shè)計 3 的設(shè)計思想 是一個性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng) 它以高效性和靈活性著稱 但是 由于 Linux 是全球各地的成千上萬的程序員設(shè)計和實現(xiàn)的 因此開發(fā)散亂也是它的一大弱 點 C OS II 是源代碼公開的實時嵌入式操作系統(tǒng) 主要有以下特點 1 可移植性 Portable 強(qiáng) C OS II 絕大部分源碼使用 ANSI C 編寫的 而與微處 理器硬件相關(guān)的那部分使用會編寫的 2 可固化 可裁減 可確定性 3 C OS II 完全是占先式 Preemptive 的實時內(nèi)核 4 實時多任務(wù) 不支持時間片輪轉(zhuǎn)調(diào)度法 5 任務(wù)棧 C OS II 每個任務(wù)都有自己的任務(wù)棧 6 系統(tǒng)服務(wù) C OS II 提供了很多的系統(tǒng)服務(wù) 例如信號量 互斥信號量 消息郵 箱 消息隊列等 1 4 X RTOS 的介紹的介紹 現(xiàn)在 市場上有那么多的嵌入式操作系統(tǒng) 從簡單到復(fù)雜 應(yīng)有盡有 比如 C OS II 就是一個簡單易學(xué)的 RTOS 而且他又是開放源代碼的 免費用于個人學(xué)習(xí)的 但是 他 也還有一個最大的弱點 就是不支持時間片輪轉(zhuǎn)調(diào)度算法 這樣帶來的另一個弱點就是 任務(wù)的數(shù)量是有限 通過對 C OS II 的研究 最終實現(xiàn)一個小型的嵌入式操作系統(tǒng) 取 名為 X RTOS X RTOS 的主要特點 1 可移植性強(qiáng) Portable X RTOS 絕大部分使用 ANSI C 編寫 而而與微處理器 硬件相關(guān)的那部分利用了 C OS II 的函數(shù)層 所以 X RTOS 和 C OS II 一樣有很強(qiáng)的 可移植性的 可固化 可裁減 可確定性 X RTOS 是占先式 Preemptive 和時間片輪轉(zhuǎn)共存的實時內(nèi)核 實時多任務(wù) 支持時間片輪轉(zhuǎn)調(diào)度法 任務(wù)數(shù)可以不確定 5 任務(wù)棧 X RTOS 每個任務(wù)都有自己的任務(wù)棧 6 系統(tǒng)服務(wù) X RTOS 提供了很多的系統(tǒng)服務(wù) 例如信號量 互斥信號量 消息隊 列等 特別加入一個定時器的功能 煙臺大學(xué)畢業(yè)論文 設(shè)計 4 2 硬件體系結(jié)構(gòu)和軟件平臺硬件體系結(jié)構(gòu)和軟件平臺 2 1 硬件體系結(jié)構(gòu)硬件體系結(jié)構(gòu) 硬件平臺采用的是 EasyARM2138 開發(fā)板 他是廣州周立功公司設(shè)計的 EasyARM 系 列開發(fā)套件之一 下面簡單介紹一下 EasyARM2138 EasyARM2138 采用了 PHILIPS 公司基于 ARM7TDMI S 核 單電源供電 QFP64 封 裝的 LPC2138 LPC2138 具有 32kB 的片內(nèi)靜態(tài) RAM 和 512kB 的片內(nèi) Fash 程序存儲 器 支持 JTAG 仿真調(diào)試 ISP 編程等功能 EasyARM2138 開發(fā)板上還提供了一些鍵盤 ED 蜂鳴器等常用功能部件 還具有 RS232 接口電路 I2C 存儲器電路 另外 靈活的跳線組合 開發(fā)板內(nèi)使用的所有 I O 均 可斷開連接 還有用戶 I O 接口 極大地方便了用戶進(jìn)行 32 位 ARM 嵌入式系統(tǒng)的開 發(fā)實驗 開發(fā)的小型嵌入式操作系統(tǒng) X RTOS 代碼量不是很大 對于擁有 32kB 的片內(nèi) 靜態(tài) RAM 和 512kB 的片內(nèi) Flash 程序存儲器的 PC2138 來說是綽綽有余 再加上開發(fā)板 還支持 JTAG 仿真測試 ISP 編程 這樣使得開發(fā)效率大幅度提高 另外開發(fā)板上還提供 了一些鍵盤 LED 蜂鳴器等常用功能部件 還具有 RS232 接口電路 I2C 存儲器電路 這樣更有利于通過小的試驗才測試一下程序的正確性 通過這兩點所以選擇了 EasyARM2138 開發(fā)板 2 2 軟件平臺軟件平臺 在軟件平臺的選擇上 現(xiàn)在有很多的嵌入式開發(fā)軟件平臺 比如 ARM 公司的 ADS 系列的軟件 還有 IAR 公司的 IAR Embedded Workbench for ARM Evauation 等軟件 由 于比較熟悉 ADS 最后選擇了 ADS 軟件平臺 選用的是 ADS 1 2 ARM ADS 全稱為 ARM Developer Suite 是 ARM 公司推出的一款 ARM 集成開發(fā) 工具 除了可以安裝在 Windows NT4 Windows 2000 操作系統(tǒng)下 還支持 Windows XP 操作系統(tǒng) ADS 由命令行開發(fā)工具 ARM 時實庫 GUI 開發(fā)環(huán)境 Code Warrior 和 AXD 實用程序和支持軟件組成 有了這些部件 用戶就可以為 ARM 系統(tǒng)的 RISC 處理 器編寫和調(diào)試自己的開發(fā)應(yīng)用程序了 加上自身集成的 CodeWarrior for ARM 是一套完整 的開發(fā)工具 充分發(fā)揮了 ARM RISC 的優(yōu)勢 使產(chǎn)品開發(fā)人員能夠很好的應(yīng)用尖端的片 上系統(tǒng)技術(shù) 該工具是專為基于 ARM RISC 的處理器而設(shè)計的 它可加速并簡化嵌入式 開發(fā)過程的每一個環(huán)節(jié) 使得開發(fā)人員只需要一個集成軟件開發(fā)環(huán)境就能研制出 ARM 產(chǎn) 品 在整個開發(fā)周期中 開發(fā)人員無需離開 CodeWarrior 開發(fā)環(huán)境 因此節(jié)省了在操作工 具上花的時間 使的開發(fā)人員有更多的精力投入到代碼編寫上來 最后 還要必須說到 他的一個工具 就是他自身帶的調(diào)試器 AXD 程序員可以通過這個軟件使用 debug agent 可以對包含有調(diào)試信息的 正在運行的可以執(zhí)行代碼進(jìn)行比如變量的查看 斷點的控制 等調(diào)試操作 這樣的話 使的找程序的錯誤變得更加的簡單 快速 煙臺大學(xué)畢業(yè)論文 設(shè)計 5 3 3 實時系統(tǒng)的基本概念實時系統(tǒng)的基本概念 實時系統(tǒng)的特點是 如果邏輯和時序出現(xiàn)偏差將會引起嚴(yán)重后果的系統(tǒng) 有兩種類 型的實時系統(tǒng) 軟實時系統(tǒng)和硬實時系統(tǒng) 在軟實時系統(tǒng)中系統(tǒng)的宗旨是使各個任務(wù)運 行得越快越好 并不要求限定某一任務(wù)必須在多長時間內(nèi)完成 在硬實時系統(tǒng)中 各任務(wù)不僅要執(zhí)行無誤而且要做到準(zhǔn)時 大多數(shù)實時系統(tǒng)是二者的 結(jié)合 實時系統(tǒng)的應(yīng)用涵蓋廣泛的領(lǐng)域 而多數(shù)實時系統(tǒng)又是嵌入式的 這意味著計算 機(jī)建在系統(tǒng)內(nèi)部 用戶看不到有個計算機(jī)在系統(tǒng)里面 以下是一些嵌入式系統(tǒng)的例子 3 1 前后臺系統(tǒng)前后臺系統(tǒng) 不復(fù)雜的小系統(tǒng)一般設(shè)計成如圖 3 1 所示的樣子 這種系統(tǒng)可稱為前后臺系統(tǒng)或超循 環(huán)系統(tǒng) Super loops 應(yīng)用程序是一個無限的循環(huán) 循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)的操 作 這部分可以看成后臺行為 background 中斷服務(wù)程序處理異步事件 這部分可以看 成前臺行為 foreground 后臺也可以叫做任務(wù)級 前臺也叫中斷級 時間相關(guān)性很強(qiáng)的 關(guān)鍵操作 Critical operation 一定是靠中斷服務(wù)來保證的 因為中斷服務(wù)提供的信息一直要 等到后臺程序走到該處理這個信息這一步時才能得到處理 這種系統(tǒng)在處理信息的及時 性上 比實際可以做到的要差 這個指標(biāo)稱作任務(wù)級響應(yīng)時間 最壞情況下的任務(wù)級響 應(yīng)時間取決于整個循環(huán)的執(zhí)行時間 因為循環(huán)的執(zhí)行時間不是常數(shù) 程序經(jīng)過某一特定 部分的準(zhǔn)確時間也是不能確定的 進(jìn)而 如果程序修改了 循環(huán)的時序也會受到影響 過程控制 食品加工 化工廠 汽車業(yè) 發(fā)動機(jī)控制 防抱死系統(tǒng) ABS 辦公自動化 傳真機(jī) 復(fù)印機(jī) 計算機(jī)外設(shè) 打印機(jī) 計算機(jī)終端 掃描儀 調(diào)制解調(diào)器 通訊類 Switch Hurb 路由器 機(jī)器人 航空航天 飛機(jī)管理系統(tǒng) 武器系統(tǒng) 噴氣發(fā)動機(jī)控制 民用消費品 微波爐 洗碗機(jī) 洗依機(jī) 穩(wěn)溫調(diào)節(jié)器 煙臺大學(xué)畢業(yè)論文 設(shè)計 6 圖 3 1 前后臺系統(tǒng) 很多基于微處理器的產(chǎn)品采用前后臺系統(tǒng)設(shè)計 例如微波爐 電話機(jī) 玩具等 在另外 一些基于微處理器的應(yīng)用中 從省電的角度出發(fā) 平時微處理器處在停機(jī)狀態(tài) hat 所有 的事都靠中斷服務(wù)來完成 3 2 代碼的臨界段代碼的臨界段 代碼的臨界段也稱為臨界區(qū) 指處理時不可分割的代碼 一旦這部分代碼開始執(zhí)行 則不允許任何中斷打入 為確保臨界段代碼的執(zhí)行 在進(jìn)入臨界段之前要關(guān)中斷 而臨 界段代碼執(zhí)行完以后要立即開中斷 3 3 資源資源 任何為任務(wù)所占用的實體都可稱為資源 資源可以是輸入輸出設(shè)備 例如打印機(jī) 鍵盤 顯示器 資源也可以是一個變量 一個結(jié)構(gòu)或一個數(shù)組等 3 4 共享資源共享資源 可以被一個以上任務(wù)使用的資源叫做共享資源 為了防止數(shù)據(jù)被破壞 每個任務(wù)在與 共享資源打交道時 必須獨占該資源 這叫做互斥 3 5 多任務(wù)多任務(wù) 多任務(wù)運行的實現(xiàn)實際上是靠 CPU 中央處理單元 在許多任務(wù)之間轉(zhuǎn)換 調(diào)度 CPU 只有一個 輪番服務(wù)于一系列任務(wù)中的某一個 多任務(wù)運行很像前后臺系統(tǒng) 但后臺任 務(wù)有多個 多任務(wù)運行使 CPU 的利用率得到最大的發(fā)揮 并使應(yīng)用程序模塊化 在實時 應(yīng)用中 多任務(wù)化的最大特點是 開發(fā)人員可以將很復(fù)雜的應(yīng)用程序?qū)哟位?使用多任 務(wù) 應(yīng)用程序?qū)⒏菀自O(shè)計與維護(hù) 煙臺大學(xué)畢業(yè)論文 設(shè)計 7 3 6 任務(wù)任務(wù) 一個任務(wù) 也稱作一個線程 是一個簡單的程序 該程序可以認(rèn)為 CPU 完全只屬該 程序自己 實時應(yīng)用程序的設(shè)計過程 包括如何把問題分割成多個任務(wù) 每個任務(wù)都是 整個應(yīng)用的某一部分 每個任務(wù)被賦予一定的優(yōu)先級 有它自己的一套 CPU 寄存器和自 己的棧空間 如圖 3 2 所示 圖 3 2 多任務(wù)環(huán)境 典型地 每個任務(wù)都是一個無限的循環(huán) 每個任務(wù)都處在以下 5 種狀態(tài)之一的狀態(tài) 下 這 5 種狀態(tài)是休眠態(tài) 就緒態(tài) 運行態(tài) 掛起態(tài) 等待某一事件發(fā)生 和被中斷態(tài) 見 圖 3 3 煙臺大學(xué)畢業(yè)論文 設(shè)計 8 圖 3 3 任務(wù)的狀態(tài) 休眠態(tài)相當(dāng)于該任務(wù)駐留在內(nèi)存中 但并不被多任務(wù)內(nèi)核所調(diào)度 就緒意味著該任務(wù)已 經(jīng)準(zhǔn)備好 可以運行了 但由于該任務(wù)的優(yōu)先級比正在運行的任務(wù)的優(yōu)先級低 還暫時 不能運行 運行態(tài)的任務(wù)是指該任務(wù)掌握了 CPU 的控制權(quán) 正在運行中 掛起狀態(tài)也可 以叫做等待事件態(tài) WAILTING 指該任務(wù)在等待 等待某一事件的發(fā)生 例如等待某外 設(shè)的 I O 操作 等待某共享資源由暫不能使用變成能使用狀態(tài) 等待定時脈沖的到來或等 待超時信號的到來以結(jié)束目前的等待 等等 最后 發(fā)生中斷時 CPU 提供相應(yīng)的中斷 服務(wù) 原來正在運行的任務(wù)暫不能運行 就進(jìn)入了被中斷狀態(tài) 3 7 任務(wù)切換任務(wù)切換 Context Switch 也稱為在上下文切換 實際含義是任務(wù)切換 或 CPU 寄存器內(nèi)容切 換 當(dāng)多任務(wù)內(nèi)核決定運行另外的任務(wù)時 它保存正在運行任務(wù)的當(dāng)前狀態(tài) Context 即 CPU 寄存器中的全部內(nèi)容 這些內(nèi)容保存在任務(wù)的當(dāng)前狀況保存區(qū) Task s Context Storage area 也就是任務(wù)自己的棧區(qū)之中 見圖 3 2 入棧工作完成以后 就是把下一 個將要運行的任務(wù)的當(dāng)前狀況從該任務(wù)的棧中重新裝入 CPU 的寄存器 并開始下一個任 務(wù)的運行 這個過程叫做任務(wù)切換 任務(wù)切換過程增加了應(yīng)用程序的額外負(fù)荷 CPU 的 內(nèi)部寄存器越多 額外負(fù)荷就越重 做任務(wù)切換所需要的時間取決于 CPU 有多少寄存器 要入棧 實時內(nèi)核的性能不應(yīng)該以每秒鐘能做多少次任務(wù)切換來評價 3 8 內(nèi)核內(nèi)核 多任務(wù)系統(tǒng)中 內(nèi)核負(fù)責(zé)管理各個任務(wù) 或者說為每個任務(wù)分配 CPU 時間 并且負(fù) 責(zé)任務(wù)之間的通訊 內(nèi)核提供的基本服務(wù)是任務(wù)切換 之所以使用實時內(nèi)核可以大大簡 煙臺大學(xué)畢業(yè)論文 設(shè)計 9 化應(yīng)用系統(tǒng)的設(shè)計 是因為實時內(nèi)核允許將應(yīng)用分成若干個任務(wù) 由實時內(nèi)核來管理它 們 內(nèi)核本身也增加了應(yīng)用程序的額外負(fù)荷 代碼空間增加 ROM 的用量 內(nèi)核本身的數(shù) 據(jù)結(jié)構(gòu)增加了 RAM 的用量 但更主要的是 每個任務(wù)要有自己的??臻g 這一塊吃起內(nèi) 存來是相當(dāng)厲害的 內(nèi)核本身對 CPU 的占用時間一般在 2 到 5 個百分點之間 單片機(jī)一般不能運行實時內(nèi)核 因為單片機(jī)的 RAM 很有限 通過提供必不可缺少 的 系統(tǒng)服務(wù) 諸如信號量管理 郵箱 消息隊列 延時等 實時內(nèi)核使得 CPU 的利用更為 有效 一旦讀者用實時內(nèi)核做過系統(tǒng)設(shè)計 將決不再想返回到前后臺系統(tǒng) 3 9 調(diào)度調(diào)度 調(diào)度 Scheduler 是內(nèi)核的主要職責(zé)之一 就是要決定該輪到哪個任務(wù)運行了 多 數(shù)實時內(nèi)核是基于優(yōu)先級調(diào)度法的 每個任務(wù)根據(jù)其重要程度的不同被賦予一定的優(yōu)先 級 基于優(yōu)先級的調(diào)度法指 CPU 總是讓處在就緒態(tài)的優(yōu)先級最高的任務(wù)先運行 然而 究竟何時讓高優(yōu)先級任務(wù)掌握 CPU 的使用權(quán) 有兩種不同的情況 這要看用的是什么類 型的內(nèi)核 是不可剝奪型的還是可剝奪型內(nèi)核 3 10 不可剝奪型內(nèi)核不可剝奪型內(nèi)核 不可剝奪型內(nèi)核要求每個任務(wù)自我放棄 CPU 的所有權(quán) 不可剝奪型調(diào)度法也稱作合 作型多任務(wù) 各個任務(wù)彼此合作共享一個 CPU 異步事件還是由中斷服務(wù)來處理 中斷 服務(wù)可以使一個高優(yōu)先級的任務(wù)由掛起狀態(tài)變?yōu)榫途w狀態(tài) 但中斷服務(wù)以后控制權(quán)還是 回到原來被中斷了的那個任務(wù) 直到該任務(wù)主動放棄 CPU 的使用權(quán)時 那個高優(yōu)先級的 任務(wù)才能獲得 CPU 的使用權(quán) 不可剝奪型內(nèi)核的一個優(yōu)點是響應(yīng)中斷快 在討論中斷響應(yīng)時會進(jìn)一步涉及這個問 題 在任務(wù)級 不可剝奪型內(nèi)核允許使用不可重入函數(shù) 函數(shù)的可重入性以后會討論 每個任務(wù)都可以調(diào)用非可重入性函數(shù) 而不必?fù)?dān)心其它任務(wù)可能正在使用該函數(shù) 從而 造成數(shù)據(jù)的破壞 因為每個任務(wù)要運行到完成時才釋放 CPU 的控制權(quán) 當(dāng)然該不可重入 型函數(shù)本身不得有放棄 CPU 控制權(quán)的企圖 使用不可剝奪型內(nèi)核時 任務(wù)級響應(yīng)時間比前后臺系統(tǒng)快得多 此時的任務(wù)級響應(yīng) 時間取決于最長的任務(wù)執(zhí)行時間 不可剝奪型內(nèi)核的另一個優(yōu)點是 幾乎不需要使用信號量保護(hù)共享數(shù)據(jù) 運行著的 任務(wù)占有 CPU 而不必?fù)?dān)心被別的任務(wù)搶占 但這也不是絕對的 在某種情況下 信號量 還是用得著的 處理共享 I O 設(shè)備時仍需要使用互斥型信號量 例如 在打印機(jī)的使用 上 仍需要滿足互斥條件 圖 3 4 示意不可剝奪型內(nèi)核的運行情況 任務(wù)在運行過程之 中 圖 3 4 1 中斷來了 如果此時中斷是開著的 CPU 由中斷向量 3 4 2 進(jìn)入中斷 服務(wù)子程序 中斷服務(wù)子程序做事件處理 圖 3 4 3 使一個有更高級的任務(wù)進(jìn)入就緒 態(tài) 中斷服務(wù)完成以后 中斷返回指令 圖 3 4 4 使 CPU 回到原來被中斷的任務(wù) 接 著執(zhí)行該任務(wù)的代碼 圖 3 4 5 直到該任務(wù)完成 調(diào)用一個內(nèi)核服務(wù)函數(shù)以釋放 CPU 控 煙臺大學(xué)畢業(yè)論文 設(shè)計 10 制權(quán) 由內(nèi)核將控制權(quán)交給那個優(yōu)先級更高的 并已進(jìn)入就緒態(tài)的任務(wù) 圖 3 4 6 這 個優(yōu)先級更高的任務(wù)才開始處理中斷服務(wù)程序標(biāo)識的事件 圖 3 4 7 圖 3 4 不可剝奪型內(nèi)核 不可剝奪型內(nèi)核的最大缺陷在于其響應(yīng)時間 高優(yōu)先級的任務(wù)已經(jīng)進(jìn)入就緒態(tài) 但 還不能運行 要等 也許要等很長時間 直到當(dāng)前運行著的任務(wù)釋放 CPU 與前后系統(tǒng) 一樣 不可剝奪型內(nèi)核的任務(wù)級響應(yīng)時間是不確定的 不知道什么時候最高優(yōu)先級的任務(wù)才能 拿到 CPU 的控制權(quán) 完全取決于應(yīng)用程序什么時候釋放 CPU 總之 不可剝奪型內(nèi)核允許每個任務(wù)運行 直到該任務(wù)自愿放棄 CPU 的控制權(quán) 中斷 可以打入運行著的任務(wù) 中斷服務(wù)完成以后將 CPU 控制權(quán)還給被中斷了的任務(wù) 任務(wù)級 響應(yīng)時間要大大好于前后系統(tǒng) 但仍是不可知的 商業(yè)軟件幾乎沒有不可剝奪型內(nèi)核 3 11 可剝奪型內(nèi)核可剝奪型內(nèi)核 當(dāng)系統(tǒng)響應(yīng)時間很重要時 要使用可剝奪型內(nèi)核 因此 C OS 以及絕大多數(shù)商 業(yè)上銷售的實時內(nèi)核都是可剝奪型內(nèi)核 最高優(yōu)先級的任務(wù)一旦就緒 總能得到 CPU 的 控制權(quán) 當(dāng)一個運行著的任務(wù)使一個比它優(yōu)先級高的任務(wù)進(jìn)入了就緒態(tài) 當(dāng)前任務(wù)的 CPU 使用權(quán)就被剝奪了 或者說被掛起了 那個高優(yōu)先級的任務(wù)立刻得到了 CPU 的控制權(quán) 如果是中斷服務(wù)子程序使一個高優(yōu)先級的任務(wù)進(jìn)入就緒態(tài) 中斷完成時 中斷了的任務(wù) 被掛起 優(yōu)先級高的那個任務(wù)開始運行 如圖 3 5 所示 煙臺大學(xué)畢業(yè)論文 設(shè)計 11 圖 3 5 可剝奪型內(nèi)核 使用可剝奪型內(nèi)核 最高優(yōu)先級的任務(wù)什么時候可以執(zhí)行 可以得到 CPU 的控制權(quán)是 可知的 使用可剝奪型內(nèi)核使得任務(wù)級響應(yīng)時間得以最優(yōu)化 使用可剝奪型內(nèi)核時 應(yīng)用程序不應(yīng)直接使用不可重入型函數(shù) 調(diào)用不可重入型函數(shù) 時 要滿足互斥條件 這一點可以用互斥型信號量來實現(xiàn) 如果調(diào)用不可重入型函數(shù)時 低優(yōu)先級的任務(wù) CPU 的使用權(quán)被高優(yōu)先級任務(wù)剝奪 不可重入型函數(shù)中的數(shù)據(jù)有可能被 破壞 綜上所述 可剝奪型內(nèi)核總是讓就緒態(tài)的高優(yōu)先級的任務(wù)先運行 中斷服務(wù)程序 可以搶占 CPU 到中斷服務(wù)完成時 內(nèi)核讓此時優(yōu)先級最高的任務(wù)運行 不一定是那個 被中斷了的任務(wù) 任務(wù)級系統(tǒng)響應(yīng)時間得到了最優(yōu)化 且是可知的 C OS 屬于可 剝奪型內(nèi)核 3 12 時間片輪番調(diào)度法時間片輪番調(diào)度法 當(dāng)兩個或兩個以上任務(wù)有同樣優(yōu)先級 內(nèi)核允許一個任務(wù)運行事先確定的一段時間 叫做時間額度 然后切換給另一個任務(wù) 也叫做時間片調(diào)度 內(nèi)核在滿足以下條件時 把 CPU 控制權(quán)交給下一個任務(wù)就緒態(tài)的任務(wù) 當(dāng)前任務(wù)已無事可做 當(dāng)前任務(wù)在時間片 還沒結(jié)束時已經(jīng)完成了 目前 C OS 不支持時間片輪番調(diào)度法 應(yīng)用程序中各個任 務(wù)的優(yōu)先級必須互不相同 但是 在我的畢業(yè)設(shè)計中 X RTOS 中 支持時間片輪轉(zhuǎn) 煙臺大學(xué)畢業(yè)論文 設(shè)計 12 3 13 任務(wù)優(yōu)先級任務(wù)優(yōu)先級 每個任務(wù)都有其優(yōu)先級 任務(wù)越重要 賦予的優(yōu)先級應(yīng)越高 3 14 靜態(tài)優(yōu)先級靜態(tài)優(yōu)先級 應(yīng)用程序執(zhí)行過程中諸任務(wù)優(yōu)先級不變 則稱之為靜態(tài)優(yōu)先級 在靜態(tài)優(yōu)先級系統(tǒng)中 諸任務(wù)以及它們的時間約束在程序編譯時是已知的 3 15 動態(tài)優(yōu)先級動態(tài)優(yōu)先級 應(yīng)用程序執(zhí)行過程中 任務(wù)的優(yōu)先級是可變的 則稱之為動態(tài)優(yōu)先級 實時內(nèi)核應(yīng)當(dāng) 避免出現(xiàn)優(yōu)先級反轉(zhuǎn)問題 3 16 優(yōu)先級反轉(zhuǎn)優(yōu)先級反轉(zhuǎn) 使用實時內(nèi)核 優(yōu)先級反轉(zhuǎn)問題是實時系統(tǒng)中出現(xiàn)得最多的問題 圖 3 6 解釋優(yōu)先級反 轉(zhuǎn)是如何出現(xiàn)的 如圖 3 6 任務(wù) 1 優(yōu)先級高于任務(wù) 2 任務(wù) 2 優(yōu)先級高于任務(wù) 3 任務(wù) 1 和任務(wù) 2 處于掛起狀態(tài) 等待某一事件的發(fā)生 任務(wù) 3 正在運行如 圖 3 6 1 此時 任務(wù) 3 要使用其共享資源 使用共享資源之前 首先必須得到該資源的信號量 Semaphore 任務(wù) 3 得到了該信號量 并開始使用該共享資源 圖 3 6 2 由于任務(wù) 1 優(yōu)先級高 它 等待的事件到來之后剝奪了任務(wù) 3 的 CPU 使用權(quán) 圖 3 6 3 任務(wù) 1 開始運行 圖 3 6 4 運行過程中任務(wù) 1 也要使用那個任務(wù) 3 正在使用著的資源 由于該資源的信號量還被任 務(wù) 3 占用著 任務(wù) 1 只能進(jìn)入掛起狀態(tài) 等待任務(wù) 3 釋放該信號量 圖 3 6 5 任務(wù) 3 得 以繼續(xù)運行 圖 3 6 6 由于任務(wù) 2 的優(yōu)先級高于任務(wù) 3 當(dāng)任務(wù) 2 等待的事件發(fā)生后 任務(wù) 2 剝奪了任務(wù) 3 的 CPU 的使用權(quán) 圖 3 6 7 并開始運行 處理它該處理的事件 圖 3 6 8 直到處理完之后將 CPU 控制權(quán)還給任 3 圖 3 6 9 任務(wù) 3 接著運行 圖 3 6 10 直到釋放那個共享資源的信號量 圖 2 7 11 直到此時 由于實時內(nèi)核知道有個高優(yōu)先級 的任務(wù)在等待這個信號量 內(nèi)核做任務(wù)切換 使任務(wù) 1 得到該信號量并接著運行 圖 3 6 12 在這種情況下 任務(wù) 1 優(yōu)先級實際上降到了任務(wù) 3 的優(yōu)先級水平 因為任務(wù) 1 要等 直 等到任務(wù) 3 釋放占有的那個共享資源 由于任務(wù) 2 剝奪任務(wù) 3 的 CPU 使用權(quán) 使任務(wù) 1 的 狀況更加惡化 任務(wù) 2 使任務(wù) 1 增加了額外的延遲時間 任務(wù) 1 和任務(wù) 2 的優(yōu)先級發(fā)生了 反轉(zhuǎn) 糾正的方法可以是 在任務(wù) 3 使用共享資源時 提升任務(wù) 3 的優(yōu)先級 任務(wù)完成時予以 恢復(fù) 任務(wù) 3 的優(yōu)先級必須升至最高 高于允許使用該資源的任何任務(wù) 多任務(wù)內(nèi)核應(yīng)允 許動態(tài)改變?nèi)蝿?wù)的優(yōu)先級以避免發(fā)生優(yōu)先級反轉(zhuǎn)現(xiàn)象 然而改變?nèi)蝿?wù)的優(yōu)先級是很花時 間的 如果任務(wù) 3 并沒有先被任務(wù) 1 剝奪 CPU 使用權(quán) 又被任務(wù) 2 搶走了 CPU 使用權(quán) 煙臺大學(xué)畢業(yè)論文 設(shè)計 13 花很多時間在共享資源使用前提升任務(wù) 3 的優(yōu)先級 然后又在資源使用后花時間恢復(fù)任務(wù) 3 的優(yōu)先級 則無形中浪費了很多 CPU 時間 真正需要的是 為防止發(fā)生優(yōu)先級反轉(zhuǎn) 內(nèi)核能 自動變換任務(wù)的優(yōu)先級 這叫做優(yōu)先級繼承 Priority inheritance 但 C OS 不支持優(yōu)先級 繼承 我得到畢業(yè)設(shè)計就支持優(yōu)先級繼承 在我的畢業(yè)設(shè)計中就會支持優(yōu)先級繼承 圖 3 6 優(yōu)先級反轉(zhuǎn)問題 圖 3 7 解釋如果內(nèi)核支持優(yōu)先級繼承的話 在上述例子中會是怎樣一個過程 任務(wù) 3 在運行 圖 3 7 1 任務(wù) 3 申請信號量以獲得共享資源使用權(quán) 圖 3 7 2 任務(wù) 3 得到并開始 使用共享資源 圖 3 7 3 后來 CPU 使用權(quán)被任務(wù) 1 剝奪 圖 3 7 4 任務(wù) 1 開始運行 圖 3 7 5 任務(wù) 1 申請共享資源信號量 圖 3 7 6 此時 內(nèi)核知道該信號量被任務(wù) 3 占用了 而 任務(wù) 3 的優(yōu)先級比任務(wù) 1 低 內(nèi)核于是將任務(wù) 3 的優(yōu)先級升至與任務(wù) 1 一樣 然而回到任務(wù) 3 繼續(xù)運行 使用該共享資源 圖 3 7 7 直到任務(wù) 3 釋放共享資源信號量 圖 3 7 8 這時 內(nèi)核恢復(fù)任務(wù) 3 本來的優(yōu)先級并把信號量交給任務(wù) 1 任務(wù) 1 得以順利運行 圖 3 7 9 任務(wù) 1 完成以后 圖 2 8 10 那些任務(wù)優(yōu)先級在任務(wù) 1 與任務(wù) 3 之間的任務(wù)例如任務(wù) 2 才能 得到 CPU 使用權(quán) 并開始運行 圖 3 7 11 注意 任務(wù) 2 在從 圖 3 7 3 到 3 7 10 的任何 一刻都有可能進(jìn)入就緒態(tài) 并不影響任務(wù) 1 任務(wù) 3 的完成過程 在某種程度上 任務(wù) 2 和 任務(wù) 3 之間也還是有不可避免的優(yōu)先級反轉(zhuǎn) 煙臺大學(xué)畢業(yè)論文 設(shè)計 14 圖 3 7 內(nèi)核支持優(yōu)先級繼承 煙臺大學(xué)畢業(yè)論文 設(shè)計 15 4 X RTOS 詳細(xì)設(shè)計及編碼實現(xiàn)詳細(xì)設(shè)計及編碼實現(xiàn) 4 1 X RTOS 內(nèi)核結(jié)構(gòu)概述內(nèi)核結(jié)構(gòu)概述 4 1 1 臨界區(qū)臨界區(qū) 和其它內(nèi)核一樣 X RTOS 為了處理臨界段代碼需要關(guān)中斷 處理完畢后再開中斷 這使得 X RTOS 能夠避免同時有其它任務(wù)或中斷服務(wù)進(jìn)入臨界段代碼 關(guān)中斷的時間是 實時內(nèi)核開發(fā)商應(yīng)提供的最重要的指標(biāo)之一 因為這個指標(biāo)影響用戶系統(tǒng)對實時事件的 響應(yīng)性 X RTOS 努力使關(guān)中斷時間降至最短 但就使用 X RTOS 而言 關(guān)中斷的時間很 大程度上取決于微處理器的架構(gòu)以及編譯器所生成的代碼質(zhì)量 微處理器一般都有關(guān)中斷 開中斷指令 用戶使用的 C 語言編譯器必須有某種機(jī)制能 夠在 C 中直接實現(xiàn)關(guān)中斷 開中斷地操作 某些 C 編譯器允許在用戶的 C 源代碼中插入?yún)R 編語言的語句 這使得插入微處理器指令來關(guān)中斷 開中斷很容易實現(xiàn) 而有的編譯器把 從 C 語言中關(guān)中斷 開中斷放在語言的擴(kuò)展部分 X RTOS 定義兩個宏 macros 來關(guān)中斷和 開中斷 以便避開不同 C 編譯器廠商選擇不同的方法來處理關(guān)中斷和開中斷 X RTOS 中的這兩個宏調(diào)用分別是 OS ENTER CRITICA 和 OS EXIT CRITICA 因為這兩個 宏的定義取決于所用的微處理器 4 1 2 任務(wù)及其任務(wù)控制塊任務(wù)及其任務(wù)控制塊 一個任務(wù)通常是一個無限的循環(huán) 一個任務(wù)看起來像其它 C 的函數(shù)一樣 有函數(shù)返 回類型 有形式參數(shù)變量 但是任務(wù)是絕不會返回的 故返回參數(shù)必須定義成 void X RTOS 可以管理的任務(wù)數(shù)取決于 cpu 資源的大小 任務(wù)之間的優(yōu)先級可以相等 也 可以不相等 一旦任務(wù)建立了 任務(wù)控制塊 rtos tcb 將被賦值 圖 4 1 任務(wù)控制塊是 一個數(shù)據(jù)結(jié)構(gòu) 當(dāng)任務(wù)的 CPU 使用權(quán)被剝奪時 X RTOS 用它來保存該任務(wù)的狀態(tài) 當(dāng)任 務(wù)重新得到 CPU 使用權(quán)時 任務(wù)控制塊能確保任務(wù)從當(dāng)時被中斷的那一點絲毫不差地繼 續(xù)執(zhí)行 rtos tcb 全部駐留在 RAM 中 程序清單程序清單4 1 rtos tcb typedef struct rtos tcb rtos type stk rtos tcb stk ptr 堆棧指針 rtos ist t rtos tcb head ist head ist INT8U rtos tcb state 任務(wù)的狀態(tài) rtos type prio rtos tcb prio now 任務(wù)的優(yōu)先級 rtos type prio rtos tcb prio init 任務(wù)初始化的優(yōu)先級 if rtos cyce schedue en 0 INT32U rtos tcb init tick task s tick 煙臺大學(xué)畢業(yè)論文 設(shè)計 16 INT32U rtos tcb remaining tick task s remaining tick endif if rtos using event 0 INT32U rtos tcb event set INT8U rtos tcb event info endif INT8U rtos tcb id the task s id number struct rtos timer rtos tcb timer thread timer rtos tcb rtos tcb stk ptr rtos tcb stk ptr 是指向當(dāng)前任務(wù)棧頂?shù)闹羔?X RTOS 允許每個任務(wù)有自己的棧 尤為重要的是 每個任務(wù)的棧的容量可以是任意的 有些商業(yè)內(nèi)核要求所有任務(wù)棧的容 量都一樣 除非用戶寫一個復(fù)雜的接口函數(shù)來改變之 這種限制浪費了 RAM 當(dāng)各任務(wù)需 要的??臻g不同時 也得按任務(wù)中預(yù)期棧容量需求最多的來分配??臻g rtos tcb head ist rtos tcb head ist 是一個特殊的結(jié)構(gòu)體 他的作用是起到組成雙鏈表的作用 是 從 Linux 中引入的一個方法 rtos tcb state rtos tcb state 用于存儲任務(wù)的狀態(tài) rtos tcb prio now rtos tcb prio now 代表任務(wù)當(dāng)前的優(yōu)先級 rtos tcb prio init rtos tcb prio init 代表任務(wù)初始化時的優(yōu)先級 一般的情況是兩個優(yōu)先級是一樣 的 rtos tcb init tick rtos tcb init tick 代表任務(wù)擁有的時間片 rtos tcb remaining tick rtos tcb remaining tick 代表任務(wù)還剩下的時間片 rtos tcb event set rtos tcb event set 是留給事件組用的 設(shè)置任務(wù)要等待的事件組的情況 rtos tcb id rtos tcb id 是任務(wù)的標(biāo)號 是區(qū)分一個任務(wù)和別的任務(wù)的重要的標(biāo)志 rtos tcb timer rtos tcb timer 是任務(wù)的定時器 用于任務(wù)定時和事件等待 4 1 3 就緒表就緒表 每個任務(wù)被賦予一個的優(yōu)先級等級 從 0 級到最低優(yōu)先級 OS OWEST PR1O 包括 0 和 OS OWEST PR1O 在內(nèi) 當(dāng) X RTOS 初始化的時候 最低優(yōu)先級 OS OWEST PR1O 總是被賦給空閑任務(wù) rtos task ide 每個任務(wù)的就緒態(tài)標(biāo)志都放入就緒表中的 就緒表中有兩個變量 rtos rdy grp 和 rtos map tbl 在 rtos rdy grp 中 任務(wù)按優(yōu)先級分組 8 個任務(wù)為一組 rtos rdy grp 中的每一位表示 8 組任務(wù)中每一組中是否有進(jìn)入就緒態(tài)的任務(wù) 任務(wù)進(jìn)入就緒態(tài)時 就 緒表 rtos map tbl 中的相應(yīng)元素的相應(yīng)位也置位 就緒表 rtos rdy tbl 數(shù)組的大小取決 于 OS OWEST PR1O 當(dāng)用戶的應(yīng)用程序中任務(wù)數(shù)目比較少時 減少 OS OWEST PR1O 的值可以降低 X RTOS 對 RAM 數(shù)據(jù)空間 的需求量 為確定下次該哪個優(yōu)先級的任務(wù)運行了 內(nèi)核調(diào)度器總是將 OS OWEST PR1O 在就 煙臺大學(xué)畢業(yè)論文 設(shè)計 17 緒表中相應(yīng)字節(jié)的相應(yīng)位置 1 rtos rdy grp 和 rtos map tbl 之間的關(guān)系見圖 4 1 是按 以下規(guī)則給出的 當(dāng) rtos map tbl 0 中的任何一位是 1 時 rtos rdy grp 的第 0 位置 1 當(dāng) rtos map tbl 1 中的任何一位是 1 時 rtos rdy grp 的第 1 位置 1 當(dāng) rtos map tbl 2 中的任何一位是 1 時 rtos rdy grp 的第 2 位置 1 當(dāng) rtos map tbl 3 中的任何一位是 1 時 rtos rdy grp 的第 3 位置 1 當(dāng) rtos map tbl 4 中的任何一位是 1 時 rtos rdy grp 的第 4 位置 1 當(dāng) rtos map tbl 5 中的任何一位是 1 時 rtos rdy grp 的第 5 位置 1 當(dāng) rtos map tbl 6 中的任何一位是 1 時 rtos rdy grp 的第 6 位置 1 當(dāng) rtos map tbl 7 中的任何一位是 1 時 rtos rdy grp 的第 7 位置 1 圖 4 1 就緒表 煙臺大學(xué)畢業(yè)論文 設(shè)計 18 程序清單 4 2 中的代碼用于將任務(wù)放入就緒表 tcbtemp rtos tcb prio now 是某 個任務(wù)的優(yōu)先級 程序清單程序清單4 2 把任務(wù)進(jìn)入就緒表把任務(wù)進(jìn)入就緒表 把任務(wù)進(jìn)入就緒表 rtos rdy grp rtos map tbl tcbtemp rtos tcb prio now 3 rtos rdy tbl tcbtemp rtos tcb prio now 3 rtos map tbl tcbtemp rtos tcb prio now 如果一個任務(wù)被刪除了 則用程序清單 4 3 中的代碼做求反處理 程序清單程序清單4 3 把任務(wù)進(jìn)入就緒表把任務(wù)進(jìn)入就緒表 if rtos ist isempty 以上代碼將就緒任務(wù)表數(shù)組 rtos rdy tbl 中相應(yīng)元素的相應(yīng)位清零 對于 rtos rdy grp 只有當(dāng)被刪除任務(wù)所在任務(wù)組中全組任務(wù)一個都沒有進(jìn)入就緒態(tài)時 才將 相應(yīng)位清零 也就是說 rtos rdy tbl task rtos tcb prio now 3 所有的位都是零時 rtos rdy grp 的相應(yīng)位才清零 4 1 4 任務(wù)調(diào)度任務(wù)調(diào)度 X RTOS 總是運行進(jìn)入就緒態(tài)任務(wù)中優(yōu)先級最高的那一個 確定哪個任務(wù)優(yōu)先級最高 下面該哪個任務(wù)運行了的工作是由調(diào)度器 Scheduer 完成的 任務(wù)級的調(diào)度是由函數(shù) rtos sched 完成的 中斷級的調(diào)度是由另一個函數(shù) rtos int exit 完成的 程序清單程序清單4 4 調(diào)度函數(shù)調(diào)度函數(shù) void rtos sched void INT8U y rtos tcb to task OS ENTER CRITICA 1 if rtos int nesting 0 2 rtos prio high rdy INT8U y rtos tcb state rtos prio cur rtos prio high rdy to task rtos tcb state to task rtos tcb state rtos stat run rtos tcb high rdy to task OS TASK SW OS EXIT CRITICA X RTOS 任務(wù)調(diào)度所花的時間是常數(shù) 與應(yīng)用程序中建立的任務(wù)數(shù)無關(guān) 如程序清 中 4 4 1 條件語句的條件不滿足 任務(wù)調(diào)度函數(shù) rtos sched 將退出 不做任務(wù)調(diào)度 這 個條件是 如果在中斷服務(wù)子程序中調(diào)用 rtos sched 此時中斷嵌套層數(shù) rtos int nestin 0 或者由于用戶至少調(diào)用了一次給任務(wù)調(diào)度上鎖函數(shù) rtos ock nest 使 rtos ock nesting 0 如果不是在中斷服務(wù)子程序調(diào)用 rtos sched 并且任務(wù)調(diào)度是允許 的 即沒有上鎖 則任務(wù)調(diào)度函數(shù)將找出那個進(jìn)入就緒態(tài)且優(yōu)先級最高的任務(wù) 4 4 2 進(jìn)入就緒態(tài)的任務(wù)在就緒任務(wù)表中有相應(yīng)的位置位 一旦找到那個優(yōu)先級最高的任務(wù) rtos sched 檢驗這個優(yōu)先級最高的任務(wù)是不是當(dāng)前正在運行的任務(wù) 以此來避免不必要的 任務(wù)調(diào)度 4 4 3 為實現(xiàn)任務(wù)切換 rtos tcb high rdy 必須指向優(yōu)先級最高的那個任務(wù)控制塊 rtos tcb 任務(wù)切換很簡單 由以下兩步完成 將被掛起任務(wù)的微處理器寄存器推入堆棧 然后將 較高優(yōu)先級的任務(wù)的寄存器值從棧中恢復(fù)到寄存器中 在 X RTOS 中 就緒任務(wù)的棧結(jié) 構(gòu)總是看起來跟剛剛發(fā)生過中斷一樣 所有微處理器的寄存器都保存在棧中 換句話說 X RTOS 運行就緒態(tài)的任務(wù)所要做的一切 只是恢復(fù)所有的 CPU 寄存器并運行中斷返回 指令 為了做任務(wù)切換 運行 OS TASK SW 人為模仿了一次中斷 4 1 5 空閑任務(wù)空閑任務(wù) 程序清單程序清單4 5 空閑任務(wù)空閑任務(wù) void rtos task ide void pdata pdata pdata whie 1 煙臺大學(xué)畢業(yè)論文 設(shè)計 20 rtos ide zhan time 上面的代碼就是系統(tǒng)的空閑任務(wù) rtos task idle X RTOS 總是建立一個空閑任務(wù) 這個任務(wù)在沒有其它任務(wù)進(jìn)入就緒態(tài)時投入運行 這個空閑任務(wù)永遠(yuǎn)設(shè)為最低優(yōu)先級 即 OS OWEST PRI0 空閑任務(wù) rtos task idle 什么也不做 只是在不停地給一個 32 位 的名叫 OSIdeCtr 的計數(shù)器加 1 注意空閑任務(wù)不可能被應(yīng)用軟件刪除 4 2 任務(wù)管理任務(wù)管理 任務(wù)可以是一個無限的循環(huán) 任務(wù)看起來與任何 C 函數(shù)一樣 具有一個返回類型和 一個參數(shù) 只是它從不返回 任務(wù)的返回類型必須被定義成 void 型 4 2 1 建立任務(wù)建立任務(wù) 想讓 X RTOS 管理用戶的任務(wù) 用戶必須要先建立任務(wù) 用戶可以通過傳遞任務(wù)地 址和其它參數(shù)到以下這個函數(shù)來建立任務(wù) rtos task create 任務(wù)可以在多任務(wù)調(diào)度開 始前建立 也可以在其它任務(wù)的執(zhí)行過程中被建立 在開始多任務(wù)調(diào)度 即調(diào)用 rtos start 前 用戶必須建立至少一個任務(wù) 任務(wù)不能由中斷服務(wù)程序 ISR 來建立 rtos task create 的代碼如下 從中可以知道 rtos task create 需要六個參數(shù) tcb 是任務(wù)控制塊的指針 task 是任務(wù)代碼的指針 pdata 是當(dāng)任務(wù)開始執(zhí)行時傳遞給任務(wù)的 參數(shù)的指針 ptos 是分配給任務(wù)的堆棧的棧頂指針 prio 是分配給任務(wù)的優(yōu)先級 tick 是 給任務(wù)的時間片 程序清單程序清單4 6 建立任務(wù)建立任務(wù) rtos type err rtos task create rtos tcb tcb void task void pd void pdata rtos type stk ptos INT8U prio INT32U tick rtos type stk stktemp rtos type err err if prio rtos owest prio 1 return rtos err prio invaid OS ENTER CRITICA 煙臺大學(xué)畢業(yè)論文 設(shè)計 21 stktemp rtos type stk rtos task stk init task pdata ptos 0 2 err rtos tcb init tcb pr

溫馨提示

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

評論

0/150

提交評論