當前位置:編程學習大全網 - 源碼下載 - 嵌入式實時操作系統ucosii的分析

嵌入式實時操作系統ucosii的分析

ucos ii的特點

1.ucos ii是由Labrosse先生編寫的壹個開放式內核,最主要的特點就是源碼公開。這壹點對於用戶來說可謂利弊各半,好處在於,壹方面它是免費的,另壹方面用戶可以根據自己的需要對它進行修改。缺點在於它缺乏必要的支持,沒有功能強大的軟件包,用戶通常需要自己編寫驅動程序,特別是如果用戶使用的是不太常用的單片機,還必須自己編寫移植程序。

2.ucos ii是壹個占先式的內核,即已經準備就緒的高優先級任務可以剝奪正在運行的低優先級任務的CPU使用權。這個特點使得它的實時性比非占先式的內核要好。通常我們都是在中斷服務程序中使高優先級任務進入就緒態(例如發信號),這樣退出中斷服務程序後,將進行任務切換,高優先級任務將被執行。拿51單片機為例,比較壹下就可以發現這樣做的好處。假如需要用中斷方式采集壹批數據並進行處理,在傳統的編程方法中不能在中斷服務程序中進行復雜的數據處理,因為這會使得關中斷時間過長。所以經常采用的方法是置壹標誌位,然後退出中斷。由於主程序是循環執行的,所以它總有機會檢測到這壹標誌並轉到數據處理程序中去。但是因為無法確定發生中斷時程序到底執行到了什麽地方,也就無法判斷要經過多長時間數據處理程序才會執行,中斷響應時間無法確定,系統的實時性不強。如果使用μC/OS-II的話,只要把數據處理程序的優先級設定得高壹些,並在中斷服務程序中使它進入就緒態,中斷結束後數據處理程序就會被立即執行。這樣可以把中斷響應時間限制在壹定的範圍內。對於壹些對中斷響應時間有嚴格要求的系統,這是必不可少的。但應該指出的是如果數據處理程序簡單,這樣做就未必合適。因為ucos ii要求在中斷服務程序末尾使用OSINTEXIT函數以判斷是否進行任務切換,這需要花費壹定的時間。

3.ucos ii和大家所熟知的Linux等分時操作系統不同,它不支持時間片輪轉法。ucos ii是壹個基於優先級的實時操作系統,每個任務的優先級必須不同,分析它的源碼會發現,ucos ii把任務的優先級當做任務的標識來使用,如果優先級相同,任務將無法區分。進入就緒態的優先級最高的任務首先得到CPU的使用權,只有等它交出CPU的使用權後,其他任務才可以被執行。所以它只能說是多任務,不能說是多進程,至少不是我們所熟悉的那種多進程。顯而易見,如果只考慮實時性,它當然比分時系統好,它可以保證重要任務總是優先占有CPU。但是在系統中,重要任務畢竟是有限的,這就使得劃分其他任務的優先權變成了壹個讓人費神的問題。另外,有些任務交替執行反而對用戶更有利。例如,用單片機控制兩小塊顯示屏時,無論是編程者還是使用者肯定希望它們同時工作,而不是顯示完壹塊顯示屏的信息以後再顯示另壹塊顯示屏的信息。這時候,要是ucos ii即支持優先級法又支持時間片輪轉法就更合適了。

4.ucos ii對***享資源提供了保護機制。正如上文所提到的,ucos ii是壹個支持多任務的操作系統。壹個完整的程序可以劃分成幾個任務,不同的任務執行不同的功能。這樣,壹個任務就相當於模塊化設計中的壹個子模塊。在任務中添加代碼時,只要不是***享資源就不必擔心互相之間有影響。而對於***享資源(比如串口),ucos ii也提供了很好的解決辦法。壹般情況下使用的是信號量的方法。簡單地說,先創建壹個信號量並對它進行初始化。當壹個任務需要使用壹個***享資源時,它必須先申請得到這個信號量,而壹旦得到了此信號量,那就只有等使用完了該資源,信號量才會被釋放。在這個過程中即使有優先權更高的任務進入了就緒態,因為無法得到此信號量,也不能使用該資源。這個特點的好處顯而易見,例如當顯示屏正在顯示信息的時候,外部產生了壹個中斷,而在中斷服務程序中需要顯示屏顯示其他信息。這樣,退出中斷服務程序後,原有的信息就可能被破壞了。而在μC/OS-II中采用信號量的方法時,只有顯示屏把原有信息顯示完畢後才可以顯示新信息,從而可以避免這個現象。不過,采用這種方法是以犧牲系統的實時性為代價的。如果顯示原有信息需要耗費大量時間,系統只好等待。從結果上看,等於延長了中斷響應時間,這對於未顯示信息是報警信息的情況,無疑是致命的。發生這種情況,在μC/OS-II中稱為優先級反轉,就是高優先級任務必須等待低優先級任務的完成。在上述情況下,在兩個任務之間發生優先級反轉是無法避免的。所以在使用ucos ii時,必須對所開發的系統了解清楚,才能決定對於某種***享資源是否使用信號量。

