2022年單片機課件-RTX實時操作系統(tǒng)_第1頁
2022年單片機課件-RTX實時操作系統(tǒng)_第2頁
2022年單片機課件-RTX實時操作系統(tǒng)_第3頁
2022年單片機課件-RTX實時操作系統(tǒng)_第4頁
2022年單片機課件-RTX實時操作系統(tǒng)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第11章RTX51實時操作系統(tǒng)單片機原理、接口及應用內容提要

★前言

★RTX51系統(tǒng)特點★

RTX51的程序結構

★RTX51的功能函數

★RTX51的任務調度

RTX51的系統(tǒng)配置

★RTX51的應用舉例

★小結

11.1前言

RTX51是一款小巧的針對基于8051系列嵌入式系統(tǒng)的多任務實時操作系統(tǒng)。它的使用可以簡化比較復雜、有嚴格時間限制的軟件的設計過程。RTX51主要有兩個不同的可用版本:①RTX5lFull版。這里稱之為RTX51的標準版,既可以以循環(huán)(Round一Robin)方式執(zhí)行任務,也可以按4級任務優(yōu)先級的方式切換不同優(yōu)先級的任務。標準版以并行方式工作,支持中斷管理,信號和消息可以通過郵箱系統(tǒng)在不同任務之間傳遞。

②RTX5lTiny版。這里稱之為RTX5l的精簡版,是其標準版的一個子集。它可以很容易地運行在8051的單芯片系統(tǒng)而不需要任何外部數據存儲器。通用性強,系統(tǒng)需求低,但功能上受到限制。它只支持循環(huán)方式和信號方式的任務切換,而不支持優(yōu)先級方式的任務切換。

由于KEILC中自帶了RTX5l的精簡版RTX5lTiny,事實上精簡版也能夠滿足絕大部分場合的應用要求,所以以下只講解RTX5lTiny的內容,出現RTX51的地方默認為其精簡版RTX51Tiny。

程序中還有另一個名為job1的任務(設定為任務l)。時間片一般是比較短促的,一個時間片大約只有毫秒級時間。elseprintf("\r");參數event_sel指定了等待的事件,它只能是K_SIG。voidjob1(void)_task_1①RTX5lFull版。voidlights(void)_task_LIGHTSRTX51精簡版支持的功能函數如表11-2所示,具體含義分別介紹如下。功能說明判斷當前執(zhí)行任務的編號counter1++;;定義定時器中斷用的寄存器組每個任務只允許在預定的時間片中執(zhí)行,時間片用完時,RTX51就切換至另一個就緒的任務,繼續(xù)執(zhí)行一段時間。典型的RTX51Tiny應用程序一般運行于SMALL存儲模式下。由于KEILC中自帶了RTX5l的精簡版RTX5lTiny,事實上精簡版也能夠滿足絕大部分場合的應用要求,所以以下只講解RTX5lTiny的內容,出現RTX51的地方默認為其精簡版RTX51Tiny。3RTX51的程序結構在RTX51TINY環(huán)境下生成代碼,需要用到下列工具:C51編譯器BL51連接/定位器A51宏匯編器

此外,庫文件必須存放在環(huán)境變量C51LIB所指定的路徑下。

RTX51Tiny版可以運行在8051的單芯片嵌入式系統(tǒng)上,且不需要任何外部數據存儲器,但也不排斥應用程序訪問外部的數據存儲器。RTX51Tiny版本可以使用C51所支持的所有存儲模式。所使用的存儲模式只影響應用對象的存儲位置。RTX51Tiny的系統(tǒng)變量和應用程序的堆棧區(qū)總是存儲在8051的片內RAM中(即DATA和IDATA)。典型的RTX51Tiny應用程序一般運行于SMALL存儲模式下。

RTX51Tiny版本使用了8051的定時器0和定時器0的中斷信號。SFR中的全局中斷允許位或定時器0中斷屏蔽位都可能使RTX51Tiny停止運行。因此,除非有特殊的應用目的,應該使定時器0的中斷始終開啟,以保證RTX51Tiny的正常運行。 實時操作系統(tǒng)的性能參數對嵌入式系統(tǒng)的應用開發(fā)也有著直接影響,RTX51的性能參數如表11-1所示。

11.3RTX51的程序結構

