




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第1010章章 rtx51rtx51實時操作系統實時操作系統 操作系統基本概念操作系統基本概念 rtx51rtx51系統特點系統特點 rtx51rtx51的程序結構的程序結構 rtx51rtx51的功能函數的功能函數 rtx51rtx51的任務調度的任務調度 rtx51rtx51的系統配置的系統配置 rtx51rtx51的應用舉例的應用舉例10.1 10.1 操作系統基本概念操作系統基本概念10.1.110.1.1 前后臺系統前后臺系統 前后臺系統的組成:前臺前后臺系統的組成:前臺和后臺程序和后臺程序 后臺:后臺:是一個無限循環的是一個無限循環的應用程序,循環中調用相應用程序,循環中調用相應
2、的任務函數完成相應的應的任務函數完成相應的操作,各個任務依次運行,操作,各個任務依次運行,沒有調度,運行的次序不沒有調度,運行的次序不能改變。能改變。 前臺:前臺:是中斷服務程序,是中斷服務程序,處理異步事件。處理異步事件。適用情形:適用情形:一般不復雜且實時性要求不高的小系統很適合采用前后臺系統,例如微波爐、電話機、玩具等。在另外一些基于省電的應用中,由于平時微處理器處在停機狀態,所有的事都靠中斷服務來完成,因此也常常采用前后臺系統模式。10.1.2 10.1.2 操作系統操作系統 操作系統(操作系統(operating systemoperating system,簡稱,簡稱osos)是計
3、算機中)是計算機中最基本的程序。操作系統負責計算機系統中全部軟、硬資最基本的程序。操作系統負責計算機系統中全部軟、硬資源的分配以及回收、控制與協調等并發的活動;操作系統源的分配以及回收、控制與協調等并發的活動;操作系統提供用戶接口,使用戶獲得良好的工作環境;操作系統為提供用戶接口,使用戶獲得良好的工作環境;操作系統為用戶擴展新的系統功能提供軟件平臺。用戶擴展新的系統功能提供軟件平臺。 操作系統的操作系統的主要包括四大主要包括四大功能:功能:處理機管理:解決處理機管理:解決cpucpu的分時復用。的分時復用。存儲管理:配合存儲管理:配合cpucpu調度內存。調度內存。設備管理:分配外設的使用,包
4、括獨享、共享和虛擬。設備管理:分配外設的使用,包括獨享、共享和虛擬。軟件資源管理:解決程序和信息的存取和管理等問題。軟件資源管理:解決程序和信息的存取和管理等問題。 實時操作系統(實時操作系統(rtosrtos)是指當外界事件或數據產生時,)是指當外界事件或數據產生時,能夠接受并以能夠接受并以足夠快的速度足夠快的速度予以處理,其處理的結果又能在予以處理,其處理的結果又能在規定的時間規定的時間之內來控制生產過程或對處理系統作出快速響應,之內來控制生產過程或對處理系統作出快速響應,并控制所有實時任務協調一致運行的操作系統。并控制所有實時任務協調一致運行的操作系統。 用戶的應用程序是運行于用戶的應用
5、程序是運行于rtosrtos之上的各個任務,之上的各個任務,rtosrtos根根據各個任務的要求,進行資源(包括存儲器、外設等)管理、據各個任務的要求,進行資源(包括存儲器、外設等)管理、消息管理、任務調度和異常處理等工作。消息管理、任務調度和異常處理等工作。 實時多任務操作系統,以分時方式運行多個任務,看上實時多任務操作系統,以分時方式運行多個任務,看上去好像是多個任務去好像是多個任務“同時同時”運行。任務之間的切換應當以優運行。任務之間的切換應當以優先級為根據,只有具有先級為根據,只有具有優先服務方式優先服務方式的的rtosrtos才是真正的實時才是真正的實時操作系統,而時間分片方式和協作
6、方式的操作系統,而時間分片方式和協作方式的rtosrtos并不是真正的并不是真正的“實時實時”。10.1.3 10.1.3 實時操作系統實時操作系統10.1.4 10.1.4 臨界區臨界區 臨界資源:任何時候都只允許一個任務訪問的資源。臨界資源:任何時候都只允許一個任務訪問的資源。 臨界區或臨界段:用于訪問臨界資源的代碼段。臨界區或臨界段:用于訪問臨界資源的代碼段。 臨界代碼段臨界代碼段不允許多個并發任務交叉執行不允許多個并發任務交叉執行,否則會產,否則會產生嚴重后果,比如進入中斷后的現場保護代碼等。生嚴重后果,比如進入中斷后的現場保護代碼等。 為確保臨界區代碼的安全執行,在進入臨界區之前要為
7、確保臨界區代碼的安全執行,在進入臨界區之前要關中斷,而臨界區代碼執行完以后要立即開中斷關中斷,而臨界區代碼執行完以后要立即開中斷 程序運行時可使用的軟、硬件環境統稱為資源。資源程序運行時可使用的軟、硬件環境統稱為資源。資源可以是輸入可以是輸入/ /輸出設備,例如打印機、鍵盤和顯示器;資輸出設備,例如打印機、鍵盤和顯示器;資源也可以是一個變量、一個結構或一個數組等。源也可以是一個變量、一個結構或一個數組等。 共享資源就是指可以被一個以上任務使用的資源。為共享資源就是指可以被一個以上任務使用的資源。為防止數據被破壞,每個任務在與共享資源打交道時,必須防止數據被破壞,每個任務在與共享資源打交道時,必
8、須獨占該資源,這叫獨占該資源,這叫互斥互斥。10.1.5 10.1.5 資源與共享資源資源與共享資源 任務,也稱為線程,是一個簡單的程序。一般地,每個任務,也稱為線程,是一個簡單的程序。一般地,每個任務都是一個無限的循環。任務都是一個無限的循環。 任務有五種狀態:休眠態、就緒態、運行態、掛起態任務有五種狀態:休眠態、就緒態、運行態、掛起態(等待某一事件發生)和被中斷態。任何時刻,一個任務都(等待某一事件發生)和被中斷態。任何時刻,一個任務都處于這五種狀態之一的狀態下。處于這五種狀態之一的狀態下。 休眠態休眠態相當于該任務駐留在內存中,但并不被多任務內相當于該任務駐留在內存中,但并不被多任務內核
9、所調度。核所調度。就緒態就緒態意味著該任務已經準備好,可以運行了,意味著該任務已經準備好,可以運行了,但由于該任務的優先級比正在運行的任務的優先級低,還暫但由于該任務的優先級比正在運行的任務的優先級低,還暫不能運行不能運行 。運行態運行態的任務是指該任務掌握了的任務是指該任務掌握了cpucpu的控制權,的控制權,正在運行。正在運行。掛起態掛起態指該任務在等待,等待某一事件的發生。指該任務在等待,等待某一事件的發生。被中斷狀態被中斷狀態是指,發生中斷時,是指,發生中斷時,cpucpu提供相應的中斷服務,提供相應的中斷服務,原來正在運行的任務暫不能運行,就進入了被中斷狀態。原來正在運行的任務暫不能
10、運行,就進入了被中斷狀態。 10.1.6 10.1.6 任務任務10.1.7 10.1.7 內核與任務切換內核與任務切換內核內核 內核是操作系統最基本的部分。多任務系統中,內核內核是操作系統最基本的部分。多任務系統中,內核負責管理各個任務,或者說為每個任務分配負責管理各個任務,或者說為每個任務分配cpucpu時間,并且時間,并且內核決定一個程序在什么時候對某部分硬件操作多長時間。內核決定一個程序在什么時候對某部分硬件操作多長時間。內核負責任務之間的通信,它提供的基本服務是任務切換。內核負責任務之間的通信,它提供的基本服務是任務切換。任務切換任務切換 當多任務內核決定運行另外的任務時,保存正在運
11、行當多任務內核決定運行另外的任務時,保存正在運行任務的當前狀態,即保存任務的當前狀態,即保存cpucpu寄存器中的全部內容。這些內寄存器中的全部內容。這些內容保存在任務的當前狀態保存區,也就是任務自己的棧區容保存在任務的當前狀態保存區,也就是任務自己的棧區之中。入棧工作完成以后,就把下一個將要運行的任務的之中。入棧工作完成以后,就把下一個將要運行的任務的當前狀態從任務的棧中重新裝入當前狀態從任務的棧中重新裝入cpucpu的寄存器,并開始下一的寄存器,并開始下一個任務的運行。這個過程就稱為任務切換。個任務的運行。這個過程就稱為任務切換。 多任務切換示意圖多任務切換示意圖 調度是內核的主要職責之一
12、,調度就是決定該輪到調度是內核的主要職責之一,調度就是決定該輪到哪個任務運行了。任務的調度方式有基于時間片輪轉的哪個任務運行了。任務的調度方式有基于時間片輪轉的調度和基于優先級的調度。多數實時系統是基于優先級調度和基于優先級的調度。多數實時系統是基于優先級調度法的。基于優先級的調度法指調度法的。基于優先級的調度法指cpucpu總是讓處于就緒總是讓處于就緒態的優先級最高的任務先運行。至于何時讓高優先級任態的優先級最高的任務先運行。至于何時讓高優先級任務掌握務掌握cpucpu的使用權,有兩種不同的情況。的使用權,有兩種不同的情況。 占先式調度;非占先式調度。占先式調度;非占先式調度。10.1.8
13、10.1.8 調度調度占先式調度占先式調度 任何時候具有最高優先級且已就緒的任務先執行。一任何時候具有最高優先級且已就緒的任務先執行。一個正在執行的任務放棄處理器的條件為:自愿放棄處理器個正在執行的任務放棄處理器的條件為:自愿放棄處理器(等待資源或執行完畢);有高優先級任務啟動,該高優(等待資源或執行完畢);有高優先級任務啟動,該高優先級任務將搶占其執行。當一個運行著的任務使一個比它先級任務將搶占其執行。當一個運行著的任務使一個比它優先級更高的任務進入了就緒狀態時,當前任務的優先級更高的任務進入了就緒狀態時,當前任務的cpucpu使使用權就被剝奪了,或者說被掛起了,那個高優先級的任務用權就被剝
14、奪了,或者說被掛起了,那個高優先級的任務立刻得到了立刻得到了cpucpu的控制權。如果是中斷服務子程序是一個的控制權。如果是中斷服務子程序是一個高優先級的任務進入了就緒態,則中斷完成時,中斷了的高優先級的任務進入了就緒態,則中斷完成時,中斷了的任務被掛起,優先級高的那個任務開始運行。任務被掛起,優先級高的那個任務開始運行。 占先式調度的優點是實時性好、反應快,調度算法相占先式調度的優點是實時性好、反應快,調度算法相對簡單,可優先保證高優先級任務的時間約束,其缺點是對簡單,可優先保證高優先級任務的時間約束,其缺點是上下文切換多上下文切換多。非占先式調度非占先式調度 非占先式調度要求每個任務自我放
15、棄非占先式調度要求每個任務自我放棄cpucpu的所有權。的所有權。這種方式下,異步事件還是由中斷服務來處理。中斷服務這種方式下,異步事件還是由中斷服務來處理。中斷服務可以使一個高優先級的任務由掛起狀態變為就緒狀態,但可以使一個高優先級的任務由掛起狀態變為就緒狀態,但中斷服務以后控制權還是回到原來被中斷了的那個任務,中斷服務以后控制權還是回到原來被中斷了的那個任務,直到該任務主動放棄直到該任務主動放棄cpucpu的使用權時,那個高優先級的任的使用權時,那個高優先級的任務才能獲得務才能獲得cpucpu的使用權。的使用權。 非占先式調度的優點是上下文切換少,幾乎不需要使非占先式調度的優點是上下文切換
16、少,幾乎不需要使用信號量保護共享數據;缺點是處理器有效資源利用率低,用信號量保護共享數據;缺點是處理器有效資源利用率低,任務級響應時間不確定,可調度性不好。任務級響應時間不確定,可調度性不好。10.1.9 10.1.9 函數的可重入性函數的可重入性 可重入可重入(reentrant)(reentrant)型函數:是指可以被多個任務并發使型函數:是指可以被多個任務并發使用,而數據不會遭到破壞的函數。用,而數據不會遭到破壞的函數。 可重入型函數特征:可重入型函數特征:只使用局部變量,變量保存在只使用局部變量,變量保存在cpucpu寄存器或堆棧中,寄存器或堆棧中,可以在任意時刻被中斷,再重新恢復運行
17、時,數據不可以在任意時刻被中斷,再重新恢復運行時,數據不會被破壞;會被破壞;若使用全局變量,則需滿足互斥條件。若使用全局變量,則需滿足互斥條件。可重入型函數實例可重入型函數實例void func1(int* x, int* y) int temp;temp= *x;*x = *y;*y = temp;不可重入型函數清單不可重入型函數清單static int temp;void func2(int* x, int* y) temp = *x;*x = *y;*y = temp; 不可重入型函數運行示意圖不可重入型函數運行示意圖 使用以下技術之一可使函數使用以下技術之一可使函數func2()fun
18、c2()具有可重入性:具有可重入性:(1) (1) 將將temptemp定義為局部變量;定義為局部變量;(2) (2) 在調用前,禁止中斷,執行完畢后再開中斷;在調用前,禁止中斷,執行完畢后再開中斷;(3) (3) 在調用過程中,應用信號量獨占使用該函數。在調用過程中,應用信號量獨占使用該函數。10.1.10 10.1.10 信號量信號量 信號量信號量 信號與信號量在英文中都是同一個詞semaphore,并不加以區別。是一種通信機制。主要用來實現任務間同步以及標識某類資源的可用個數。 兩種類型:兩種類型: 只取0和1兩個值的二值(binary)信號量,這種信號量也稱為信號; 由若干位組合而成的
19、計數式(counting)信號量,一般有8位、16位或者32位等若干種,具體是多少位取決于內核。 作用:作用: 滿足互斥條件,實現共享資源的獨占使用; 標志某事件的發生; 使兩個任務的行為同步。(1)初始化信號量,也可稱為建立初始化信號量,也可稱為建立(create)(create)信號量信號量。信號量初始化時,要給信號量賦初值,等待信號量的任務列表應清空。(2)等信號或申請信號量,可稱做掛起等信號或申請信號量,可稱做掛起(pend)(pend)。對于執行等待信號量的任務來說,若該信號量有效,則信號量值減1,任務繼續執行;若信號量值為0,則任務繼續被掛起。若內核允許定義等待超時,則超時后,該任
20、務轉入就緒,同時返回錯誤代碼以示發生了超時錯誤。(3)給信號,可稱做發信號給信號,可稱做發信號(post)(post)。若沒有任務等待該信號量,則信號量的值僅簡單加1;若只有一個任務等待該信號量,則該任務轉入就緒狀態,信號量的值不加1;若有多個任務等待信號量,至于誰先得到信號量,那就要看內核是如何調度的了。一般有兩種可能:一是按優先級原則,等待信號量的任務中優先級最高的先得到;二是按先進先出的原則,最早開始等待信號量的那個任務先得到。工作原理工作原理 所謂死鎖,是指各并發任務彼此等待對方所擁有的資源,所謂死鎖,是指各并發任務彼此等待對方所擁有的資源,且這些并發任務在得到對方的資源之前不會釋放自
21、己所擁有且這些并發任務在得到對方的資源之前不會釋放自己所擁有的資源,從而造成大家都想得到資源而又都得不到資源,各的資源,從而造成大家都想得到資源而又都得不到資源,各并發任務不能繼續向前推進的狀態。并發任務不能繼續向前推進的狀態。 最簡單的防止死鎖發生的方法有兩種:最簡單的防止死鎖發生的方法有兩種:1. 1. 讓每個任務先得到全部需要的資源,再進行下一步工作。讓每個任務先得到全部需要的資源,再進行下一步工作。2. 2. 讓每個任務用同樣的順序去申請多個資源,釋放資源時使讓每個任務用同樣的順序去申請多個資源,釋放資源時使用相反的順序。用相反的順序。10.1.11 10.1.11 死鎖死鎖10.1.
22、12 10.1.12 消息隊列消息隊列 消息用于兩個任務之間的通信,消息隊列是保存消息消息用于兩個任務之間的通信,消息隊列是保存消息的容器。通過內核提供的服務,任務或中斷服務子程序可的容器。通過內核提供的服務,任務或中斷服務子程序可以將一個消息放入消息隊列。同樣,一個或多個任務可以以將一個消息放入消息隊列。同樣,一個或多個任務可以通過內核服務從消息隊列中得到消息。通過內核服務從消息隊列中得到消息。 通常,先進入消息隊列的消息先給任務,遵循先進先通常,先進入消息隊列的消息先給任務,遵循先進先出原則(出原則(fifofifo)。)。 內核提供的典型消息隊列服務如下:內核提供的典型消息隊列服務如下:
23、1.1.消息隊列初始化,隊列初始化時總是清為空;消息隊列初始化,隊列初始化時總是清為空;2.2.放一則消息到隊列中去(放一則消息到隊列中去(postpost););3.3.等待一則消息的到來(等待一則消息的到來(pendpend););4.4.無等待取得消息。如果隊列中有消息則任務可以取得消無等待取得消息。如果隊列中有消息則任務可以取得消息,消息從隊列中取走;但如果此時隊列為空,則內核不息,消息從隊列中取走;但如果此時隊列為空,則內核不將該任務掛起,只是用特別的返回代碼通知調用者,隊列將該任務掛起,只是用特別的返回代碼通知調用者,隊列中沒有消息。中沒有消息。 中斷是指計算機在執行程序的過程中,
24、當出現異常情中斷是指計算機在執行程序的過程中,當出現異常情況或特殊請求時,計算機停止現行程序的運行,轉向對這況或特殊請求時,計算機停止現行程序的運行,轉向對這些異常情況或特殊請求的處理,處理結束后再返回到以下些異常情況或特殊請求的處理,處理結束后再返回到以下部分:部分:1.1.在前后臺系統中,程序回到后臺程序;在前后臺系統中,程序回到后臺程序;2.2.對非占先式內核而言,程序回到被中斷了的任務;對非占先式內核而言,程序回到被中斷了的任務;3.3.對占先式內核而言,讓進入就緒態的優先級最高的任務對占先式內核而言,讓進入就緒態的優先級最高的任務開始運行。開始運行。10.1.13 10.1.13 中
25、斷中斷 時鐘節拍是特定的周期性中斷。這個中斷可以看作時鐘節拍是特定的周期性中斷。這個中斷可以看作是系統心臟的脈動。中斷之間的時間間隔取決于不同應是系統心臟的脈動。中斷之間的時間間隔取決于不同應用,是機器周期的一個整數倍,一般為用,是機器周期的一個整數倍,一般為1010200ms200ms,視,視系統的復雜性和對實時性的要求而定。內核對系統的復雜性和對實時性的要求而定。內核對任務的切任務的切換和延時換和延時等操作都是基于時鐘節拍的。時鐘節拍的頻率等操作都是基于時鐘節拍的。時鐘節拍的頻率越快,系統的額外開銷就越大。越快,系統的額外開銷就越大。10.1.14 10.1.14 時鐘節拍時鐘節拍 rtx
26、51 rtx51是一款小巧的針對基于是一款小巧的針對基于80518051系列嵌入式系統的多任系列嵌入式系統的多任務實時操作系統。它的使用可以簡化比較復雜、有嚴格時間務實時操作系統。它的使用可以簡化比較復雜、有嚴格時間限制的軟件的設計過程。限制的軟件的設計過程。rtx51rtx51主要有兩個不同的可用版本:主要有兩個不同的可用版本: rtx5lfullrtx5lfull標準版標準版,既可以以循環(,既可以以循環(round round 一一robin robin )方)方式執行任務,也可以按式執行任務,也可以按4 4級任務優先級的方式切換不同優先級級任務優先級的方式切換不同優先級的任務。的任務。
27、標準版以并行方式工作,支持中斷管理,信號和消標準版以并行方式工作,支持中斷管理,信號和消息可以通過郵箱系統在不同任務之間傳遞。息可以通過郵箱系統在不同任務之間傳遞。 rtx5ltinyrtx5ltiny精簡版精簡版,是其標準版的一個子集。它可以很容,是其標準版的一個子集。它可以很容易地運行在易地運行在80518051的單芯片系統而不需要任何外部數據存儲器。的單芯片系統而不需要任何外部數據存儲器。通用性強,系統需求低,但功能上受到限制。通用性強,系統需求低,但功能上受到限制。它只支持循環它只支持循環方式和信號方式的任務切換,而不支持優先級方式的任務切方式和信號方式的任務切換,而不支持優先級方式的
28、任務切換。換。 keil ckeil c中自帶了中自帶了rtx5ltinyrtx5ltiny,以下只講解,以下只講解rtx5ltinyrtx5ltiny的內的內容,出現容,出現rtx51rtx51的地方默認為其精簡版的地方默認為其精簡版rtx51tinyrtx51tiny。10.2 rtx51 10.2 rtx51 系統特點系統特點 rtx51 rtx51 可以在所有的可以在所有的8051 8051 系列芯片上運行。用戶只系列芯片上運行。用戶只需要用標準的需要用標準的c c語言編寫語言編寫rtx51 rtx51 程序,然后用程序,然后用c51c51編譯器編編譯器編譯即可生成代碼。譯即可生成代碼
29、。 rtx51 rtx51 程序設計需要包含實時運行頭文件和必要的庫程序設計需要包含實時運行頭文件和必要的庫文件,并且要用文件,并且要用bl51 bl51 連接定位器來實現連接。連接定位器來實現連接。 在在keilkeil中,你只需要在目標選項的中,你只需要在目標選項的targettarget標簽中的標簽中的operatingoperating中選擇中選擇rtx-51 tinyrtx-51 tiny,在你的頭文件中加上,在你的頭文件中加上#include #include 即可。即可。 在在rtx51 tinyrtx51 tiny環境下生成代碼,需要用到下列工具:環境下生成代碼,需要用到下列工
30、具:c51c51編譯器編譯器bl51bl51連接連接/ /定位器定位器a51a51宏匯編器宏匯編器 此外,庫文件此外,庫文件rtx51tny.librtx51tny.lib必須存放在環境變量必須存放在環境變量c51libc51lib所指定的路徑下。所指定的路徑下。 rtx51 tinyrtx51 tiny版可以運行在版可以運行在80518051的單芯片嵌入式系統上,的單芯片嵌入式系統上,且不需要任何外部數據存儲器,但也不排斥應用程序訪問且不需要任何外部數據存儲器,但也不排斥應用程序訪問外部的數據存儲器。外部的數據存儲器。rtx51 tinyrtx51 tiny版本可以使用版本可以使用c51c5
31、1所支持所支持的所有存儲模式。所使用的存儲模式只影響應用對象的存的所有存儲模式。所使用的存儲模式只影響應用對象的存儲位置。儲位置。rtx51 tinyrtx51 tiny的系統變量和應用程序的堆棧區總是的系統變量和應用程序的堆棧區總是存儲在存儲在80518051的片內的片內ramram中(即中(即datadata和和idataidata)。)。典型的典型的rtx51 tinyrtx51 tiny應用程序一般運行于應用程序一般運行于smallsmall存儲模式下。存儲模式下。 rtx51 tinyrtx51 tiny版本使用了版本使用了80518051的定時器的定時器0 0和定時器和定時器0 0
32、的中的中斷信號。斷信號。sfrsfr中的全局中斷允許位或定時器中的全局中斷允許位或定時器0 0中斷屏蔽位都中斷屏蔽位都可能使可能使rtx51 tinyrtx51 tiny停止運行。因此,除非有特殊的應用目停止運行。因此,除非有特殊的應用目的,應該使定時器的,應該使定時器0 0的中斷始終開啟,以保證的中斷始終開啟,以保證rtx51 tinyrtx51 tiny的正常運行。的正常運行。 實時操作系統的性能參數對嵌入式系統的應用開發也實時操作系統的性能參數對嵌入式系統的應用開發也有著直接影響,有著直接影響,rtx51rtx51的性能參數如下表所示。的性能參數如下表所示。描述描述rtx51 tiny
33、版本任務數任務數16ram 需求需求7 byte data, 3(任務數) byte idata代碼要求代碼要求900 byte硬件要求硬件要求定時器0系統時鐘系統時鐘10065535周期中斷響應時間中斷響應時間20周期任務切換時間任務切換時間100700周期依賴于堆棧裝載10.3 rtx51 10.3 rtx51 的程序結構的程序結構 rtx51tiny rtx51tiny通過循環(通過循環(round-robinround-robin)方式來實現多任)方式來實現多任務,以達到多個無限循環或任務的準并行執行。這里的多務,以達到多個無限循環或任務的準并行執行。這里的多任務并不是真正同時執行的,
34、而是使用不同的時間片來執任務并不是真正同時執行的,而是使用不同的時間片來執行,即只是宏觀上的同時執行。它將可用的行,即只是宏觀上的同時執行。它將可用的cpucpu周期分成多周期分成多個時間片,由個時間片,由rtx51rtx51把這些時間片分配給每一個任務使用。把這些時間片分配給每一個任務使用。每個任務只能在預定的時間片里運行。然后,每個任務只能在預定的時間片里運行。然后,rtx51rtx51再切換再切換到另一個己經準備就緒的任務,讓它再執行一定的時間片。到另一個己經準備就緒的任務,讓它再執行一定的時間片。 時間片一般是比較短促的,一個時間片大約只有毫秒時間片一般是比較短促的,一個時間片大約只有
35、毫秒級時間。正是由于這個原因,在用戶看來,多個任務似乎級時間。正是由于這個原因,在用戶看來,多個任務似乎是在同時執行的。是在同時執行的。 rtx51 rtx51 利用了一個由利用了一個由80518051定時器中斷信號驅動的定時定時器中斷信號驅動的定時程序來實現控制。定時器產生的周期性中斷信號用來驅動程序來實現控制。定時器產生的周期性中斷信號用來驅動rtx51rtx51的定時節拍。的定時節拍。 rtx51rtx51與用戶程序中的與用戶程序中的mainmain函數是無關的。用戶程序函數是無關的。用戶程序中即使沒有中即使沒有main main 程序,程序,操作系統也會自動從設定的任務操作系統也會自動
36、從設定的任務0 0開始執行開始執行。如果用戶程序中已經有了。如果用戶程序中已經有了main main 函數,就必須函數,就必須用人工方式來啟動用人工方式來啟動rtx51rtx51。這對于。這對于rtx51 tinyrtx51 tiny版,可以調版,可以調用用os_create_taskos_create_task函數來完成函數來完成. . 例:例:使用使用rtx51rtx51的的round-robinround-robin任務方式實現兩個任務任務方式實現兩個任務的調度執行。程序中的兩個任務都是簡單的計數循環。的調度執行。程序中的兩個任務都是簡單的計數循環。#include int counte
37、r0;int counter1;void job0(void) _task_ 0os_create_task(1); /*任務任務l 己準備就緒己準備就緒*/while (1) /*無限循環無限循環*/ counter0+; /*更新計數值更新計數值counter0*/ void job1(void) _task_ 1while(1) /*無限循環無限循環*/counter1+; /*更新計數值更新計數值counter1*/10.4 rtx5110.4 rtx51的功能函數的功能函數 rtx51 rtx51精簡版支持的功能函數表精簡版支持的功能函數表 函數函數描述描述執行周期數執行周期數os_
38、create_task將任務移入執行隊列302os_delete_task執行隊列中移去某任務172os_send_signal發送一信號到某任務(從某任務調用)408(任務切換)316(快速任務切換)71(不含任務切換)os_clear_signal刪除一發送信號57isr_send_signal發送一信號到某任務(從中斷調用)46os_running_task_id返回當前執行的任務號os_wait等待某事件68(對未就緒信號)160(對未就緒消息)os_wait1等待某事件os_wait2等待某事件10.4.1 10.4.1 信號控制函數信號控制函數 isr_send_signal函數原
39、型函數原型 char isr_send_signal(unsigned char task_id);功能說明功能說明 發送一個信號到發送一個信號到task_idtask_id說明的任務。如果此任說明的任務。如果此任務已在等待一個信號,那么調用函數將使此任務就緒,準務已在等待一個信號,那么調用函數將使此任務就緒,準備執行。否則,信號將存儲在此任務的信號標志中。此函備執行。否則,信號將存儲在此任務的信號標志中。此函數只能從中斷函數中調用。數只能從中斷函數中調用。返返 回回 值值 如果執行成功,此函數返回如果執行成功,此函數返回0 0值;如果所指定的值;如果所指定的任務不存在,則返回任務不存在,則返
40、回-1 -1 。 os_clear_signal函數原型函數原型 char os_clear_signal(unsigned char task_id);功能說明功能說明 清除由清除由task_idtask_id說明的任務的信號說明的任務的信號返返 回回 值值 如果信號清除成功,此函數返回如果信號清除成功,此函數返回0 0值;如果所指定值;如果所指定的任務不存在,則返回的任務不存在,則返回-1-1 os_send_signal函數原型函數原型 char os_send_signal(unsigned char task_id);功能說明功能說明 發送一個信號到發送一個信號到task_idtas
41、k_id說明的任務。如果此任務說明的任務。如果此任務已在等待一個信號,那么調用函數將使此任務就緒,準備執已在等待一個信號,那么調用函數將使此任務就緒,準備執行。否則,信號將存儲在此任務的信號標志中。此函數只能行。否則,信號將存儲在此任務的信號標志中。此函數只能在任務函數中調用在任務函數中調用返返 回回 值值 如果執行成功,此函數返回如果執行成功,此函數返回0 0值;如果所指定的任值;如果所指定的任務不存在,則返回務不存在,則返回-1 -1 10.4.2 10.4.2 任務控制函數任務控制函數 os_create_task函數原型函數原型 char os_create_task(unsigned
42、 char task_id);功能說明功能說明 啟動已定義的由啟動已定義的由task_idtask_id說明的任務。此任務說明的任務。此任務根據根據rtx51rtx51運行規則,標記為就緒,并準備執行。運行規則,標記為就緒,并準備執行。返返 回回 值值 如果任務成功啟動,此函數返回如果任務成功啟動,此函數返回0 0值;如果沒值;如果沒有有task_idtask_id說明的任務,則返回說明的任務,則返回-1-1 os_delete_task函數原型函數原型 char os_delete_task(unsigned char task_id);功能說明功能說明 停止停止task_idtask_id
43、說明的任務,此任務將從任務表中說明的任務,此任務將從任務表中刪除。刪除。返返 回回 值值 如果任務成功啟動,此函數返回如果任務成功啟動,此函數返回0 0值;如果沒有值;如果沒有task_idtask_id說明的任務,則返回說明的任務,則返回-1-1。 os_running_task_id函數原型函數原型 char os_running_task_id(unsigned char task_id);功能說明功能說明 判斷當前執行任務的編號判斷當前執行任務的編號返返 回回 值值 返回當前正在執行的任務的編號,返回值為返回當前正在執行的任務的編號,返回值為0 01515。 10.4.3 10.4.3
44、 延時控制函數延時控制函數 os_wait函數原型函數原型 char os_wait( unsigned char event_sel, /*將要等待的事件*/ unsigned char tisks, /*將要等待的定時器時標數*/ unsigned char dummy ); /*未用參數*/ 功能說明功能說明 停止當前執行的任務,并等待一個或多個事件,如時間間停止當前執行的任務,并等待一個或多個事件,如時間間隔、超時、從另一個任務或中斷發出的信號等。參數隔、超時、從另一個任務或中斷發出的信號等。參數event_selevent_sel說明所說明所等待的一個事件或幾個事件的組合。事件種類如
45、下表所示。等待的一個事件或幾個事件的組合。事件種類如下表所示。 事件事件描述描述k_ivl定時器溢出k_sig收到信號k_tmo時間片超時rtx51rtx51的事件類別的事件類別os_waitos_wait函數的返回值表函數的返回值表 os_wait1 函數原型函數原型 char os_wait1(unsigned char event_sel);功能說明功能說明 暫停當前任務,等待一個事件的發生。它是暫停當前任務,等待一個事件的發生。它是os_waitos_wait函數的一個子集,不接受針對函數的一個子集,不接受針對os_waitos_wait函數提供的函數提供的全部事件。參數全部事件。參數
46、event_selevent_sel指定了等待的事件,它只能是指定了等待的事件,它只能是k_sigk_sig。返返 回回 值值 當信號事件發生時,任務就被允許執行,任務的當信號事件發生時,任務就被允許執行,任務的執行將恢復。返回用于識別事件、使任務重新啟動的常量執行將恢復。返回用于識別事件、使任務重新啟動的常量。 返回值返回值描述描述sig_event信號被接收tmo_event發生超時或事件間隔已過not_okevent_sel的值非法 os_wait2函數原型函數原型 char os_wait2( unsigned char event_sel, / /* *將要等待的事件將要等待的事件*
47、 */ / unsigned char tisks ); / /* *將要等待的定時器時標數將要等待的定時器時標數* */ /功能說明功能說明 與與os_waitos_wait相同,但是不需要相同,但是不需要dummydummy參數。參數。 返返 回回 值值 與與os_waitos_wait相同相同 10.5 rtx5110.5 rtx51的任務調度的任務調度 rtx51rtx51利用任務狀態來管理各個任務。用戶為利用任務狀態來管理各個任務。用戶為rtx51rtx51定定義的每個任務都會以各種狀態的某一種來運行。義的每個任務都會以各種狀態的某一種來運行。rtx51rtx51內內核為每個任務保留
48、了適當的狀態如下表所示。核為每個任務保留了適當的狀態如下表所示。rtx51rtx51的任務狀態表的任務狀態表 狀態狀態描述描述running運行狀態當前正在執行的任務,在任一時刻只能有一個任務處于運行狀態ready就緒狀態等待執行的任務,當前任務執行完后,接著執行就緒狀態任務waiting等待狀態等待某一事件的任務,如事件發生,任務進入就緒狀態deleted刪除狀態沒有啟動的任務time-out超時狀態與就緒狀態相似,放在round-robin中尚未執行的任務 rtx51 rtx51以以round-robinround-robin多任務方式執行程序,它支持多個多任務方式執行程序,它支持多個無限
49、循環或任務的無限循環或任務的準并行執行準并行執行。任務不是被同時執行,而是。任務不是被同時執行,而是以以分時的方式輪片執行分時的方式輪片執行。可用的。可用的cpucpu時鐘周期被分成多個時間時鐘周期被分成多個時間片,然后由片,然后由rtx51 rtx51 將這些時間片分配給各個任務。每個任務將這些時間片分配給各個任務。每個任務只允許在預定的時間片中執行,時間片用完時,只允許在預定的時間片中執行,時間片用完時,rtx51rtx51就切換就切換至另一個就緒的任務,繼續執行一段時間。時間片的具體長至另一個就緒的任務,繼續執行一段時間。時間片的具體長度可以用配置函數度可以用配置函數timesharin
50、g來定義。來定義。 如果遇到因為一個任務處于等待并且占用了時間片而暫如果遇到因為一個任務處于等待并且占用了時間片而暫時無法往下執行,可以調用系統函數時無法往下執行,可以調用系統函數os_wait來通知來通知rtx51rtx51,以便將當前的以便將當前的任務掛起任務掛起而提前執行另一任務。而提前執行另一任務。 r t x 5 1r t x 5 1 中 處 理 任 務 分 配 的 模 塊 稱 為 調 度 程 序中 處 理 任 務 分 配 的 模 塊 稱 為 調 度 程 序(schedulerscheduler)。調度程序驅動哪個任務運行是按照以下的規)。調度程序驅動哪個任務運行是按照以下的規則進行
51、的:則進行的:(1 1)如果發生以下情況時,當前運行的任務將被中斷:)如果發生以下情況時,當前運行的任務將被中斷: 調用調用os_waitos_wait函數,而所等待的事件未來到;函數,而所等待的事件未來到; 任務的執行時間已經超過所定義的任務的執行時間已經超過所定義的round-robinround-robin循環時循環時間間隔間間隔(2 2)如果發生以下情況時,另一個任務將被啟動:)如果發生以下情況時,另一個任務將被啟動: 已沒有正在執行的任務;已沒有正在執行的任務; 將要執行的任務處在就緒狀態或超時狀態。將要執行的任務處在就緒狀態或超時狀態。 10.6 rtx5110.6 rtx51的系
52、統配置的系統配置 編寫編寫rtx51rtx51程序需要包含程序需要包含rtx51tny.h rtx51tny.h 文件。在程序中,需文件。在程序中,需要用一個關鍵字要用一個關鍵字“_task_” _task_” 來聲明一個函數的任務屬性。來聲明一個函數的任務屬性。rtx51rtx51程序不需要程序不需要main main 函數。在進行連接處理時,會將函數。在進行連接處理時,會將啟動任啟動任務務0 0的執行所需要的代碼連接進來,作為開始執行的代碼。的執行所需要的代碼連接進來,作為開始執行的代碼。 用戶可以更改配置文件用戶可以更改配置文件conf_tny.a51conf_tny.a51中的以下幾個
53、參數:中的以下幾個參數: 系統定時器中斷所用的寄存器組系統定時器中斷所用的寄存器組 系統定時器的時間間隔系統定時器的時間間隔 round-robin round-robin的超時(的超時(time-outtime-out)值)值 內部數據存儲器的大小內部數據存儲器的大小 rtx5l rtx5l啟動后的自由堆棧大小啟動后的自由堆棧大小 以下是配置文件的部分內容:以下是配置文件的部分內容:;rtx51 ;rtx51 的硬件定時器的硬件定時器; ;用下面的用下面的equequ可預置可預置rtx51rtx51的定時器時間常數的定時器時間常數; ;用用8051 8051 定時器定時器0 0 作為控制軟件
54、的定時器作為控制軟件的定時器; ;定義定時器中斷用的寄存器組定義定時器中斷用的寄存器組int_regbank equ 1int_regbank equ 1 ; ;默認為寄存器默認為寄存器1 1組組; ;定義定義80518051定時器定時器0 0溢出所需的機器周期數溢出所需的機器周期數int_clock equ 10000int_clock equ 10000 ; ;默認周期數為默認周期數為10000 10000 ; ;定義定義round-robin round-robin 的的timeout timeout 所需的定時器溢出數所需的定時器溢出數timesharingtimesharing equ 5equ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 秋冬疾病預防指南
- 2025西安鐵路職業技術學院輔導員考試試題及答案
- 2025遼寧石化職業技術學院輔導員考試試題及答案
- 2025貴州黔南經濟學院輔導員考試試題及答案
- T/ZHCA 005-2019化妝品影響皮膚彈性測試方法
- 過敏性疾病的一級預防
- 親子活動設計方案
- 2025年廣東省深圳市坪山區中考歷史二模試卷
- T/ZBH 026-2023晶硅光伏組件用材料第3部分:雙玻光伏組件用壓延玻璃彎曲強度、抗沖擊性及表面應力技術規范
- 健康體檢課件
- 真石漆飾面工程檢驗批質量驗收記錄
- 婦產科手術配合課件
- 地基強夯工程專項施工方案專家論證版
- (中職)中國稅收:稅費計算與申報項目十四 企業所得稅計算與申報課件
- 心理照護教材課件匯總完整版ppt全套課件最全教學教程整本書電子教案全書教案課件合集
- 男朋友申請表
- 高中心理健康:我心換你心——心理主題:人際交往 課件(22張PPT)
- 高清元素周期表(專業版)
- 北京中考英語作文模板
- 訂單運作與產品交付流程
- 暗黑破壞神2所有綠色套裝(大圖)
評論
0/150
提交評論