<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > UCOS-II 操作系統在數碼相框中的應用

UCOS-II 操作系統在數碼相框中的應用

作者: 時(shí)間:2012-02-13 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:傳統的嵌入式系統軟件設計中廣泛采用單任務(wù)順序機制,它帶來(lái)的重要問(wèn)題是編程復雜,同時(shí)系統的穩定性較差。為此,引入了實(shí)時(shí)來(lái)對多任務(wù)進(jìn)行管理與調度,實(shí)踐證明該系統對多任務(wù)的管理和調度有著(zhù)卓越的性能和穩定性。本文成功將該系統運用于系統,詳細描述了在ZEVIO1020雙核處理器的移植過(guò)程,并且對于多任務(wù)的調度處理,設計了基于兩級狀態(tài)機的通信機制,解決了多任務(wù)之間消息處理復雜性的問(wèn)題,最后給出了系統的實(shí)現過(guò)程。

本文引用地址:http://dyxdggzs.com/article/149716.htm

1、引言

近年來(lái),隨著(zhù)嵌入式技術(shù)的不斷發(fā)展,各種電子產(chǎn)品層出不窮,對于那些具有眾多功能,但按鍵數目無(wú)法滿(mǎn)足要求的設備來(lái)說(shuō),選擇一個(gè)好的和設計一套合理的消息處理機制,已經(jīng)成為研發(fā)人員研究的一個(gè)課題。本文以此為背景,研究了操作系統在中的,詳細描述了UCOS-II操作系統在ZEVIO1020雙核處理器上的移植,并且根據多任務(wù)的特點(diǎn),設計了一套完整的消息處理機制。實(shí)踐證明,采取本文所設計的系統可以靈活的完成任務(wù)間的調度和切換。

2、系統概述

數碼相框的主要特色是圖片顯示清晰,圖片顯示效果多種多樣,同時(shí)還具有視頻播放、音頻播放、JPEG圖片解碼等附加功能。在本系統實(shí)現過(guò)程中主要分為六個(gè)模塊:總控模塊、GUI界面模塊、圖片顯示模塊、視頻模塊、音頻模塊、JPEG解碼模塊??偪啬K實(shí)現對其它模塊的管理與控制。圖片顯示模塊通過(guò)ZEVIO1020雙核處理器的3D圖像內核處理,實(shí)現多種三維的動(dòng)態(tài)顯示效果,通過(guò)對定時(shí)器設置的改變,實(shí)現圖片播放速率的調整。視頻模塊和JPEG解碼模塊因為對速度的要求較高,使用高速數據傳輸通道DMA來(lái)實(shí)現ARM和DSP之間的雙核解碼。音頻模塊可以解碼MP3,WMA等多種音頻格式。UCOS-II操作系統的任務(wù)就是在不同狀態(tài)下,根據不同的鍵盤(pán)輸入消息實(shí)現各個(gè)模塊間的靈活調度。

3、基于ZEVIO1020的系統硬件平臺

ZEVIO1020多媒體處理器是美國LSILogic公司發(fā)布的第一款基于ZEVIO架構的標準芯片。具備低功耗、更高級圖像和數字音/視頻處理功能。ZEVIO1020處理器高度集成,包括通用處理的ARM9內核,多媒體處理的ZSP400內核,此外還包括了一個(gè)3D圖像內核和一個(gè)2D/3DMIDI聲音核,它也集成了一個(gè)視頻DAC(數字到模擬轉換器)用于直接輸出到電視和一個(gè)SDIO(安全數字輸入/輸出)卡槽用于數據存儲或者額外的周邊擴展。