RTX51Tiny通過循環(huán)(Round-Robin)方式來實現多任務,以達到多個無限循環(huán)或任務的準并行執(zhí)行。這里的多任務并不是真正同時執(zhí)行的,而是使用不同的時間片來執(zhí)行,即只是宏觀上的同時執(zhí)行。它將可用的CPU周期分成多個時間片,由RTX51把這些時間片分配給每一個任務使用。每個任務只能在預定的時間片里運行。然后,RTX51再切換到另一個己經準備就緒的任務,讓它再執(zhí)行一定的時間片。 時間片一般是比較短促的,一個時間片大約只有毫秒級時間。正是由于這個原因,在用戶看來,多個任務似乎是在同時執(zhí)行的。

RTX51利用了一個由8051定時器中斷信號驅動的定時程序來實現控制。定時器產生的周期性中斷信號用來驅動RTX51的定時節(jié)拍。 RTX51與用戶程序中的main函數是無關的。用戶程序中即使沒有main程序,操作系統(tǒng)也會自動從設定的任務0開始執(zhí)行。如果用戶程序中已經有了main函數,就必須用人工方式來啟動RTX51。這對于RTX51Tiny版,可以調用os_create_task函數來完成.

下面是一個只使用Round-Robin任務方式的簡單RTX51程序實例。程序中的兩個任務都是簡單的計數循環(huán)。RTX51從job0函數(設定為任務0)開始執(zhí)行。程序中還有另一個名為job1的任務(設定為任務l)。系統(tǒng)一旦啟動,在job0執(zhí)行一段時間后,RTx51就自動切換到job1的執(zhí)行;而job1執(zhí)行一段時間后,RTX51又切換回job0,……如此無限循環(huán)地重復執(zhí)行下去。#include<rtx51tny.h>intcounter0;intcounter1;voidjob0(void)_task_0{os_create_task(1);/*任務l己準備就緒*/while(1)/*無限循環(huán)*/{counter0++;/*更新計數值counter0*/}}voidjob1(void)_task_1{ while(1)/*無限循環(huán)*/ { counter1++;/*更新計數值counter1*/}}11.4RTX51的功能函數

RTX51精簡版支持的功能函數如表11-2所示,具體含義分別介紹如下。

11.4.1信號控制函數

①isr_send_signal函數原型charisr_send_signal(unsignedchartask_id);功能說明發(fā)送一個信號到task_id說明的任務。如果此任務已在等待一個信號,那么調用函數將使此任務就緒,準備執(zhí)行。否則,信號講存儲在此任務的信號標志中。此函數只能從中斷函數中調用。返回值

如果執(zhí)行成功,此函數返回0值;如果所指定的任務不存在,則返回-1。②os_clear_signal函數原型charos_clear_signal(unsignedchartask_id);

功能說明清除由task_id說明的任務的信號返回值

如果信號清除成功,此函數返回0值;如果所指定的任務不存在,則返回-1

③os_send_signal函數原型charos_send_signal(unsignedchartask_id);

功能說明發(fā)送一個信號到task_id說明的任務。如果此任務已在等待一個信號,那么調用函數將使此任務就緒,準備執(zhí)行。否則,信號講存儲在此任務的信號標志中。此函數只能在任務函數中調用返回值

如果執(zhí)行成功,此函數返回0值;如果所指定的任務不存在,則返回-111.4.2任務控制函數

①os_create_task函數原型charos_create_task(unsignedchartask_id);

功能說明啟動已定義的由task_id說明的任務。此任務根據RTX51運行規(guī)則,標記為就緒,并準備執(zhí)行。返回值

如果任務成功啟動,此函數返回0值;如果沒有task_id說明的任務,則返回-1

②os_delete_task函數原型charos_delete_task(unsignedchartask_id);

功能說明停止task_id說明的任務,此任務將從任務表中刪除。返回值

如果任務成功啟動,此函數返回0值;如果沒有task_id說明的任務,則返回-1。

③os_running_task_id函數原型charos_running_task_id(unsignedchartask_id);

功能說明判斷當前執(zhí)行任務的編號返回值

返回當前正在執(zhí)行的任務的編號,返回值為0~15。

11.4.3延時控制函數

os_wait函數原型charos_wait(unsignedcharevent_sel,/*將要等待 的事件*/ unsignedchartisks,/*將要等待的定時器時標數*/ unsignedchardummy);/*未用參數*/功能說明

停止當前執(zhí)行的任務,并等待一個或多個事件,如時間間隔、超時、從另一個任務或中斷發(fā)出的信號等。參數event_sel說明所等待的一個事件或幾個事件的組合。事件種類如表11-3所示。

表11-4os_wait函數的返回值

os_wait1

函數原型charos_wait1(unsignedcharevent_sel);

功能說明暫停當前任務,等待一個事件的發(fā)生。它是os_wait函數的一個子集,不接受針對os_wait函數提供的全部事件。參數event_sel指定了等待的事件,它只能是K_SIG。

