如何將RTOS添加到您的Zynq SoC設(shè)計中
1 什么是實時操作系統(tǒng)?
本文引用地址:http://m.butianyuan.cn/article/273351.htm實時操作系統(tǒng)是確定的,意思是指系統(tǒng)需要在明確的截止時間內(nèi)做出響應(yīng)。這種確定性很重要,其原因有多種,例如,如果最終應(yīng)用正在監(jiān)控工業(yè)流程,那么必須在特定時段內(nèi)對事件做出響應(yīng),工業(yè)控制系統(tǒng)就屬于這類情況。
可根據(jù)滿足截止時間的能力對RTOS進(jìn)一步分類為三種不同類型的RTOS,每種類型都以不同方式滿足截止時間。在hard RTOS中,錯過截止時間被視為系統(tǒng)錯誤。而對于firm RTOS就不是這樣,偶爾錯過截止時間是可以接受的。在soft RTOS中,錯過一次截止時間會減少結(jié)果的有效性,但系統(tǒng)在整體上對此是可以接受的。
實時操作系統(tǒng)以運行任務(wù)為核心,每項任務(wù)執(zhí)行規(guī)定的功能。例如,某個任務(wù)可能通過接口讀取數(shù)據(jù),或?qū)?shù)據(jù)執(zhí)行某種操作。簡單的系統(tǒng)可能只運行一項任務(wù),但采用分時法,每個任務(wù)都會獲得處理器上的一個專用時間檔,而更高優(yōu)先級的任務(wù)還可分配多個時間檔。更多情況下處理器上會同時運行多項任務(wù)。這些任務(wù)間的轉(zhuǎn)換被稱為“上下文切換”,它要求將與每項任務(wù)關(guān)聯(lián)的處理器狀態(tài)存儲并添加到任務(wù)棧中。
下一步運行哪項任務(wù)將由內(nèi)核來控制。該內(nèi)核是RTOS的核心,用來管理軟件的輸入與輸出請求,并將它們轉(zhuǎn)換為處理器中央處理單元和功能元件能識別的數(shù)據(jù)處理指令。任務(wù)調(diào)度可能比較復(fù)雜,尤其是當(dāng)需要避免死鎖(指兩個或更多任務(wù)相互鎖定)時更是如此。兩種基本調(diào)度方法分別是分時法和事件驅(qū)動法。采用分時法,每項任務(wù)都會獲得處理器上的一個專用時間檔,而更高優(yōu)先級的任務(wù)還可分配多個時間檔。時間分段通過定期中斷或定時器進(jìn)行控制,這種方法通常被稱為 “輪詢調(diào)度”。而采用事件驅(qū)動方案,只有當(dāng)具有更高優(yōu)先級的任務(wù)需要運行時才會進(jìn)行任務(wù)切換。這種方法通常稱為“搶先式調(diào)度”。
2 死鎖、資源共享和互斥等待
當(dāng)兩個或兩個以上進(jìn)程(例如UART、ADC或DAC)需要使用相同資源時,它們可以同時對該資源提出請求。這種情況下,應(yīng)對訪問進(jìn)行控制以防出現(xiàn)爭用現(xiàn)象。如何對此進(jìn)行管理非常重要,若不采用正確的管理方法,就會出現(xiàn)“死鎖”或“互斥等待”這樣的問題,從而導(dǎo)致系統(tǒng)錯誤。
當(dāng)某個進(jìn)程占用一種資源且無法將其釋放時,就會出現(xiàn)死鎖,因為在這種情況下無法完成該項任務(wù)。該進(jìn)程需要使用當(dāng)前被另一進(jìn)程占用的另一種資源。由于系統(tǒng)無限期地處于這種狀態(tài),因此可以說應(yīng)用程序已被鎖死。可以想象,死鎖對于實時操作系統(tǒng)來說是非常不好的。
當(dāng)某個進(jìn)程因為所需要的資源總是被分配給其它進(jìn)程而無法運行時,就會發(fā)生互斥等待。多年來,已經(jīng)有很多關(guān)于這類主題的文章和資料,也推薦了很多解決方案,例如Dekker算法,這是一種用于并行程序中互斥問題的經(jīng)典解決方法。處理這類情況的最常用方法是信號量法,通常分為二進(jìn)制信號量和計數(shù)信號量這兩種類型。
通常,為每種資源會分配一個二進(jìn)制信號量。請求進(jìn)程會在任務(wù)執(zhí)行之前等待資源變?yōu)榭捎觅Y源。一旦任務(wù)完成,請求進(jìn)程就會釋放該資源。這些信號量通常被稱為等待(WAIT)和發(fā)信號(SIGNAL)操作。進(jìn)程首先等待信號量。如果資源閑置,進(jìn)程將被賦予該資源的控制權(quán),并運行直到完成,此時進(jìn)程會發(fā)出完成信號。但是,如果進(jìn)程在等待信號量時資源已被占用,那么進(jìn)程將會被暫停直到該資源被釋放為止。當(dāng)前正在執(zhí)行的進(jìn)程一旦完成,暫停狀態(tài)就會立刻終止,但如果具備更高優(yōu)先級的進(jìn)程搶先占用該資源,那么就需要等待更長的時間。通常使用名為互斥鎖(mutexes)的特殊二進(jìn)制信號量來防止優(yōu)先級反轉(zhuǎn)的發(fā)生。
計數(shù)信號量的工作方式與二進(jìn)制信號量相同,但是只有當(dāng)特定資源類型有一個以上的實例時才會使用計數(shù)信號量(例如數(shù)據(jù)存儲)。由于每個資源都被分配到一個進(jìn)程中,因此計數(shù)數(shù)值會減少以顯示剩余的可用資源數(shù)量。當(dāng)數(shù)值減至為零時可用資源就沒有了,同時提出請求的進(jìn)程就會被暫停,直到有一種資源被釋放為止。
不同進(jìn)程之間經(jīng)常進(jìn)行通信是很有必要的。最簡單的方法是按如上所訴的方式使用數(shù)據(jù)存儲和信號量。更為復(fù)雜的技術(shù)包括消息隊列。采用消息隊列,當(dāng)一個進(jìn)程需要向另一個進(jìn)程發(fā)送信息時,它會向隊列POST一條消息。當(dāng)一個進(jìn)程需要從隊列中接收消息時,它會PEND隊列。因此,消息隊列的工作原理就像FIFO(先入先出)存儲器一樣。
3 µC/OS-III操作系統(tǒng)
Micrium的µC/OS-III是一種優(yōu)先式RTOS,意思是指它總是運行已做好執(zhí)行準(zhǔn)備并具有最高優(yōu)先級的任務(wù)。要想將該操作系統(tǒng)添加到您的Zynq SoC系統(tǒng)設(shè)計中,第一步需要從Micrium網(wǎng)站下載µC/OS-III RTOS。下載后,安裝工作非常簡單。您只需要將一些ZIP文件解壓到電腦上賽靈思安裝程序中的正確文件夾(路徑)。
應(yīng)確保將名為Zynq-7000-ucosiii-bsp.zip的ZIP文件解壓到 ISE_DSEDK sw libbsp文件夾。您會在此文件夾下看到一些其它操作系統(tǒng),包括獨立系統(tǒng)和xilkernel。隨后,如圖1所示,將名為Zynq-7000-ucosiii-demo.zip的ZIP 文件解壓到\ISE_DSEDKswlibsw_apps文件夾。您會在此文件夾內(nèi)看到一些其它應(yīng)用的演示。
評論