第15章RTX51操作系統原理及實現_第1頁
第15章RTX51操作系統原理及實現_第2頁
第15章RTX51操作系統原理及實現_第3頁
第15章RTX51操作系統原理及實現_第4頁
第15章RTX51操作系統原理及實現_第5頁
已閱讀5頁,還剩57頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第15章 RTX51操作系統原理及實現何賓2015.02n 操作系統的必要性 n 操作系統基本知識 n RTX51操作系統的任務 n RTX51操作系統內核函數n RTX51操作系統實現本章主要內容在不使用操作系統的傳統的單片機中,常使用單任務的程序或者輪詢的程序。n 一個標準的C程序用main函數啟動執行。在嵌入式應用中,main通常作為一個無限循環,被認為一個單任務,這個任務連續的運行。操作系統的必要性-單任務程序【例】 單任務程序C語言描述的例子 int counter; void main (void) counter = 0; while (1) /無限循環 counter+; /遞

2、增計數器 操作系統的必要性-單任務程序不用實時操作系統RTOS,解決單任務程序的一個方法就是將需要CPU執行的一些程序編寫稱為子程序,然后用一個輪詢預安排的多任務機制,實現一個更復雜的C程序。n 在這個機制中,任務或者函數在一個無限循環中被重復的調用。 操作系統的必要性-輪詢程序【例】 輪詢程序 C語言描述的例子 int counter; void main (void) counter = 0; while (1) /無限循環 check_serial_io (); process_serial_cmds (); /處理串行輸入 check_kbd_io (); process_kbd_cm

3、ds (); /處理鍵盤輸入 adjust_ctrlr_parms (); /調整控制器 counter+; /遞增計數器操作系統的必要性-輪詢程序操作系統是管理和控制計算機硬件與軟件資源的計算機程序,是直接運行在計算機硬件上的最基本的系統軟件,任何其他軟件都必須在操作系統的支持下才能運行。n 操作系統在硬件系統上運行,它常駐內存內,并提供給上層兩種接口:操作接口和編程接口。p 操作接口由一系列操作命令組成,用戶通過操作接口可以方便地使用計算機。p 編程接口由一系列的系統調用組成各種程序可以使用這些系統調用讓操作系統為其服務,并通過操作系統來使用硬件和軟件資源。操作系統基本知識操作系統的作用主

4、要體現在以下兩方面:n 屏蔽硬件物理特性和操作細節,為用戶使用計算機提供了便利。n 有效管理系統資源,提高系統資源使用效率。操作系統基本知識-操作系統的作用操作系統位于底層硬件與用戶之間,是兩者溝通的橋梁。n 用戶可以通過操作系統的用戶界面,輸入命令。n 操作系統則對命令進行解釋,驅動硬件設備,實現用戶要求。操作系統基本知識-操作系統的功能操作系統基本知識-操作系統的功能n 以現代觀點而言,一個完整的OS應該提供以下的功能:p 資源管理p 內存管理p 程序控制p 虛擬內存p 人機交互p 用戶接口p 進程管理p 用戶界面n 系統的設備資源和信息資源都是操作系統根據用戶需求按一定的策略來進行分配和

5、調度的。n 處理器管理或稱處理器調度,是操作系統資源管理功能的另一個重要內容。操作系統的設備管理功能主要是分配和回收外部設備以及控制外部設備按用戶程序的要求進行操作等。n 信息管理是操作系統的一個重要的功能,主要是向用戶提供一個文件系統。操作系統基本知識-資源管理操作系統控制用戶程序的執行主要有以下一些內容:n 調入相應的編譯程序,將用某種程序設計語言編寫的源程序編譯成計算機可執行的目標程序;n 分配內存儲等資源將程序調入內存并啟動;n 按用戶指定的要求處理執行中出現的各種事件以及與操作員聯系請示有關意外事件的處理等。操作系統基本知識-程序控制操作系統的人機交互功能是決定計算機系統友好性的一個