ZEVIO1020處理器的開(kāi)發(fā)平臺如圖1所示,它的通用處理內核ARM926EJ-S的工作主頻為150MHz,作為系統主處理器,可以完成控制和數據處理工作;ZSP400DSP處理器為視頻解碼和JPEG解碼工作提供了高效運行平臺,工作主頻為150MHz。除此之外,ZSP400具有雙MAC、雙算法邏輯單元(ALU)DSP核,每周期4指令,正交的載入/存儲指令集的特點(diǎn)。同時(shí)在ZEVIO1020的存儲結構中,DMA提供了高速數據轉移,能夠完成ARM處理器和DSP處理器雙核之間的高速數據傳輸。

ZEVIO1020平臺體系架構

圖1 ZEVIO1020平臺體系架構

4、UCOS-II在ZEVIO1020上的移植

UCOS-II操作系統是完全可剝奪型的實(shí)時(shí)內核,可以同時(shí)管理64個(gè)任務(wù),函數的調用和服務(wù)時(shí)間具有確定性。其內核提供的任務(wù)調度與管理,時(shí)間管理,任務(wù)間同步與通信,內存管理和中斷服務(wù)等功能,具有執行效率高、占用空間小、實(shí)時(shí)性能優(yōu)良和可擴展性強等特點(diǎn)。最小內核編譯可以達到2KB。UCOS-II的移植主要是編寫(xiě)和處理器有關(guān)的代碼,以及根據處理器設置中斷向量表,提供給操作系統一個(gè)時(shí)鐘作為系統時(shí)鐘。

OS_CPU_A.ASM是需要用戶(hù)根據不同處理器的體系結構編寫(xiě)的匯編文件。該文件包括了四個(gè)函數:

OSSTartHighRdy()、OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、OSTickISR()。OSStartHighRdy()的作用是運行就緒態(tài)任務(wù)優(yōu)先級最高的任務(wù)。OSCtxSw()是實(shí)現CPU在正常運行時(shí)任務(wù)間的切換,即對當前任務(wù)堆棧的保存和對高優(yōu)先級任務(wù)堆棧的彈出,使最高優(yōu)先級任務(wù)獲取CPU的控制權。OSIntCtxSw()是在中斷服務(wù)程序中執行切換功能的函數。OSTickISR()是系統時(shí)鐘的中斷服務(wù)程序。該程序執行的頻率為100HZ,主要功能是檢查是否有由于延時(shí)而被掛起的任務(wù)成為就緒任務(wù),如果有就調用OSIntCtxSw()進(jìn)行任務(wù)切換,從而運行高優(yōu)先級的任務(wù)。OS_CPU.C中主要編寫(xiě)任務(wù)堆棧初始化函數OSTaskStkInit()。

中斷向量表是系統產(chǎn)生中斷處理的索引表,系統會(huì )根據不同的中斷類(lèi)型引導它們進(jìn)入不同的中斷處理函數。ZEVIO1020雙核處理器提供了多種不同類(lèi)型的中斷處理,主要分為兩類(lèi):IRQ中斷和FIQ中斷。FIQ中斷是快速中斷處理函數,執行速度快,優(yōu)先級高,一般用于重要和對實(shí)時(shí)性要求較高的中斷處理。IRQ中斷是普通的中斷處理函數,一般的中斷處理都歸屬于這種類(lèi)型的中斷。在各種中斷同時(shí)觸發(fā)的情況下,中斷程序會(huì )根據各種中斷優(yōu)先級的設定來(lái)進(jìn)行比較,執行優(yōu)先級最高的中斷處理程序。對于UCOS-II的操作系統來(lái)說(shuō),需要一個(gè)系統時(shí)鐘作為操作系統的時(shí)鐘節拍,供操作系統調用時(shí)間函數使用。ZEVIO1020有4個(gè)Timer可供選擇,在這里選用Timer1作為系統時(shí)鐘,設置系統時(shí)鐘頻率為100HZ且為FIQ中斷。中斷處理程序的實(shí)現過(guò)程如圖2所示。

中斷處理流程圖

圖2中斷處理流程圖

5、軟件層的設計與實(shí)現

5.1、系統任務(wù)層的組成和優(yōu)先級的設計

