版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)時(shí)操作系統(tǒng)第一頁(yè),共五十四頁(yè),2022年,8月28日2對(duì)于單任務(wù)應(yīng)用程序或者簡(jiǎn)單的前后臺(tái)應(yīng)用系統(tǒng)來(lái)說(shuō),編寫簡(jiǎn)單的監(jiān)控程序就夠了。如簡(jiǎn)易計(jì)算器、防盜報(bào)警器、容器溫度控制系統(tǒng)等等,學(xué)習(xí)前面章節(jié)的內(nèi)容就夠了。但是,許多單片機(jī)應(yīng)用程序要求同時(shí)執(zhí)行兩個(gè)或兩個(gè)以上工作或任務(wù),如汽車發(fā)動(dòng)機(jī)控制、防抱死系統(tǒng)(ABS)、飛機(jī)管理系統(tǒng)、噴氣發(fā)動(dòng)機(jī)控制。對(duì)于這樣的應(yīng)用程序,監(jiān)控程序的編寫相當(dāng)困難,而必須要使用實(shí)時(shí)操作系統(tǒng)RTOS。第二頁(yè),共五十四頁(yè),2022年,8月28日3實(shí)時(shí)多任務(wù)操作系統(tǒng)(RTOS)可以靈活地為幾個(gè)任務(wù)調(diào)度系統(tǒng)的資源(CPU、存儲(chǔ)器等)。RTX51是一個(gè)強(qiáng)大的實(shí)時(shí)操作系統(tǒng),而且簡(jiǎn)單易用。它可以在所有的8051派生產(chǎn)品中使用。本章首先介紹實(shí)時(shí)操作系統(tǒng)的概念,然后介紹在8051系統(tǒng)中得到應(yīng)用的RTX51實(shí)時(shí)操作系統(tǒng)的結(jié)構(gòu)特點(diǎn)和應(yīng)用實(shí)例。第三頁(yè),共五十四頁(yè),2022年,8月28日4本章內(nèi)容10.1實(shí)時(shí)操作系統(tǒng)10.2RTX51實(shí)時(shí)操作系統(tǒng)10.3RTX精簡(jiǎn)版例程10.4RTX全功能版例程第四頁(yè),共五十四頁(yè),2022年,8月28日
實(shí)時(shí)操作系統(tǒng)(RTOS)是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時(shí),能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時(shí)間之內(nèi)來(lái)控制生產(chǎn)過(guò)程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并控制所有實(shí)時(shí)任務(wù)協(xié)調(diào)一致運(yùn)行的操作系統(tǒng)。因而,提供及時(shí)響應(yīng)和高可靠性是其主要特點(diǎn)。實(shí)時(shí)操作系統(tǒng)有硬實(shí)時(shí)和軟實(shí)時(shí)之分,硬實(shí)時(shí)要求在規(guī)定的時(shí)間內(nèi)必須完成操作,這是在操作系統(tǒng)設(shè)計(jì)時(shí)保證的;軟實(shí)時(shí)則只要按照任務(wù)的優(yōu)先級(jí),盡可能快地完成操作即可。我們通常使用的操作系統(tǒng)在經(jīng)過(guò)一定改變之后就可以變成實(shí)時(shí)操作系統(tǒng)。510.1實(shí)時(shí)操作系統(tǒng)第五頁(yè),共五十四頁(yè),2022年,8月28日多任務(wù)運(yùn)行的實(shí)現(xiàn)實(shí)際上是靠CPU(中央處理單元)在許多任務(wù)之間轉(zhuǎn)換和調(diào)度。CPU只有一個(gè),輪番服務(wù)于一系列任務(wù)中的某一個(gè)。多任務(wù)運(yùn)行很像前/后臺(tái)系統(tǒng),只是后臺(tái)任務(wù)有多個(gè)。多任務(wù)運(yùn)行使CPU的利用率達(dá)到最高,并使應(yīng)用程序模塊化。在實(shí)時(shí)應(yīng)用中,多任務(wù)化的最大特點(diǎn)是,開(kāi)發(fā)人員可以將很復(fù)雜的應(yīng)用程序?qū)哟位?。使用多任?wù),應(yīng)用程序?qū)⒏菀自O(shè)計(jì)與維護(hù)。10.1.1多任務(wù)系統(tǒng)6第六頁(yè),共五十四頁(yè),2022年,8月28日一個(gè)任務(wù),也稱做一個(gè)線程,是一個(gè)簡(jiǎn)單的程序,該程序可以認(rèn)為CPU完全只屬于該程序自己。實(shí)時(shí)應(yīng)用程序的設(shè)計(jì)過(guò)程包括如何把問(wèn)題分割成多個(gè)任務(wù)。每個(gè)任務(wù)都是整個(gè)應(yīng)用的一部分,都被賦予一定的優(yōu)先級(jí),有自己的一套CPU寄存器和??臻g。典型的是,每個(gè)任務(wù)都是一個(gè)無(wú)限的循環(huán),都可能處在以下5種狀態(tài)之一—休眠態(tài)、就緒態(tài)、運(yùn)行態(tài)、掛起態(tài)(等待某一事件發(fā)生)及被中斷態(tài)。10.1.2多任務(wù)系統(tǒng)中任務(wù)的定義7第七頁(yè),共五十四頁(yè),2022年,8月28日休眠態(tài)相當(dāng)于任務(wù)駐留在內(nèi)存中,但并不被多任務(wù)內(nèi)核所調(diào)度;就緒態(tài)意味著任務(wù)已經(jīng)準(zhǔn)備好,可以運(yùn)行,但由于該任務(wù)的優(yōu)先級(jí)比正在運(yùn)行的任務(wù)的優(yōu)先級(jí)低,還暫時(shí)不能運(yùn)行;運(yùn)行態(tài)是指任務(wù)掌握了CPU的使用權(quán),正在運(yùn)行中;掛起態(tài)也可以叫做等待事件態(tài),指任務(wù)在等待,等待某一事件的發(fā)生(例如等待某外設(shè)的I/O操作,等待某共享資源由暫不能使用變成能使用狀態(tài),等待定時(shí)脈沖的到來(lái),或等待超時(shí)信號(hào)的到來(lái),以結(jié)束目前的等待,等等);最后,發(fā)生中斷時(shí),CPU提供相應(yīng)的中斷服務(wù),原來(lái)正在運(yùn)行的任務(wù)暫不能運(yùn)行,就進(jìn)入了被中斷狀態(tài)。8第八頁(yè),共五十四頁(yè),2022年,8月28日10.1.3多任務(wù)系統(tǒng)中的任務(wù)特性任務(wù)就是一個(gè)具有獨(dú)立功能的無(wú)限循環(huán)的程序段的一次運(yùn)行活動(dòng)。任務(wù)具有動(dòng)態(tài)性、并發(fā)性、異步獨(dú)立性的特點(diǎn)。
1.動(dòng)態(tài)性:任務(wù)的狀態(tài)是不斷變化的,一般分為:休眠態(tài),就緒態(tài),運(yùn)行態(tài),掛起態(tài)等。
2.并發(fā)性:系統(tǒng)中同時(shí)存在多個(gè)任務(wù),它們宏觀上是同時(shí)運(yùn)行的
3.異步獨(dú)立性:任務(wù)是系統(tǒng)中獨(dú)立運(yùn)行的基本單元,也是內(nèi)核分配和調(diào)度的基本單元,每個(gè)任務(wù)各自按相互獨(dú)立的不可預(yù)知的速度運(yùn)行,走走停停。每個(gè)任務(wù)都要安排一個(gè)決定其重要性的優(yōu)先級(jí),都有一個(gè)無(wú)限循環(huán)的程序段規(guī)定其功能(如一個(gè)C語(yǔ)言過(guò)程),并相應(yīng)有一個(gè)數(shù)據(jù)段、堆棧段及一個(gè)任務(wù)控制塊TCB(用于保存CPU的現(xiàn)場(chǎng),狀態(tài)等)。9第九頁(yè),共五十四頁(yè),2022年,8月28日10.1.4實(shí)時(shí)操作系統(tǒng)特性1.高精度計(jì)時(shí)系統(tǒng)計(jì)時(shí)精度是影響實(shí)時(shí)性的一個(gè)重要因素。在實(shí)時(shí)應(yīng)用系統(tǒng)中,經(jīng)常需要精確確定實(shí)時(shí)地操作某個(gè)設(shè)備或執(zhí)行某個(gè)任務(wù),或精確的計(jì)算一個(gè)時(shí)間函數(shù)。這些不僅依賴于一些硬件提供的時(shí)鐘精度,也依賴于實(shí)時(shí)操作系統(tǒng)實(shí)現(xiàn)的高精度計(jì)時(shí)功能。2.多級(jí)中斷機(jī)制一個(gè)實(shí)時(shí)應(yīng)用系統(tǒng)通常需要處理多種外部信息或事件,但處理的緊迫程度有輕重緩急之分。有的必須立即作出反應(yīng),有的則可以延后處理。因此,需要建立多級(jí)中斷嵌套處理機(jī)制,以確保對(duì)緊迫程度較高的實(shí)時(shí)事件進(jìn)行及時(shí)響應(yīng)和處理。10第十頁(yè),共五十四頁(yè),2022年,8月28日3.實(shí)時(shí)調(diào)度機(jī)制實(shí)時(shí)操作系統(tǒng)不僅要及時(shí)響應(yīng)實(shí)時(shí)事件中斷,同時(shí)也要及時(shí)調(diào)度運(yùn)行實(shí)時(shí)任務(wù)。但是,處理機(jī)調(diào)度并不能隨心所欲的進(jìn)行,因?yàn)樯婕暗絻蓚€(gè)進(jìn)程之間的切換,只能在確保“安全切換”的時(shí)間點(diǎn)上進(jìn)行,實(shí)時(shí)調(diào)度機(jī)制包括兩個(gè)方面,一是在調(diào)度策略和算法上保證優(yōu)先調(diào)度實(shí)時(shí)任務(wù);二是建立更多“安全切換”時(shí)間點(diǎn),保證及時(shí)調(diào)度實(shí)時(shí)任務(wù)。11第十一頁(yè),共五十四頁(yè),2022年,8月28日10.2RTX51實(shí)時(shí)操作系統(tǒng)RTX51是用于8051系列單片機(jī)的一種多任務(wù)實(shí)時(shí)操作系統(tǒng)(RTOS)。它可以簡(jiǎn)化具有實(shí)時(shí)性要求的復(fù)雜軟件的設(shè)計(jì)。RTX51有兩個(gè)不同版本:RTX51Full和RTX51Tiny。RTX51Full允許4個(gè)任務(wù)優(yōu)先級(jí)的輪轉(zhuǎn)和搶先式任務(wù)切換,且它還可以與中斷函數(shù)并行使用。任務(wù)之間可以使用郵箱系統(tǒng)(mailboxsystem)來(lái)傳遞信號(hào)和消息。可以從存儲(chǔ)池進(jìn)行分配或釋放存儲(chǔ)器,還可以使一個(gè)任務(wù)等待,如中斷、超時(shí)、另一個(gè)任務(wù)或中斷的信號(hào)及消息。12第十二頁(yè),共五十四頁(yè),2022年,8月28日13RTX51Tiny是RTX51Full的子集,可以容易地在沒(méi)有片外存儲(chǔ)器的8051單片機(jī)系統(tǒng)上運(yùn)行。RTX51Tiny也支持很多RTX51Full的功能,允許輪轉(zhuǎn)式任務(wù)切換,支持信號(hào)傳遞。但它不支持搶先式的任務(wù)切換,不能進(jìn)行信息處理,也不支持存儲(chǔ)池的分配和釋放。在許多單片機(jī)應(yīng)用系統(tǒng)中要求能夠同時(shí)處理多項(xiàng)工作或任務(wù),實(shí)時(shí)多任務(wù)操作系統(tǒng)(RTOS)可以靈活地為幾個(gè)任務(wù)調(diào)度系統(tǒng)的資源(CPU、存儲(chǔ)器等)。RTX51是一個(gè)強(qiáng)大的實(shí)時(shí)操作系統(tǒng),而且簡(jiǎn)單易用。它可以在所有的8051派生產(chǎn)品中使用。可以用標(biāo)準(zhǔn)C的結(jié)構(gòu)編寫RTX-51程序,并用C51編譯它們。它只在指定任務(wù)ID和優(yōu)先權(quán)方面與標(biāo)準(zhǔn)C有一點(diǎn)不同。RTX-51程序也要求包含實(shí)時(shí)可執(zhí)行的頭文件,并用BL51鏈接器/定位器和相應(yīng)的RTX-51庫(kù)文件鏈接。第十三頁(yè),共五十四頁(yè),2022年,8月28日10.2.1RTX-51實(shí)時(shí)操作系統(tǒng)特點(diǎn)
RTX-51實(shí)時(shí)多任務(wù)操作系統(tǒng),完全不同于一般的單片機(jī)C51程序。RTX-51有自己獨(dú)特的概念和特點(diǎn):1.中斷:RTX-51系統(tǒng)可以使用中斷,其中斷函數(shù)以并行方式工作。中斷函數(shù)可以與RTX-51內(nèi)核通信,并可以將信號(hào)或者消息發(fā)送到RTX-51的指定任務(wù)中。在RTX-51FULL中,中斷一般配置為一個(gè)任務(wù)。2.信息傳遞:
RTX-51FULL支持任務(wù)之間的信息交換,可以使用isr_recv_message、isr_send_message、os_send_message和os_wait函數(shù)來(lái)實(shí)現(xiàn)。在RTX-51系統(tǒng)中,信息是一個(gè)可以被存儲(chǔ)器看作是數(shù)字或者指針的16位數(shù)值。RTX-51FULL中還可以支持使用存儲(chǔ)器庫(kù)系統(tǒng)的變量信息。14第十四頁(yè),共五十四頁(yè),2022年,8月28日10.2.1RTX51實(shí)時(shí)操作系統(tǒng)特點(diǎn)3.CAN通信:
RTX-51FULL中集成了一個(gè)CAN總線通信模塊RTX-51/CAN。通過(guò)RTX-51/CAN可以輕松地實(shí)現(xiàn)CAN總線的通信。RTX-51CAN作為一個(gè)任務(wù)來(lái)使用,可以通過(guò)CAN網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)信息的傳遞,其他的CAN終端可以配置為一般的C51程序,也可以是RTX-51的實(shí)時(shí)操作系。4.BITBUS通信:
RTX-51FULL系統(tǒng)中集成了BITBUS主控制器和從控制器。BITBUS任務(wù)主要用于支持與Intel8044之間的信息傳遞。15第十五頁(yè),共五十四頁(yè),2022年,8月28日5.事件
在os_wait函數(shù)中,RTX51支持下列事件:Timeout(超時(shí)):
掛起正在運(yùn)行的任務(wù),等待規(guī)定的時(shí)鐘滴答數(shù)。Interval(間隔):
這和Timeout很相似,但不是用軟件定時(shí)器的復(fù)位來(lái)產(chǎn)生周期性的間隔(時(shí)鐘要求)。(僅RTX51Tiny)Signal(信號(hào)):任務(wù)之間協(xié)調(diào)。Message(消息):交換消息。(僅RTX51Full)Interrupt(中斷):
一個(gè)可以等待8051硬件中斷的任務(wù)。(僅RTX51Full)Semaphore(信號(hào)量):
管理共享的系統(tǒng)資源的二進(jìn)制信號(hào)量。(僅RTX51Full)
16第十六頁(yè),共五十四頁(yè),2022年,8月28日6.運(yùn)行環(huán)境RTX-51實(shí)時(shí)多任務(wù)操作系統(tǒng)使用標(biāo)準(zhǔn)的C51來(lái)編寫程序,可以運(yùn)行于所有的51系列單片機(jī)中。RTX-51自身提供了靈活的時(shí)間分配,以及任務(wù)的響應(yīng)和切換。用戶只需要用標(biāo)準(zhǔn)的C51語(yǔ)言編寫RTX51程序,然后用C51編譯器編譯即可生成代碼。其中,僅有少數(shù)內(nèi)容和標(biāo)準(zhǔn)C語(yǔ)言有差異,這些內(nèi)容是為了實(shí)現(xiàn)任務(wù)標(biāo)識(shí)和優(yōu)先級(jí)而設(shè)置的。RTX-51程序設(shè)計(jì)需要包含實(shí)時(shí)運(yùn)行頭文件和必要的庫(kù)文件,并且要用BL51連接/定位器來(lái)實(shí)現(xiàn)連接。17第十七頁(yè),共五十四頁(yè),2022年,8月28日在Keil中,在目標(biāo)選項(xiàng)的Target標(biāo)簽中的operating中選擇RTX-51Tiny,如圖10-1;且在頭文件中需要加上#include<rtx51tny.h>。在RTX51TINY環(huán)境下生成代碼,需要用到下列工具:C51編譯器BL51連接/定位器A51宏匯編器此外,庫(kù)文件RTX51TNY.LIB必須存放在環(huán)境變量C51LIB所指定的路徑下。18第十八頁(yè),共五十四頁(yè),2022年,8月28日19圖10-1RTX-51Tiny的設(shè)置界面第十九頁(yè),共五十四頁(yè),2022年,8月28日RTX51Tiny的存儲(chǔ)模式
RTX51Tiny版可以運(yùn)行在8051的單芯片嵌入式系統(tǒng)上,且不需要任何外部數(shù)據(jù)存儲(chǔ)器,但也不排斥應(yīng)用程序訪問(wèn)外部的數(shù)據(jù)存儲(chǔ)器。RTX51Tiny版本可以使用C51所支持的所有存儲(chǔ)模式。所使用的存儲(chǔ)模式只影響應(yīng)用對(duì)象的存儲(chǔ)位置。RTX51Tiny的系統(tǒng)變量和應(yīng)用程序的堆棧區(qū)總是存儲(chǔ)在8051的片內(nèi)RAM中(即DATA和IDATA)。典型的RTX51Tiny應(yīng)用程序一般運(yùn)行于SMALL存儲(chǔ)模式下。20第二十頁(yè),共五十四頁(yè),2022年,8月28日RTX51Tiny定時(shí)使用的定時(shí)器
RTX51Tiny版本使用了8051的定時(shí)器0和定時(shí)器0的中斷信號(hào)。SFR中的全局中斷允許位或定時(shí)器0中斷屏蔽位都可能使RTX51Tiny停止運(yùn)行。因此,除非有特殊的應(yīng)用目的,應(yīng)該使定時(shí)器0的中斷始終開(kāi)啟,以保證RTX51Tiny的正常運(yùn)行。21第二十一頁(yè),共五十四頁(yè),2022年,8月28日7.RTX51的性能參數(shù)實(shí)時(shí)操作系統(tǒng)的性能參數(shù)對(duì)嵌入式系統(tǒng)的應(yīng)用開(kāi)發(fā)也有著直接影響,RTX51的性能參數(shù)如表10-1所示。描述RTX51TINY版本任務(wù)數(shù)量最多16個(gè)RAM需求7字節(jié)DATA空間,3倍于任務(wù)數(shù)量的IDATA空間代碼要求900字節(jié)硬件要求定時(shí)器0系統(tǒng)時(shí)鐘1000~65535個(gè)時(shí)鐘周期中斷響應(yīng)時(shí)間<20周期任務(wù)切斷時(shí)間100~700周期,依賴于堆棧負(fù)載22表10-1RTX51的性能參數(shù)第二十二頁(yè),共五十四頁(yè),2022年,8月28日10.2.2RTX51的系統(tǒng)配置編寫RTX51程序需要包含RTX51TNY.H文件。在程序中,需要用一個(gè)關(guān)鍵字“_task_”來(lái)聲明一個(gè)函數(shù)的任務(wù)屬性。RTX51程序不需要main函數(shù)。在進(jìn)行連接處理時(shí),會(huì)將啟動(dòng)任務(wù)0的執(zhí)行所需要的代碼連接進(jìn)來(lái),作為開(kāi)始執(zhí)行的代碼。用戶可以更改配置文件CONF_TNY.A51中的以下幾個(gè)參數(shù):①
系統(tǒng)定時(shí)器中斷所用的寄存器組②系統(tǒng)定時(shí)器的時(shí)間間隔③
Round-Robin的超時(shí)(time-out)值④內(nèi)部數(shù)據(jù)存儲(chǔ)器的大小⑤RTX5l啟動(dòng)后的自由堆棧大小23第二十三頁(yè),共五十四頁(yè),2022年,8月28日以下是配置文件的部分內(nèi)容:;RTX51的硬件定時(shí)器;用下面的EQU可預(yù)置RTX51的定時(shí)器時(shí)間常數(shù);用8051定時(shí)器0作為控制軟件的定時(shí)器;定義定時(shí)器中斷用的寄存器組INT_REGBANKEQU 1;
默認(rèn)為寄存器1組;定義8051定時(shí)器0溢出所需的機(jī)器周期數(shù)INT_CLOCKEQU10000;默認(rèn)周期數(shù)為10000;定義Round-Robin的Timeout所需的定時(shí)器溢出數(shù)
TIMESHARING EQU 5;默認(rèn)為5次;注意:Round-Robin任務(wù)切換可用TIMESHARING為0來(lái)屏蔽;24第二十四頁(yè),共五十四頁(yè),2022年,8月28日;RTX51堆??臻g;以下的EQU語(yǔ)句定義了堆棧區(qū)的片內(nèi)RAM體積最小自由堆??臻g;定義了堆??臻g耗盡后所執(zhí)行的宏代碼;定義最大的堆棧RAM地址
RAMTOPEQU 0FFH;默認(rèn)地址是255;定義最小的堆棧自由空間
FREE_STACKEQU20;默認(rèn)為20字節(jié)堆棧自由空間;;發(fā)生堆棧用盡時(shí)的執(zhí)行代碼
STACK_ERRORMACRO
CLREA
;關(guān)閉所有中斷SJMP$;如堆棧空間耗盡,進(jìn)入死循環(huán)ENDM這些參數(shù)的說(shuō)明詳見(jiàn)表10-2。25第二十五頁(yè),共五十四頁(yè),2022年,8月28日
表10-2配置文件參數(shù)說(shuō)明參數(shù)描述INT-REGBANK說(shuō)明RTX51系統(tǒng)所用的寄存器組INT-CLOCK定義系統(tǒng)時(shí)間間隔,系統(tǒng)用這個(gè)間隔產(chǎn)生一個(gè)中斷信號(hào),定義的數(shù)據(jù)是指每次中斷發(fā)生所需的CPU周期數(shù)TIMESHARING定義Round-Robin任務(wù)切換的超時(shí)間隔(time-out),是定時(shí)器溢出中斷次數(shù),發(fā)生指定次數(shù)中斷后切換任務(wù)。如果是0,則多任務(wù)Round-Robin機(jī)制被屏蔽RAMTOP說(shuō)明8051片內(nèi)RAM的最大地址,8051為7FH,8052為0FFHFREE-STACK定義任務(wù)切換時(shí)堆棧自由空間體積字節(jié)數(shù),RTX51會(huì)檢驗(yàn)堆棧體積是否合理。如太小,引用STACK-ERROR宏STACK-ERROR當(dāng)RTX51檢測(cè)到堆棧出錯(cuò)時(shí)執(zhí)行的宏,可以根據(jù)應(yīng)用程序需求更換這個(gè)宏。26第二十六頁(yè),共五十四頁(yè),2022年,8月28日10.2.3RTX的典型功能函數(shù)在RTX-51Tiny的系統(tǒng)函數(shù)中,以“os_”開(kāi)頭的函數(shù)可以被任務(wù)專用,而以“isr_”開(kāi)頭的函數(shù)則表示可以被C51的中斷函數(shù)專用。在使用RTX-51Tiny的系統(tǒng)函數(shù)時(shí),需要在程序中加入“RTX51TNY.h”頭文件。在該頭文件中,提供了RTX-51Tiny系統(tǒng)函數(shù)的說(shuō)明以及所有常數(shù)聲明。27第二十七頁(yè),共五十四頁(yè),2022年,8月28日(1)發(fā)送信號(hào)函數(shù)isr_send_signal
發(fā)送信號(hào)函數(shù)isr_send_signal主要用于向一個(gè)任務(wù)發(fā)送信號(hào)。其函數(shù)原型如下:charisr_send_signal(unsignedchartaskid);
其中,參數(shù)taskid表示接收信號(hào)的任務(wù)號(hào)。發(fā)送信號(hào)函數(shù)isr_send_signal如果返回0,則表示信號(hào)發(fā)送成功,如果返回-1,則表示指向的任務(wù)不存在。28第二十八頁(yè),共五十四頁(yè),2022年,8月28日(2)清除信號(hào)標(biāo)志函數(shù)os_clear_signal清除信號(hào)標(biāo)志函數(shù)os_clear_signal主要用于清除指定任務(wù)的信號(hào)標(biāo)志。其函數(shù)原型如下:charos_clear_signal(unsignedchartaskid);其中,參數(shù)taskid表示所需要清除信號(hào)標(biāo)志的任務(wù)號(hào)。清除信號(hào)標(biāo)志函數(shù)os_clear_signal如果返回0,則表示信號(hào)標(biāo)志清除成功,如果返回-1,則表示指向的任務(wù)不存在。29第二十九頁(yè),共五十四頁(yè),2022年,8月28日(3)刪除任務(wù)函數(shù)os_delete_task刪除任務(wù)函數(shù)os_delete_task主要用于刪除指定任務(wù)號(hào)的任務(wù)。其函數(shù)原型如下:
charos_delete_task(unsignedchartaskid);其中,參數(shù)taskid表示所需要?jiǎng)h除任務(wù)的任務(wù)號(hào),taskid必須與任務(wù)描述的數(shù)字相一致,可取值的范圍為0~15。刪除任務(wù)函數(shù)os_delete_task如果返回0,則表示刪除任務(wù)成功,如果返回-1,則表示指向的任務(wù)不存在或者任務(wù)沒(méi)有啟動(dòng)。30第三十頁(yè),共五十四頁(yè),2022年,8月28日(4)當(dāng)前任務(wù)號(hào)函數(shù)os_running_task_id當(dāng)前任務(wù)號(hào)函數(shù)os_running_task_id主要用于獲得當(dāng)前運(yùn)行任務(wù)的任務(wù)號(hào)。其函數(shù)原型如下:charos_running_task_id(void);其中,當(dāng)前任務(wù)號(hào)函數(shù)os_running_task_id的返回值表示當(dāng)前任務(wù)的任務(wù)號(hào)。使用函數(shù)os_delete_task的程序示例如下:voidtask_os_running_taskid(void)_task_2{unsignedcharrid;rid=os_running_task_id();……}31第三十一頁(yè),共五十四頁(yè),2022年,8月28日(5)發(fā)送信號(hào)函數(shù)os_send_signal發(fā)送信號(hào)函數(shù)os_send_signal主要用于向一個(gè)任務(wù)發(fā)送信號(hào)。其函數(shù)原型如下:
charos_send_signal(unsignedchartaskid);其中,參數(shù)taskid表示接收信號(hào)的任務(wù)號(hào)。發(fā)送信號(hào)函數(shù)os_send_signal如果返回0,則表示信號(hào)發(fā)送成功,如果返回-1,則表示指向的任務(wù)不存在。發(fā)送信號(hào)函數(shù)os_send_signal在向taskid所指定的任務(wù)發(fā)送信號(hào)時(shí),如果該任務(wù)正在等待信號(hào),則信號(hào)到達(dá)后,任務(wù)再次執(zhí)行。如果任務(wù)正在執(zhí)行其他操作,則信號(hào)將被存儲(chǔ)在所訪問(wèn)的任務(wù)信號(hào)標(biāo)志中。32第三十二頁(yè),共五十四頁(yè),2022年,8月28日使用函數(shù)os_send_signal的程序示例如下:voidtask_os_sendsignal(void)_task_2{……os_send_signal(3); //向任務(wù)3發(fā)送信號(hào)……}33第三十三頁(yè),共五十四頁(yè),2022年,8月28日(6)等待函數(shù)os_wait等待函數(shù)os_wait主要用于暫停當(dāng)前任務(wù),等待一個(gè)或多個(gè)事件發(fā)生。其函數(shù)原型如下:charos_wait(unsignedcharevent_sel,unsignedcharticks,unsignedintdummy);其中,參數(shù)event_sel表示等待發(fā)生的事件??梢赃x擇的事件有如下幾種形式:
K_IVL:等待的時(shí)間間隔。
K_SIG:等待的信號(hào)。
K_TMO:超時(shí),即等待的時(shí)間到。
這些事件可以單獨(dú)使用,也可以在一起組合使用,示例如下:
event_sel=K_TMO|K_IVL;
event_sel=K_SIG|K_IVL;34第三十四頁(yè),共五十四頁(yè),2022年,8月28日(7)等待函數(shù)os_wait1等待函數(shù)os_wait1主要用于暫停當(dāng)前任務(wù),等待信號(hào)的到來(lái)。其函數(shù)原型如下:
charos_wait1(unsignedcharevent_sel);其中,參數(shù)event_sel表示等待發(fā)生的事件,其不同于os_wait函數(shù),只能設(shè)置為K_SIG。等待函數(shù)os_wait1如果返回SIG_EVENT,則表示信號(hào)被成功接受;如果返回NOT_OK,則表示該函數(shù)中所設(shè)置的event_sel參數(shù)無(wú)效。35第三十五頁(yè),共五十四頁(yè),2022年,8月28日(8)等待函數(shù)os_wait2等待函數(shù)os_wait2主要用于暫停當(dāng)前任務(wù),等待一個(gè)或多個(gè)事件發(fā)生。其函數(shù)原型如下
charos_wait2(unsignedcharevent_sel,unsignedcharticks);其中,參數(shù)event_sel表示等待發(fā)生的事件。可以選擇的事件有如下幾種形式。K_IVL:等待的時(shí)間間隔。K_SIG:等待的信號(hào)。K_TMO:等待的時(shí)間到。這些事件可以單獨(dú)使用,也可以在一起組合使用,示例如下:event_sel=K_TMO|K_IVL;event_sel=K_SIG|K_IVL;36第三十六頁(yè),共五十四頁(yè),2022年,8月28日(9)啟動(dòng)任務(wù)函數(shù)os_create_task啟動(dòng)任務(wù)函數(shù)os_create_task主要用于啟動(dòng)已定義的由task_id說(shuō)明的任務(wù),此任務(wù)根據(jù)RTX51運(yùn)行規(guī)則,標(biāo)記為就緒,并準(zhǔn)備執(zhí)行。
charos_create_task(unsignedchartask_id);如果任務(wù)成功啟動(dòng),此函數(shù)返回0值;如果沒(méi)有task_id說(shuō)明的任務(wù),則返回-137第三十七頁(yè),共五十四頁(yè),2022年,8月28日10.2.4RTX51的任務(wù)調(diào)度方法RTX51實(shí)時(shí)多任務(wù)操作系統(tǒng)的程序結(jié)構(gòu)與標(biāo)準(zhǔn)單進(jìn)程C51語(yǔ)言程序不一樣,RTX51不要求程序中一定要有一個(gè)main函數(shù),它會(huì)自動(dòng)地從任務(wù)0(task0)開(kāi)始執(zhí)行。如果程序有main函數(shù),那么就必須用RTX51Tiny的os_creat_task函數(shù)或RTX51FULL的os_start_system函數(shù)手工啟動(dòng)RTX51。具體的程序運(yùn)行方法有下面幾種:38第三十八頁(yè),共五十四頁(yè),2022年,8月28日1.RTX51的輪轉(zhuǎn)式任務(wù)調(diào)度方法RTX51可以實(shí)現(xiàn)多任務(wù)的輪轉(zhuǎn)調(diào)度,并允許“準(zhǔn)并行”地執(zhí)行多個(gè)循環(huán)或任務(wù)。任務(wù)不是同時(shí)執(zhí)行,而是以不同的時(shí)間片輪轉(zhuǎn)調(diào)度執(zhí)行。RTX-51將可用的CPU時(shí)間劃分成若干時(shí)間片,為每個(gè)任務(wù)指定一個(gè)時(shí)間片,每個(gè)任務(wù)允許在預(yù)先規(guī)定的一個(gè)時(shí)間片內(nèi)執(zhí)行。然后,RTX51切換到另一個(gè)就緒的任務(wù),使這個(gè)任務(wù)也在規(guī)定的一個(gè)時(shí)間片內(nèi)執(zhí)行。時(shí)間片是很短的,通常是幾個(gè)毫秒。因此,任務(wù)看起來(lái)是同時(shí)執(zhí)行的。RTX51使用8051硬件定時(shí)器產(chǎn)生中斷的定時(shí)程序,產(chǎn)生周期性的中斷用于驅(qū)動(dòng)RTX51的時(shí)鐘。39第三十九頁(yè),共五十四頁(yè),2022年,8月28日下面的例子是一個(gè)簡(jiǎn)單的輪轉(zhuǎn)任務(wù)調(diào)度的RTX51應(yīng)用程序。這個(gè)程序中的兩個(gè)任務(wù)是簡(jiǎn)單的計(jì)數(shù)器循環(huán)。RTX51開(kāi)始執(zhí)行任務(wù)job0。在任務(wù)job0里啟動(dòng)job1的任務(wù)。在任務(wù)job0的時(shí)間片執(zhí)行完后RTX51切換到j(luò)ob1。job1時(shí)間片執(zhí)行完后,RTX51又切換回job0,這個(gè)過(guò)程無(wú)限地重復(fù)。40
#include<rtx51tny.h>intcounter0;
intcounter1;
voidjob0(void)_task_0{
os_create_task(1);//啟動(dòng)任務(wù)1//while(1){counter0++;
}}voidjob1(void)_task_1{while(1){counter1++;
}}第四十頁(yè),共五十四頁(yè),2022年,8月28日
2.RTX51的事件任務(wù)調(diào)度方法事件程序調(diào)度方法可以用os_wait函數(shù)通知RTX51,讓它執(zhí)行下一個(gè)任務(wù),而不是等待一個(gè)任務(wù)的時(shí)間片到期。這個(gè)函數(shù)會(huì)掛起當(dāng)前正在執(zhí)行的任務(wù),等待一個(gè)指定的事件發(fā)生。在這段時(shí)間內(nèi),可以執(zhí)行任意數(shù)量的其他任務(wù)。41第四十一頁(yè),共五十四頁(yè),2022年,8月28日(1)在RTX51中使用超時(shí)調(diào)度任務(wù)在os_wait函數(shù)中最簡(jiǎn)單的等待事件是一個(gè)RTX51時(shí)鐘的超時(shí)周期。這個(gè)類型的事件可以在要求延時(shí)的任務(wù)中使用。下面的例子顯示了如何使用os_wait函數(shù)延時(shí),以允許另一個(gè)任務(wù)執(zhí)行。42#include<rtx51tny.h>intcounter0;intcounter1;voidjob0(void)_task_0{/*創(chuàng)建任務(wù)1*/
os_create_task(1);while(1){counter0++;/*更新計(jì)數(shù)器*//*暫停3個(gè)時(shí)鐘*/os_wait(K_TMO,3,0);}}voidjob1(void)_task_1{while(1){/*更新計(jì)數(shù)器*/counter1++;/*暫停5個(gè)時(shí)鐘*/os_wait(K_TMO,5,0);}}第四十二頁(yè),共五十四頁(yè),2022年,8月28日在上面的例子中job0任務(wù)中使能任務(wù)job1。在counter0加1后job0調(diào)用os_wait函數(shù),等待3個(gè)時(shí)鐘滴答。這時(shí),RTX51切換到另一個(gè)任務(wù)job1。在job1的counte1加1后,也調(diào)用os_wait函數(shù),暫停5個(gè)時(shí)鐘滴答。此時(shí),RTX51沒(méi)有其他任務(wù)要執(zhí)行,因此它進(jìn)入一個(gè)空閑的循環(huán),等待3個(gè)時(shí)鐘滴答,然后繼續(xù)執(zhí)行job0。這個(gè)例子的結(jié)果是counter0每3個(gè)時(shí)鐘滴答加1,而counter1每5個(gè)時(shí)鐘滴答加1。43第四十三頁(yè),共五十四頁(yè),2022年,8月28日(2)在RTX51中使用信號(hào)調(diào)度任務(wù)可以用os_wait函數(shù)暫停一個(gè)任務(wù),等待另一個(gè)任務(wù)的信號(hào)。它可以協(xié)調(diào)兩個(gè)或多個(gè)任務(wù)。等待一個(gè)信號(hào)的操作如下:如果一個(gè)任務(wù)要等待一個(gè)信號(hào),而且信號(hào)標(biāo)志是0,則任務(wù)會(huì)被掛起,直到收到信號(hào)。如果信號(hào)標(biāo)志在任務(wù)查詢信號(hào)時(shí)已經(jīng)是1,則標(biāo)志會(huì)被清除并繼續(xù)執(zhí)行任務(wù)。請(qǐng)看下面的例子:44第四十四頁(yè),共五十四頁(yè),2022年,8月28日
#include<rtx51tny.h>intcounter0;intcounter1;voidjob0(void)_task_0{os_create_task(1);/*任務(wù)1準(zhǔn)備就緒*/while(1){if(++counter0==0)/*更新計(jì)數(shù)器*/os_send_signal(1);/*給任務(wù)1發(fā)信號(hào)*/}}voidjob1(void)_task_1{while(1){os_wait(K_SIG,0,0);/*等待一個(gè)信號(hào)*/counter1++;/*更新計(jì)數(shù)器*/}}45第四十五頁(yè),共五十四頁(yè),2022年,8月28日在上面的例子中,job0的counter0不斷加1,當(dāng)counter0溢出為0時(shí)job0發(fā)送一個(gè)信號(hào)到j(luò)ob1。job1等待從job0任務(wù)接收到一個(gè)信號(hào)時(shí),counter1加1,然后再次等待另一個(gè)信號(hào)。RTX51將job1標(biāo)記為就緒態(tài),直到RTX51到下一個(gè)時(shí)鐘滴答后job1才會(huì)啟動(dòng)。46第四十六頁(yè),共五十四頁(yè),2022年,8月28日3.優(yōu)先級(jí)和搶先RTX51允許給任務(wù)指定優(yōu)先級(jí)。當(dāng)高優(yōu)先級(jí)的任務(wù)可執(zhí)行時(shí),會(huì)中斷低優(yōu)先級(jí)的任務(wù),或比低優(yōu)先級(jí)的任務(wù)搶先執(zhí)行。這就叫做搶先式的多任務(wù)或就叫搶先(RTX51Tiny不支持搶先和優(yōu)先級(jí))。優(yōu)先級(jí)可以從0~3,默認(rèn)情況下,所有任務(wù)的優(yōu)先級(jí)都是0,這是最低的優(yōu)先級(jí)??梢孕薷纳厦鎗ob1的函數(shù)聲明,使它的優(yōu)先級(jí)比job0高。下面的例子顯示如何將job1的優(yōu)先級(jí)定義為1。47第四十七頁(yè),共五十四頁(yè),2022年,8月28日
voidjob1(void)_task_1_priority_1{while(1){os_wait(K_SIG,0,0);/*等待一個(gè)信號(hào)*/counter1++;/*更新計(jì)數(shù)器*/}}現(xiàn)在,無(wú)論何時(shí)job0發(fā)送一個(gè)信號(hào)到j(luò)ob1,job1都會(huì)立即啟動(dòng)。48第四十八頁(yè),共五十四頁(yè),2022年,8月28日任務(wù)管理所定義的每個(gè)RTX51Tiny的任務(wù)可以處于多種不同狀態(tài)中的一種。RTX51Tiny內(nèi)核為每個(gè)任務(wù)維持正確的狀態(tài)。表10-3是對(duì)各種狀態(tài)的解釋。49表10-3各種任務(wù)狀態(tài)的解釋狀態(tài)說(shuō)
明Running當(dāng)前正在執(zhí)行的任務(wù)處于Running態(tài)。在同一時(shí)間只能運(yùn)行一個(gè)任務(wù)Ready等待執(zhí)行的任務(wù)處于Ready態(tài)。當(dāng)前的Running(運(yùn)行的)任務(wù)處理完成后,RTX啟動(dòng)下一個(gè)在Ready態(tài)的任務(wù)。Waiting等待時(shí)間的任務(wù)處于Waiting態(tài)。如果任務(wù)等待的事件發(fā)生,則任務(wù)進(jìn)入Ready態(tài)。Deleted沒(méi)有啟動(dòng)的任務(wù)都處于Deleted狀態(tài)Timeout由于輪轉(zhuǎn)超時(shí)而中斷的任務(wù)處于Timeout狀態(tài)。這個(gè)狀態(tài)相當(dāng)于Ready第四十九頁(yè),共五十四頁(yè),2022年,8月28日10.3RTX精簡(jiǎn)版例程下面這個(gè)例子程序使用RTX-51Tiny控制3個(gè)任務(wù)循環(huán)執(zhí)行。在每項(xiàng)任務(wù)程序中執(zhí)行的是增量計(jì)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 同數(shù)連加解題策略
- 《GBT 35148-2017 石油天然氣工業(yè) 井下工具 完井工具附件》專題研究報(bào)告
- 《GB-T 15472-2012失真度測(cè)量?jī)x通 用規(guī)范》專題研究報(bào)告
- 《GB-T 25460-2010面向制造業(yè)信息化的ASP平臺(tái)功能體系結(jié)構(gòu)》專題研究報(bào)告
- 《GBT 33237-2016 光纖拉絲用石英玻璃把持管》專題研究報(bào)告
- 《AQ-T 2050.2-2016金屬非金屬礦山安全標(biāo)準(zhǔn)化規(guī)范 地下礦山實(shí)施指南》專題研究報(bào)告
- 2026年烏魯木齊職業(yè)大學(xué)單招職業(yè)傾向性測(cè)試題庫(kù)及參考答案詳解一套
- 水利工程履約保證金擔(dān)保協(xié)議
- 智能微電網(wǎng)運(yùn)維師崗位招聘考試試卷及答案
- 珠寶行業(yè)珠寶鑒定高級(jí)技師崗位招聘考試試卷及答案
- 項(xiàng)目分包制合同范本
- (2026.01.01施行)《生態(tài)環(huán)境監(jiān)測(cè)條例》解讀與實(shí)施指南課件
- 2025年及未來(lái)5年市場(chǎng)數(shù)據(jù)中國(guó)廢舊輪胎循環(huán)利用市場(chǎng)深度分析及投資戰(zhàn)略咨詢報(bào)告
- 2025天津大學(xué)管理崗位集中招聘15人考試筆試備考題庫(kù)及答案解析
- 學(xué)堂在線 批判性思維-方法和實(shí)踐 章節(jié)測(cè)試答案
- GB/T 44971-2024土壤硒含量等級(jí)
- 高中英語(yǔ)語(yǔ)法專項(xiàng) 詞性轉(zhuǎn)換(構(gòu)詞法)練習(xí)試題高考例句
- 合成生物學(xué)與基因回路課件
- 專題十-復(fù)合場(chǎng)課件
- 智慧樹(shù)知到《走進(jìn)故宮》2019期末考試答案
- 樂(lè)隊(duì)指揮教案
評(píng)論
0/150
提交評(píng)論