返回值

當信號事件發(fā)生時,任務就被允許執(zhí)行,任務的執(zhí)行將恢復。返回用于識別事件、使任務重新啟動的常量。

os_wait2函數原型charos_wait2(unsignedcharevent_sel,/*將要等 待的事件*/ unsignedchartisks);/*將要等待的定時器時標數*/功能說明與os_wait相同,但是不需要dummy參數。返回值

與os_wait相同

11.5RTX51的任務調度

RTX51利用任務狀態(tài)來管理各個任務。用戶為RTX51定義的每個任務都會以各種狀態(tài)的某一種來運行。RTX51內核為每個任務保留了適當的狀態(tài)如表11-5所示。表11-5RTX51的任務狀態(tài)

RTX51以round-robin多任務方式執(zhí)行程序,它支持多個無限循環(huán)或任務的準并行執(zhí)行。任務不是被同時執(zhí)行,而是以分時的方式輪片執(zhí)行??捎玫腃PU時鐘周期被分成多個時間片,然后由RTX51將這些時間片分配給各個任務。每個任務只允許在預定的時間片中執(zhí)行,時間片用完時,RTX51就切換至另一個就緒的任務,繼續(xù)執(zhí)行一段時間。時間片的具體長度可以用配置函數TIMESHARING來定義。 如果遇到因為一個任務處于等待并且占用了時間片而暫時無法往下執(zhí)行,可以調用系統(tǒng)函數os_wait來通知RTX51,以便將當前的任務掛起而提前執(zhí)行另一任務。

RTX51中處理任務分配的模塊稱為調度程序(Scheduler)。調度程序驅動哪個任務運行是按照以下的規(guī)則進行的:(1)如果發(fā)生以下情況時,當前運行的任務將被中斷:調用os_wait函數,而所等待的事件未來到;任務的執(zhí)行時間已經超過所定義的Round-Robin循環(huán)時間間隔(2)如果發(fā)生以下情況時,另一個任務將被啟動: 已沒有正在執(zhí)行的任務;將要執(zhí)行的任務處在就緒狀態(tài)或超時狀態(tài)。

11.6RTX51的系統(tǒng)配置

編寫RTX51程序需要包含RTX51TNY.H文件。在程序中,需要用一個關鍵字“_task_”來聲明一個函數的任務屬性。RTX51程序不需要main函數。在進行連接處理時,會將啟動任務0的執(zhí)行所需要的代碼連接進來,作為開始執(zhí)行的代碼。用戶可以更改配置文件CONF_TNY.A51中的以下幾個參數:①

系統(tǒng)定時器中斷所用的寄存器組②

系統(tǒng)定時器的時間間隔③

Round-Robin的超時(time-out)值④

內部數據存儲器的大小⑤RTX5l啟動后的自由堆棧大小

以下是配置文件的部分內容:;RTX51的硬件定時器;用下面的EQU可預置RTX51的定時器時間常數;用8051定時器0作為控制軟件的定時器;定義定時器中斷用的寄存器組INT_REGBANK EQU 1;默認為寄存器1組;定義8051定時器0溢出所需的機器周期數INT_CLOCK EQU 10000;默認周期數為10000;定義Round-Robin的Timeout所需的定時器溢出數TIMESHARING EQU 5 ;默認為5次;注意:Round-Robin任務切換可用TIMESHARING為0來屏蔽

;RTX51堆??臻g;以下的EQU語句定義了堆棧區(qū)的片內RAM體積和最小自由堆棧空間:定義了堆??臻g耗盡后所執(zhí)行的宏代碼;定義最大的堆棧RAM地址RAMTOP EQU 0FFH ;默認地址是255;定義最小的堆棧自由空間FREE_STACK EQU 20;默認為20字節(jié)堆棧自由空間;;發(fā)生堆棧用盡時的執(zhí)行代碼STACK_ERRORMACROCLREA ;關閉所有中斷SJMP$;如堆??臻g耗盡,進入死循環(huán)ENDM在這個配置文件中,定義了許多可以修改的參數,以適應用戶特定的應用程序環(huán)境。這些參數的說明詳見表11-6所示。

voidlights(void)_task_LIGHTS{ while(1) /*任務必須是死循環(huán)*/ { os_wait1(K_SIG);/*等待信號量(由clock任務發(fā)出)*/ switch(showLightState)/*判斷showLightState狀態(tài)*/ { caseGREEN:/*顯示綠燈*/ printf("NOWis

溫馨提示

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

評論

0/150

提交評論