系統任務(wù)層并行存在以下六個(gè)任務(wù):總控任務(wù)、音頻解碼任務(wù)、視頻解碼任務(wù)、JPEG圖片解碼任務(wù)、GUI界面任務(wù),圖片顯示任務(wù)。每個(gè)任務(wù)均有以下三部分組成:程序、任務(wù)的堆棧以及任務(wù)的狀態(tài)機。任務(wù)堆棧用以存儲CPU寄存器內容。當某任務(wù)由運行態(tài)變?yōu)槠渌麪顟B(tài)時(shí),CPU寄存器內容壓入相應任務(wù)堆棧,反之則將相應任務(wù)堆棧內容置入CPU寄存器。任務(wù)的狀態(tài)機記錄了當前任務(wù)的運行狀態(tài),當有新的消息轉發(fā)給任務(wù)時(shí),任務(wù)可根據狀態(tài)機查詢(xún)相應的狀態(tài),來(lái)決定下一步的具體操作。操作系統也可以查詢(xún)任務(wù)的狀態(tài)機來(lái)獲得當前任務(wù)的運行狀態(tài)。

優(yōu)先級的設定是根據任務(wù)的重要性和任務(wù)的實(shí)時(shí)性需求來(lái)定的??偪厝蝿?wù)優(yōu)先級最高,視頻任務(wù)的實(shí)時(shí)性大于音頻任務(wù)的實(shí)時(shí)性,所以將音頻的優(yōu)先級排在視頻解碼任務(wù)的后面。對于其他幾個(gè)任務(wù)一般沒(méi)有太多的約束,我們可以任意安排其優(yōu)先級。優(yōu)先級從高到底的順序排列:總控任務(wù),視頻解碼任務(wù),音頻解碼任務(wù),JPEG解碼任務(wù),圖片顯示任務(wù),GUI界面任務(wù)。

5.2、系統任務(wù)間的消息通信機制與狀態(tài)機的設計

在數碼相框這個(gè)系統中,消息的類(lèi)型主要有兩類(lèi):

一是外部輸入(鍵盤(pán))轉化的消息;二是任務(wù)之間相互傳遞的消息。第一類(lèi)消息不知道消息的接受方,直接交給總控任務(wù)來(lái)處理,總控任務(wù)通過(guò)查詢(xún)狀態(tài)機獲得各個(gè)任務(wù)目前的運行情況后,進(jìn)行內部消息的轉換,轉發(fā)給目標任務(wù),由目標任務(wù)來(lái)具體處理。目標任務(wù)接受到總控任務(wù)傳送過(guò)來(lái)的內部消息之后,查詢(xún)自身的狀態(tài)機,執行相應的處理。每個(gè)任務(wù)都有一個(gè)時(shí)間點(diǎn)來(lái)查詢(xún)新的消息。在音頻解碼任務(wù)中這個(gè)時(shí)間點(diǎn)設在解碼數據流后填充buffer和播放buffer互換的時(shí)刻。圖片顯示任務(wù)是一個(gè)不斷循環(huán)的顯示過(guò)程,利用每次循環(huán)結束的時(shí)刻查詢(xún)新的消息。第二類(lèi)消息是任務(wù)之間相互傳遞的消息,任務(wù)知道消息的接受方。因此在兩個(gè)需要相互通信的任務(wù)之間直接建立消息郵箱和信號量進(jìn)行同步和通信。