6、重要因素。n 人機交互功能主要靠可輸入輸出的外部設備和相應的軟件來完成。p 可供人機交互使用的設備主要有鍵盤顯示、鼠標、各種模式識別設備等。p 與這些設備相應的軟件就是操作系統提供人機交互功能的部分。n 人機交互部分的主要作用是控制有關設備的運行和理解并執行通過人機交互設備傳來的有關的各種命令和要求。操作系統基本知識-人機交互不管是常駐程序或者應用程序,他們都是以進程為標準的執行單位。n 進程就是當前正在運行的程序。n 進程管理指的是操作系統管理多個進程的準備、運行、掛起和退出。n 進程管理通常使用分時復用的調度機制,大部分的操作系統可以通過為不同進程指定不同的優先級,從而改變為這些進程所分配

7、的時間片。n 在進程管理中,優先調度優先級高的進程。操作系統基本知識-進程管理操作系統的存儲器管理功能提供:n 查找可用的存儲空間;n 配置與釋放存儲空間;n 交換內存和外存的內容;n 提供存儲器訪問的權限等功能。操作系統基本知識-內存管理操作系統基本知識-虛擬內存虛擬內存是計算機系統內存管理的一種技術。n 它使得應用程序認為它擁有連續的可用的內存(一個連續完整的地址空間)。n 而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。用戶接口包括作業一級接口和程序一級接口。n 作業一級接口為了便于用戶直接或間接地控制自己的作業而設置。n 它通常包括

8、聯機用戶接口與脫機用戶接口。n 程序一級接口是為用戶程序在執行中訪問系統資源而設置的,通常由一組系統調用組成。操作系統基本知識-用戶接口操作系統基本知識-用戶界面用戶界面(User Interface,UI)是系統和用戶之間進行交互和信息交換的媒介,它實現信息的內部形式與人類可以接受形式之間的轉換。n 目的在使得用戶能夠方便有效率地去操作硬件以達成雙向之交互,完成所希望借助硬件完成之工作。n 用戶界面定義廣泛,包含了人機交互與圖形用戶接口,凡參與人類與機械的信息交流的領域都存在著用戶界面。實時或者多任務應用是由一個或多個執行指定操作的任務所構成的。RTX51 Tiny允許最多16個任務。n 任

9、務是簡單的C函數,返回類型為void,有一個void參數列表。使用_task_函數屬性聲明。格式如下:void func(void) _task_ nump func為任務的函數名;p _task_是定義任務關鍵字;p num是任務ID號,取值從015,每一個任務必須有一個唯一的任務號。RTX51操作系統的任務-定義任務【例】 定義任務 C語言描述的例子 void job0 (void) _task_ 0 while(1) counter0+; /計數器遞增 RTX51操作系統的任務-定義任務每個在RTX51 Tiny中定義的任務,都應該在下面狀態中的其中某個狀態。RTX51操作系統的任務-管

10、理任務不同狀態的描述不同狀態的描述狀態狀態描述描述RUNNINGRUNNING在在RUNINGRUNING狀態時,正在執行當前任務。在一個時刻,只允許執行一個任務狀態時,正在執行當前任務。在一個時刻,只允許執行一個任務READYREADY在在READYREADY狀態,等待執行任務。當處理完當前運行的任務后,狀態,等待執行任務。當處理完當前運行的任務后,RTX51 TinyRTX51 Tiny啟動下一個準備好的任務啟動下一個準備好的任務WAITINGWAITING在在WAITINGWAITING狀態,任務等待一個事件。如果發生一個事件,任務則進入狀態,任務等待一個事件。如果發生一個事件,任務則進