ucos ii在單片機使用中的壹些特點

1.在單片機系統中嵌入ucos ii將增強系統的可靠性,並使得調試程序變得簡單。以往傳統的單片機開發工作中經常遇到程序跑飛或是陷入死循環。可以用看門狗解決程序跑飛問題,而對於後壹種情況,尤其是其中牽扯到復雜數學計算的話,只有設置斷點,耗費大量時間來慢慢分析。如果在系統中嵌入 ucos ii的話,事情就簡單多了。可以把整個程序分成許多任務,每個任務相對獨立,然後在每個任務中設置超時函數,時間用完以後,任務必須交出 CPU的使用權。即使壹個任務發生問題,也不會影響其他任務的運行。這樣既提高了系統的可靠性,同時也使得調試程序變得容易。

2.在單片機系統中嵌入ucos ii將增加系統的開銷。現在所使用的51單片機,壹般是指87C51或者89C51,其片內都帶有壹定的RAM和 ROM。對於壹些簡單的程序,如果采用傳統的編程方法,已經不需要外擴存儲器了。如果在其中嵌入ucos ii的話,在只需要使用任務調度、任務切換、信號量處理、延時或超時服務的情況下,也不需要外擴ROM了,但是外擴RAM是必須的。由於ucos ii是可裁減的操作系統,其所需要的RAM大小就取決於操作系統功能的多少。舉例來說,μC/OS-II允許用戶定義最大任務數。由於每建立壹個任務,都要產生壹個與之相對應的數據結構TCB,該數據結構要占用很大壹部分內存空間。所以在定義最大任務數時,壹定要考慮實際情況的需要。如果定得過大,勢必會造成不必要的浪費。嵌入ucos ii以後,總的RAM需求可以由如下表達式得出:

RAM總需求=應用程序的RAM需求內核數據區的RAM需求(任務棧需求最大中斷嵌套棧需求)·任務數

所幸的是,μC/OS-II可以對每個任務分別定義堆棧空間的大小,開發人員可根據任務的實際需求來進行棧空間的分配。但在RAM容量有限的情況下,還是應該註意壹下對大型數組、數據結構和函數的使用,別忘了,函數的形參也是要推入堆棧的。

3.ucos ii的移植也是壹件需要值得註意的工作。如果沒有現成的移植實例的話,就必須自己來編寫移植代碼。雖然只需要改動兩個文件,但仍需要對相應的微處理器比較熟悉才行,最好參照已有的移植實例。另外,即使有移植實例,在編程前最好也要閱讀壹下,因為裏面牽扯到堆棧操作。在編寫中斷服務程序時,把寄存器推入堆棧的順序必須與移植代碼中的順序相對應。

4.和其他壹些著名的嵌入式操作系統不同,ucos ii在單片機系統中的啟動過程比較簡單,不像有些操作系統那樣,需要把內核編譯成壹個映像文件寫入ROM中,上電復位後,再從ROM中把文件加載到RAM中去,然後再運行應用程序。ucos ii的內核是和應用程序放在壹起編譯成壹個文件的,使用者只需要把這個文件轉換成HEX格式,寫入ROM中就可以了,上電後,會像普通的單片機程序壹樣運行。

結語

由以上介紹可以看出,ucos ii具有免費、使用簡單、可靠性高、實時性好等優點,但也有移植困難、缺乏必要的技術支持等缺點,尤其不像商用嵌入式系統那樣得到廣泛使用和持續的研究更新。但開放性又使得開發人員可以自行裁減和添加所需的功能,在許多應用領域發揮著獨特的作用。當然,是否在單片機系統中嵌入ucos ii應視所開發的項目而定,對於壹些簡單的、低成本的項目來說,就沒必要使用嵌入式操作系統了。

  • 上一篇:linux系統服務器中的蠕蟲病毒怎麽清除
  • 下一篇:UIC獲取學號
  • copyright 2024編程學習大全網