狀態(tài)機是記錄任務(wù)運行狀態(tài)的一種工具,對于數碼相框這個(gè)系統來(lái)說(shuō),在不同的運行狀況下對于相同按鍵的處理是不同的,所以必須通過(guò)狀態(tài)機來(lái)實(shí)現任務(wù)的調度和處理。本文的狀態(tài)機實(shí)現采取分塊的思想,即一級一級從上往下對消息進(jìn)行處理。上級的狀態(tài)機不需要對消息的內容進(jìn)行具體的處理,只要明確傳遞給下面的哪一個(gè)狀態(tài)機來(lái)具體處理。針對數碼相框這個(gè)產(chǎn)品,本文設計了兩級狀態(tài)機的實(shí)現機制。一級是總控任務(wù)的狀態(tài)機,二級是各個(gè)應用程序的狀態(tài)機??偪厝蝿?wù)的狀態(tài)機,主要用來(lái)對外部消息的轉發(fā);應用程序的狀態(tài)機主要處理啟動(dòng),退出,暫停等具體操作。如圖3所示,總控任務(wù)查詢(xún)到有新的消息進(jìn)來(lái)后,首先查詢(xún)當前各個(gè)任務(wù)的運行情況,然后判別消息的內容,將消息轉換成內部消息分發(fā)給當前任務(wù)或者即將運行的任務(wù)。應用程序的任務(wù)狀態(tài)機接受到總控狀態(tài)機發(fā)送過(guò)來(lái)的內部消息之后,也是查詢(xún)自身的狀態(tài)機,并且檢查消息的正確性,然后根據自身的運行狀態(tài)執行相應的操作。具體如圖4所示。

總控任務(wù)的狀態(tài)機流程

圖3總控任務(wù)的狀態(tài)機流程

應用程序的狀態(tài)機流程圖

圖4 應用程序的狀態(tài)機流程圖

5.3、數碼相框系統的整體實(shí)現過(guò)程

系統上電后從flash中執行boot.s啟動(dòng)代碼,boot.s的主要作用就是初始化SDRAM,設置PLL,將保存在flash中的CODE拷貝到SDRAM中。因為flash中的數據可以永久保存,不會(huì )因為掉電而消失,而SDRAM則不行。

在主函數main中初始化UCOS-II操作系統,創(chuàng )建總控任務(wù)、視頻解碼任務(wù)、音頻解碼任務(wù)、圖片顯示任務(wù)、GUI界面任務(wù),同時(shí)創(chuàng )建信號量和mailbox等系統資源等待應用程序調用,啟動(dòng)UCOS-II操作系統。此后CPU的控制權交給操作系統,操作系統將CPU的控制權首先給予優(yōu)先級最高的總控任務(wù)。

總控任務(wù)運行后,驅動(dòng)所有外接設備,包括LCD驅動(dòng)、SPU驅動(dòng)、GUI驅動(dòng)、Timer驅動(dòng)、雙核的驅動(dòng),開(kāi)啟必要的中斷位,隨后總控任務(wù)開(kāi)始輪詢(xún)外部消息,有消息進(jìn)來(lái)時(shí)根據上述描述的狀態(tài)機,傳遞給其他任務(wù),運行其他任務(wù),同時(shí)保證每隔5個(gè)時(shí)鐘節拍重新輪詢(xún)一次消息隊列,處理新的外部消息,沒(méi)有新的消息立即釋放CPU的控制權,返回正在運行的任務(wù)。

6 結束語(yǔ)

本文討論了UCOS-II操作系統在ZEVIO1020上的移植過(guò)程,闡述了移植過(guò)程中的幾個(gè)主要步驟,同時(shí)針對數碼相框這個(gè)電子消費產(chǎn)品給出了整個(gè)系統任務(wù)的設計方法以及如何進(jìn)行任務(wù)間的消息傳遞方案。解決了系統中多任務(wù)之間相互切換和多任務(wù)同時(shí)運行的困窘。充分挖掘了UCOS-II操作系統的特性,靈活運用了操作系統的資源并且予以實(shí)現。實(shí)驗測試結果顯示,各種任務(wù)模塊可以在預想的方案中實(shí)現靈活的調度。

基于UCOS-II操作系統的數碼相框實(shí)物圖

圖5 基于UCOS-II操作系統的數碼相框實(shí)物圖

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: 應用 相框 數碼 操作系統 UCOS-II

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>