RTX51 FULL 學(xué)習(xí)總結(jié).pdf_第1頁
RTX51 FULL 學(xué)習(xí)總結(jié).pdf_第2頁
RTX51 FULL 學(xué)習(xí)總結(jié).pdf_第3頁
RTX51 FULL 學(xué)習(xí)總結(jié).pdf_第4頁
RTX51 FULL 學(xué)習(xí)總結(jié).pdf_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

RTX51 FULL 學(xué)習(xí)總結(jié) 作者 王健 RTX51 FULL 的最新版本是 V7 根據(jù)手冊可推測它發(fā)布于 2002 年 且在其之后就再也 沒有更新過了 可能已經(jīng)很完善了 但至今 Keil 的最新版本 Keil 5 對它依舊還是支持的 但 Keil 本身不自帶 RTX51 FULL 只自帶 RTX51 Tiny 如果要使用 RTX51 FULL 需要安裝 setup exe 安裝好后才可以使用 RTX51 FULL 安裝后在目錄 C Keil C51 Hlp 下有一個 RTX51 pdf 這便是 RTX51 FULL 的用戶指南 同時可在下面這個目錄里找到源代碼和例程 C Keil C51 Rtx51 第一章 概述 使用多任務(wù)實時操作系統(tǒng)的好處 使用多任務(wù)實時操作系統(tǒng)的好處 1 通過將一個問題分解成幾個獨立的 簡單易理解的任務(wù) 程序可被更容易地實現(xiàn) 測 試和維護 2 模塊化方法可將獨立的任務(wù)用在其它的項目中 3 由于解決了實時和多任務(wù)問題 創(chuàng)建程序和測試所需的時間就會大大減少 RTX51 有兩種類型的任務(wù) 快速任務(wù)和標準任務(wù) 有兩種類型的任務(wù) 快速任務(wù)和標準任務(wù) 快速任務(wù)快速任務(wù) 主要是響應(yīng)時間短和中斷時間短的任務(wù) 每個任務(wù)都使用獨立的寄存器組且都 有自己的堆棧區(qū) RTX51 同一時間只能支持最多 3 個快速任務(wù) 標準任務(wù)標準任務(wù) 任務(wù)切換需要一些更多時間的任務(wù) 所有標準任務(wù)都共享一個寄存器組和堆棧 區(qū) RTX51 同一時間最多只能支持 16 個標準任務(wù) 任務(wù)通信與同步 信號信號 信號是任務(wù)同步的最快形式 它僅僅是發(fā)一個信號給一個等待的任務(wù) 沒有實際信 息交換 消息消息 通過所謂的郵箱交換消息 任務(wù)為了等待一個消息 可能會進入一個隊列 消息由 郵箱按照先進先出的原則進行管理 如果有幾個任務(wù)等待同一條消息 則最先等待的任務(wù) 將會收到該消息 信號量 信號量 用于共享資源的無沖突訪問 同一時間只能有一個任務(wù)占用該資源 如果有幾個 任務(wù)請求訪問 則只有第一個任務(wù)獲得訪問權(quán) 其它任務(wù)將會被放在等待列表 waiting list 中 直到第一個任務(wù)完成對該資源的操作 任務(wù)切換 RTX51 包含一個事件驅(qū)動的任務(wù)切換機制 根據(jù)它們的優(yōu)先級切換任務(wù) 搶占式多任務(wù) 另外一個根據(jù)時間片的任務(wù)切換機制可隨意使用 輪轉(zhuǎn)調(diào)度 RTX51 有 4 種優(yōu)先級 其中優(yōu)先級 0 1 2 可分配給標準任務(wù) 而優(yōu)先級 3 是為快速任務(wù) 保留的 任務(wù)可以等待不同的事件發(fā)生 但不需要占用 CPU 時間 這里說的事件可以是收到消息 信號 中斷和超時 或者它們的組合 支持三種等待形式 正常的正常的 等待任意時間直到響應(yīng)的時間發(fā)生 條件的條件的 等待的任務(wù)永遠不會被阻塞 任務(wù)可以通過檢查相應(yīng)的返回值來判斷事件是否已 經(jīng)發(fā)生 帶超時的帶超時的 如果相應(yīng)的事件沒有發(fā)生 任務(wù)不會一直等待下去 而是有一個固定的時間 中斷系統(tǒng) 有兩種中斷處理方法 1 中斷由 C51 中斷函數(shù)來處理 2 中斷由 RTX51 的快速任務(wù)或標準任務(wù)來處理 所需資源所需資源 代碼空間 6 8KB 內(nèi)部 RAM 40 46B 的 DATA 20 200B 的 IDATA 堆棧 寄存器組 0 用于標準任務(wù) 1 2 3 用于快速任務(wù)或 C51 中斷函數(shù) 外部 RAM 至少 450B 系統(tǒng)時鐘 定時器 0 1 或 2 用戶可自己配置 一個簡單的例子一個簡單的例子 代碼參見用戶指南 P5 可以發(fā)現(xiàn) RTX51 FULL 與 RTX51 Tiny 的不同是 RTX51 FULL 是有主 函數(shù)的 且要在主函數(shù)中調(diào)用 os start stystem 任務(wù)號 來初始化系統(tǒng)并啟動一個任務(wù) RTX51 FULL 程序編譯通過后會自動進入 Debug 狀態(tài) 并且自帶調(diào)試工具箱 特別是 Task State 按鈕 可查看所有任務(wù)的相關(guān)信息 非常牛逼 這一點 C OS II 是沒有的 當然 Mailboxes 和 Semaphore 可查看所有郵箱和信號量的相關(guān)狀態(tài) 總之這個調(diào)試工具箱很強 大 另外編譯后在工程目錄里會有一個 MAP 文件 擴展名是 M51 這里面記錄著所有任務(wù)的 一些信息 包括任務(wù)號 任務(wù)優(yōu)先級 所用的寄存器組 任務(wù)名稱等 例如 能看見如下 信息 TASKID PRIORITY REG BANK SEGMENT NAME 0 0 0 PR PRODUCERTASK SAMPLE 1 1 0 PR CONSUMERTASK SAMPLE 第 3 章 編程概念 在優(yōu)先級中 3 對應(yīng)最高優(yōu)先級 0 對應(yīng)最低優(yōu)先級 RTX51 總是將 CPU 分給當前最高優(yōu)先級的任務(wù) 若有另一個更高優(yōu)先級的任務(wù)出現(xiàn) 則 CPU 就會又分給它 或者直到當前任務(wù)放棄 CPU 搶占式調(diào)度 搶占式調(diào)度 如果存在幾個優(yōu)先級為 0 的就緒任務(wù) 則在時間片完成后將會發(fā)生任務(wù)切換 輪轉(zhuǎn)調(diào)度 輪轉(zhuǎn)調(diào)度 分配任務(wù)優(yōu)先級時 指導(dǎo)原則是 分配任務(wù)優(yōu)先級時 指導(dǎo)原則是 應(yīng)用程序應(yīng)首先能工作無誤 而不考慮優(yōu)先級 優(yōu)先級應(yīng)用程序應(yīng)首先能工作無誤 而不考慮優(yōu)先級 優(yōu)先級 只是起時間優(yōu)化的作用 只是起時間優(yōu)化的作用 任務(wù)狀態(tài)任務(wù)狀態(tài) RTX51 有四種任務(wù)狀態(tài) 就緒 運行 激活 阻塞 等待 睡眠 事件可以是時間到 消息或信號的發(fā)送 中斷的發(fā)生等 這些事件都有可能導(dǎo)致任務(wù)的狀 態(tài)發(fā)生變化 可能產(chǎn)生任務(wù)切換 任務(wù)切換任務(wù)切換 RTX51 調(diào)度器調(diào)度器的工作規(guī)則如下 的工作規(guī)則如下 1 總是執(zhí)行就緒態(tài)中優(yōu)先級最高的任務(wù) 2 如果就緒態(tài)中的任務(wù)優(yōu)先級相同 則就緒時間最長的那個任務(wù) 即最先就緒的任務(wù) 將成為下一個要執(zhí)行的任務(wù) 3 任務(wù)切換只發(fā)生在以上條件下 除非不滿足 例外 時間片輪轉(zhuǎn)調(diào)度 以下條件滿足時將發(fā)生時間片輪轉(zhuǎn)調(diào)度 以下條件滿足時將發(fā)生時間片輪轉(zhuǎn)調(diào)度 1 輪轉(zhuǎn)調(diào)度必須使能 在配置文件中設(shè)置 2 運行中的任務(wù)優(yōu)先級是 0 且當前沒有執(zhí)行浮點運算 見手冊 P28 3 至少有一個優(yōu)先級為 0 的任務(wù)處于就緒態(tài) RTX51 推薦的運行模式是搶占式任務(wù)調(diào)度 如果用戶需要 優(yōu)先級為 0 的任務(wù)可通過輪轉(zhuǎn) 調(diào)度的方式被額外管理 任務(wù)類型任務(wù)類型 RTX51 主要有兩種任務(wù)類型 快速任務(wù)和標準任務(wù) 快速任務(wù)主要特點有 含有獨立的寄存器組 1 2 3 和獨立的堆棧區(qū) 含有最高的優(yōu) 先級 優(yōu)先級 3 因此能中斷標準任務(wù) 可被 C51 中斷函數(shù)中斷 系統(tǒng)最多只能同時激活 3 個快速任務(wù) 標準任務(wù)的主要特點有 任務(wù)切換時間比快速任務(wù)略長 共享寄存器組 寄存器組 0 和 堆棧區(qū) 任務(wù)切換時寄存器和堆棧的當前內(nèi)容被保存在外部 RAM 中 可被快速任務(wù)中斷 可被 C51 函數(shù)中斷 最多只能同時激活 16 個標準任務(wù) 任務(wù)聲明 void 函數(shù)名函數(shù)名 void task 任務(wù)號任務(wù)號 priority 任務(wù)優(yōu)先級任務(wù)優(yōu)先級 1 任務(wù)號 范圍是 0 255 且每個任務(wù)都有一個唯一的任務(wù)號 最多可定義 256 個任務(wù) 但同一時間只能激活 19 個任務(wù) 3 個快速任務(wù) 16 個標準任務(wù) 任務(wù)號最好從 0 順序 編寫 2 任務(wù)優(yōu)先級 0 對應(yīng)最低優(yōu)先級 3 對應(yīng)最高優(yōu)先級 標準任務(wù) 優(yōu)先級是 0 1 2 快速任務(wù) 優(yōu)先級是 3 如果沒有指定優(yōu)先級 則 RTX51 使用優(yōu)先級 0 標準任務(wù)必須使用寄存器組 0 編譯 這是 C51 編譯器的默認值 但是 快速任務(wù)必須使用 寄存器組 1 2 或 3 編譯 這必須使用以下指令來保證 pragma REGSTERBANK x 這里的 x 1 2 或 3 舉個例子 標準任務(wù)的聲明 標準任務(wù)的聲明 void example1 void task 8 priority 0 或 void example1 void task 8 如果沒有指定優(yōu)先級 則 RTX51 使用優(yōu)先級 0 快速任務(wù)的聲明快速任務(wù)的聲明 pragma REGISTERBANK 1 void example 2 v oid task 125 priority 3 RTX51t 提供兩種不同的中斷處理方法 1 C51 中斷函數(shù) 2 RTX51 任務(wù)中斷 快速任務(wù)中斷和標準任務(wù)中斷 其中方法 1 就是一般的中斷函數(shù) 沒什么好說的 方法 2 是使用快速任務(wù)或標準任務(wù)來處理中斷 這種中斷處理方法就跟等待一個信號或消 息差不多 中斷使能寄存器的處理中斷使能寄存器的處理 中斷使能寄存器是由 RTX51 管理的 用戶不要直接操作 中斷使能是通過 os enable isr 中斷號 函數(shù)來操作的 中斷禁止是通過 os disable isr 中斷 號 函數(shù)來操作的 分配給任務(wù)的中斷源只有在任務(wù)等待中斷發(fā)生時才會使能 這樣防止了非預(yù)期中斷的發(fā)生 如果正在運行的任務(wù)是一個快速任務(wù) 則所有的任務(wù)中斷都是禁止的 不是 ISR 中斷 一個相對不重要的中斷因而不能中斷快速任務(wù) 如果正在運行的任務(wù)是一個標準任務(wù) 那么它可以被所有發(fā)生的中斷所中斷 如果另一個 標準任務(wù)正在等待其中一個發(fā)生的中斷 那么它將會被 RTX51 置為就緒態(tài) 在系統(tǒng)函數(shù)運行期間 所有的標準任務(wù)中斷都是禁止的 中斷優(yōu)先級寄存器的處理中斷優(yōu)先級寄存器的處理 RTX51 不提供對中斷優(yōu)先級寄存器的管理操作 C51 中斷函數(shù)的聲明中斷函數(shù)的聲明 void 函數(shù)名函數(shù)名 void interrupt X using n 對于對于 n 這里要著重說明 這里要著重說明 1 使用寄存器組切換 當進入中斷時 中斷函數(shù)將保存寄存器 ACC B DPH DPL PSW 到中斷任務(wù)的堆棧 由于不是所有的寄存器都要保存 用戶必須確保中斷函數(shù)沒有使用 RTX51 用到的寄存器組 寄存器組 0 也不能使用 因為它一般用于標準任務(wù)和系統(tǒng)時 鐘 寄存器組 1 2 或 3 只能在快速任務(wù)沒有使用時才能使用 2 不使用寄存器組切換 如果省略這一屬性 則所有需要保存的寄存器都會保存到堆棧 中 這會產(chǎn)生更長的運行時間和增加堆棧需求 注意 C51 中斷函數(shù)的這個 n 永遠不要使用寄存器組 0 或被快速任務(wù)占用的寄存器組 任務(wù)通信 RTX51 提供信號信號和郵箱郵箱來管理任務(wù)間的通信 信號 信號 信號是最簡單和最快速的任務(wù)通信形式 這一般用于沒有數(shù)據(jù)交換的任務(wù)同步 等待一個信號 當信號收到后 等待的任務(wù)將會又清除該信號標志并使任務(wù)進入就緒態(tài)或 運行態(tài) 發(fā)送一個信號 每個任務(wù)或中斷都可給任意個任務(wù)發(fā)信號 但每個任務(wù)只能保存一個信號 郵箱 RTX51 提供了 8 個郵箱 每個郵箱都有一個號碼 消息是固定的兩個字節(jié) 每個郵箱每個郵箱 里都包含 3 個等待列表 但用戶不能直接訪問這些列表 但了解這些有助于更好 地理解郵箱 消息列表 消息列表 寫入郵箱的消息列表 最多 8 條消息 寫等待列表 寫等待列表 任務(wù)想寫一條消息到郵箱的等待列表 最多只能有 16 個任務(wù)等待 即已 經(jīng)寫滿 讀等待列表 讀等待列表 任務(wù)想讀一條小心從郵箱的等待列表 最多只能有 16 個任務(wù)等待 發(fā)送一條消息給一個郵箱 任務(wù)可以給任意一個郵箱發(fā)送消息 如果某個郵箱的消息列表 已經(jīng)滿了 那么任務(wù)就會被放入寫等待列表 它保持等待狀態(tài)指導(dǎo)有另外的任務(wù)從中取走 一條消息騰出空間 從一個郵箱讀一條消息從一個郵箱讀一條消息 每個任務(wù)都可以從任意的郵箱讀取消息 如果郵箱的消息列表已 經(jīng)空 沒有消息了 那么任務(wù)就會被放入等待狀態(tài) 進入讀等待列表 它將保持等待 狀態(tài)直到有任務(wù)發(fā)送消息給這個郵箱 信號量信號量 信號量用于對共享資源的訪問 信號量有兩種 二值信號量和計數(shù)式信號量 而 RTX51 提供了 8 個二值信號量 信號量有等待和發(fā)送兩種操作 動態(tài)內(nèi)存管理 動態(tài)內(nèi)存管理 最多能創(chuàng)建 16 個內(nèi)存池 每個內(nèi)存池最多管理 256 個內(nèi)存塊 每個內(nèi)存 塊大小是固定的 其實跟 C OS II 一樣 也是需要事先定義一個數(shù)組 浮點運算 以下兩種情況使用浮點運算時沒有限制 1 系統(tǒng)中只有一個任務(wù)使用了浮點運算 2 只有優(yōu)先級為 0 的任務(wù)使用了浮點運算 如果幾個不同優(yōu)先級的任務(wù)使用了浮點運算 那么必須使用標準 C51 函數(shù) fpsave 和 fprestore 如果調(diào)用了 fpsave 函數(shù) 則其它任何 RTX 函數(shù)都不能再調(diào)用 除非執(zhí)行了 fprestore RTX51 給所有的標準任務(wù)都分配了寄存器組 0 快速任務(wù)使用寄存器組 1 2 或 3 使用 pragma REGISTERBAN 0 指令 第 4 章 編程者的參考 本章主要是講解了 RTX51 提供的一些系統(tǒng)函數(shù) 這里只介紹幾個 其它的請自行查看手冊 沒提到的不代表不重要 只是很容易理解 os start system n 初始化系統(tǒng)并啟動第一個用戶任務(wù) 其中 n 是任務(wù)號 中斷管理函數(shù) os attach interrupt 中斷號 該函數(shù)的作用是把該中斷附加給調(diào)用它的那個任務(wù) os enable isr 中斷號 os disable isr 中斷號 注意 一個中斷最多只能分配給一個任務(wù) 使用 os attach interrupt 后 對應(yīng)的中斷其實 還沒有使能 只有任務(wù)使用 os wait 函數(shù)等待中斷發(fā)生時 它才會被使能 include void count task void task 2 priority 0 分配外部中斷0給這

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論