11、入READYREADY狀態狀態DELETEDDELETED在在DELETEDDELETED狀態,沒有啟動任務。狀態,沒有啟動任務。TIME-OUTTIME-OUT在在TIME-OUTTIME-OUT狀態,任務被輪詢超時打斷。這個狀態等同于狀態,任務被輪詢超時打斷。這個狀態等同于READYREADY狀態。狀態。RTX51 Tiny執行輪詢多任務調度,這樣允許模擬并行執行多個無限循環或者任務。n 任務不是并發執行的,而是按時間片執行的。n 可用的CPU時間被分成時間片,RTX51 Tiny為每個任務分配一個時間片。n 每個任務允許執行預先確定的時間長度。然后,RTX51 Tiny切換到其他準備運行

12、的任務,然后這個任務執行一段時間。n 時間片的長度使用變量TIMESHARING定義。RTX51操作系統的任務-切換任務RTX51 Tiny中,負責分配處理器給一個任務的那部分稱為調度器。根據下面的規則,RTX51 Tiny調度器定義所運行的任務:n 如果發生下面的情況,則打斷當前正在運行的任務:p 任務調用os_wait函數,并且沒有產生指定的事件;p 執行任務的時間大于定義的輪詢超時時間;n 如果發生下面的情況,則啟動其他任務:p 沒有運行其他任務;p 將要啟動的任務處于READY或者TIME_OUT狀態;RTX51操作系統的任務-切換任務注:在調用這些內核函數時,必須包含頭文件rtx51

13、tny.h。n char isr_send_signal(unsigned char task_id) 功能:該函數發送信號到task_id所確定的任務。p 如果指定的任務已經在等待信號,則該函數調用將準備用于執行的任務。p 否則,保存信號到任務的信號標志內。該函數只能被中斷函數所調用。 返回值:0,表示成功;1,表示任務不存在;RTX51操作系統內核函數RTX51操作系統內核函數n char os_clear_signal(unsigned char task_id) 功能:清除task_id指定任務的信號標志; 返回:0,表示成功清除信號標志;1,表示任務不存在【例】 調用isr_send

14、_signal()函數的例子#include void tst_isr_send_signal (void) interrupt 2 isr_send_signal (8); /向任務8發送信號 RTX51操作系統內核函數【例】 調用os_clear_signal()函數的例子 #include void tst_os_clear_signal (void) _task_ 8 . os_clear_signal (5); /清除任務5中的信號標志 . RTX51操作系統內核函數n char os_create_task(unsigned char task_id) 功能:啟動由task_id指

15、定的任務。將該任務標記為準備狀態,并且根據RTX51 Tiny指定的規則執行該任務。 返回:0,表示成功啟動任務;1表示沒有啟動任務,或者不存在task_id定義的任務。RTX51操作系統內核函數RTX51操作系統內核函數n char os_delete_task(unsigned char task_id) 功能:停止task_id指定的任務,將由task_id指定的任務從任務列表中刪除。 返回:0,表示任務成功停止和刪除;1,表示指定的任務不存在或者task_id定義的任務沒有啟動。【例】 調用os_create_task()函數的例子 #include #include void new

16、_task (void) _task_ 2 . void tst_os_create_task (void) _task_ 0 . if (os_create_task (2) printf (Couldnt start task 2n); . RTX51操作系統內核函數【例】 調用os_delete_task()函數的例子 #include #include void tst_os_delete_task (void) _task_ 0 . if (os_delete_task (2) printf (Couldnt start task 2n); . RTX51操作系統內核函數n char

17、 os_running_task_id(void) 功能:確定當前運行任務的id。 返回:當前運行任務的任務ID號,值的范圍為015。 RTX51操作系統內核函數RTX51操作系統內核函數n char os_send_signal(unsigned char task_id) 功能:發送信號到task_id任務。p 如果指定的任務已經在等待信號,則該函數調用將準備任務用于執行。p 否則,保存信號到任務的信號標志內。 返回:0,表示成功;1,表示任務不存在?!纠?調用os_running_task_id()函數的例子 #include void tst_os_running_task (voi

18、d) _task_ 3 unsigned char tid; tid = os_running_task_id (); / tid = 3 RTX51操作系統內核函數【例】 調用os_send_signal ()函數的例子#include void signal_func (void) _task_ 2 . os_send_signal (8); /向任務8發送信號 .void tst_os_send_signal (void) _task_ 8 . os_send_signal (2); /向任務2發送信號 . RTX51操作系統內核函數n char os_wait(unsigned cha

19、r event_sel, unsigned char ticks, unsigned int dummy) 功能:os_wait函數停止當前的任務,等待一個或多個事件,比如:來自時間間隔,來自一個超時,或者來自其他任務或者中斷。n event_sel 該參數指定了時間或者等待事件,可以是下面常數的任何的組合:p K_IVL:等待一個定時器滴答間隔;p K_SIG:等待一個信號;p K_TMO:等待一個超時; RTX51操作系統內核函數n tickp 該參數指定用于等待一個間隔事件(K_IVL)或者超時事件(K_TMO)的定時器滴答的數目。n dummy 提供和RTX51的兼容性,RTX51 T

20、iny不使用。返回:指定事件發生時,使能任務用于執行?;謴蛨绦小?赡艿姆祷刂担簆 SIG_EVENT:接收到一個信號;p TMO_EVENT:完成超時,或者間隔過期;p NOT_OK:event_sel參數無效; RTX51操作系統內核函數n char os_wait1(unsigned char event_sel) 功能:os_wait1停止當前的任務,等待發生一個事件。os_wait1函數是os_wait函數的子集,不允許os_wait所提供的所有的事件。 其中:p event_sel 指定等待的事件,只能有K_SIG,即等待信號。 返回:當信號事件發生時,使能任務用于執行?;謴蛨绦?。可

21、能的返回值:SIG_EVENT或者NOT_OK。RTX51操作系統內核函數【例】 調用os_wait()函數的例子#include #include void tst_os_wait (void) _task_ 9 while (1) char event; event = os_wait (K_SIG | K_TMO, 50, 0); switch (event) default: break; /空操作 case TMO_EVENT: break; /超時 case SIG_EVENT: os_reset_interval (100); /收到信號,必須使用 break; / os_res

22、et_interval調整延遲 RTX51操作系統內核函數n char os_wait2(unsigned char event_sel, unsigned char ticks) 功能:os_wait函數停止當前的任務,等待一個或多個事件,比如:來自時間間隔,來自一個超時,或者來自其他任務或者中斷。 其中:n event_sel參數指定了時間或者等待事件,能是下面常數的任何的組合:p K_IVL:等待一個定時器滴答間隔;p K_SIG:等待一個信號;p K_TMO:等待一個超時; RTX51操作系統內核函數n tick:參數指定用于等待一個間隔事件(K_IVL)或者超時事件(K_TMO)的定

23、時器滴答的數目。 返回:指定事件發生時,使能任務用于執行?;謴蛨绦?。可能的返回值:p SIG_EVENT:接收到一個信號;p TMO_EVENT:完成超時,或者間隔過期;p NOT_OK:event_sel參數無效; RTX51操作系統內核函數在這個例子中所創建的任務是實現簡單的計數器循環。n RTX51啟動執行名字為job0的任務0。p 這個函數添加另一個名字為job1的任務。n 當job0執行一段時間后,RTX51切換到job1。p 在job1執行一段時間,RTX51切換回job0。這個過程無限重復。RTX51操作系統實現1RTX51操作系統實現1【例】使用RTX51 Tiny內核函數調用

24、實現輪詢調度C語言描述#include unsigned char counter0; /定義無符號char類型變量counter0unsigned char counter1; /定義無符號char類型變量counter1void job0 (void) _task_ 0 /定義任務0 os_create_task (1); /創建一個任務 while (1) /無限循環 counter0+; /更新計數器 void job1 (void) _task_ 1 /定義任務1 while (1)/無限循環 counter1+; /更新計數器 RTX51操作系統實現1注:在使用RTX51操作系統時

25、,需要在Options for Target Target 1對話框界面中,選擇Target標簽。在該標簽窗口界面中,在Operating system右側的下拉框中,選擇RTX-51 Tiny選項 。 RTX51操作系統實現1下面通過Keil Vision調試器,說明RTX51的運行機制,步驟主要包括:n在例子15-1目錄下,打開該設計。n在Keil Vision當前設計主界面主菜單下,選擇Debug-Start/Stop Debug Session,進入調試器模式。n在當前調試器主界面主菜單下,選擇View-Logic Analyzer選項n在當前調試器主界面右側上方,出現Logic An

26、alyzer界面。 RTX51操作系統實現1n 在該界面中,添加counter0和counter1兩個變量 RTX51操作系統實現1n 鼠標右鍵分別單擊counter0和counter1,出現浮動菜單。在浮動菜單內選擇state選項。n 在當前調試器主界面主菜單下,選擇View-Watch Windows-Watch 1。n 在當前調試器主界面右下方出現Watch1窗口界面。在該界面中,添加counter0和counter1兩個變量。 RTX51操作系統實現1n 按F5按鍵或者在當前調試主界面主菜單下,選擇Debug-Run,運行該程序。n 觀察Logic Analyzer窗口。通過觀察cou

27、nter0和counter1,很明顯,兩個任務:任務0和任務1在分時運行。 RTX51操作系統實現1n 觀察Watch 1窗口,可以看到counter0和counter1兩個變量的值在交替變化。 RTX51操作系統實現1在這個例子中,job0使能job1。但是現在,當遞增counter0后,job0調用os_wait函數暫停3個時鐘滴答。n 在這個時間,RTX51切換到下一個任務job1。n 當job1遞增counter1后,它也調用os_wait暫停5個時鐘滴答。p 現在,RTX51沒有其他任務需要執行,它進入空閑狀態3個時鐘滴答,然后繼續執行job0。RTX51操作系統實現2【例】 使用R

28、TX51使用os_wait函數延遲執行C語言描述的例子#include unsigned char counter0; /定義無符號char類型變量counter0unsigned char counter1; /定義無符號char類型變量counter1void job0 (void) _task_ 0 /定義任務0 os_create_task (1); /創建任務1 while (1) /無限循環 counter0+; /更新計數器 os_wait (K_TMO,3,1); /暫停3個時鐘嘀嗒RTX51操作系統實現2void job1 (void) _task_ 1 /定義任務1 whi

29、le (1) /無限循環 counter1+; /更新計數器 os_wait (K_TMO,5,1); /暫停5個時鐘嘀嗒 RTX51操作系統實現2下面通過Keil Vision調試器,說明RTX51的運行機制,步驟主要包括:n在例子15-2目錄下,打開該設計。n在Keil Vision當前設計主界面主菜單下,選擇Debug-Start/Stop Debug Session,進入調試器模式。n在當前調試器主界面主菜單下,選擇View-Logic Analyzer選項n在當前調試器主界面右側上方,出現Logic Analyzer界面n在該界面中,添加counter0和counter1兩個變量。

30、RTX51操作系統實現2RTX51操作系統實現2n鼠標右鍵分別單擊counter0和counter1,出現浮動菜單。在浮動菜單內選擇state選項。n在當前調試器主界面主菜單下,選擇View-Watch Windows-Watch 1。n在當前調試器主界面右下方出現Watch1窗口界面。在該界面中,添加counter0和counter1兩個變量。n按F5按鍵或者在當前調試主界面主菜單下,選擇Debug-Run,運行該程序。n觀察Logic Analyzer窗口,如圖所示。通過觀察counter0和counter1,很明顯,每3個定時器滴答后遞增counter0,每5個定時器滴答后遞增counter1。n觀察Watch 1窗口,可以看到counter0和counter1兩個變量的值在交替變化,很明顯,counter0變化的比counter1要快。 RTX51操作系統實現2在這個

溫馨提示

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

評論

0/150

提交評論