MIPS架構(gòu)的醫(yī)院智能導(dǎo)診系統(tǒng)設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:通過(guò)研究基于MIPS架構(gòu)的SMP8654芯片的硬件架構(gòu),并且利用芯片內(nèi)部的圖形加速引擎GFX的方式實(shí)現(xiàn)了具有高清視頻顯示和圖片文字處理功能的播放器。系統(tǒng)以嵌入式Linux和MiniGUI為平臺(tái)設(shè)計(jì)了智能導(dǎo)診系統(tǒng),提高了醫(yī)院的導(dǎo)診就醫(yī)的服務(wù)效率。智能導(dǎo)診系統(tǒng)能夠播放醫(yī)院相關(guān)的健康宣傳資料、專(zhuān)家排班信息。
關(guān)鍵詞:MIPS;Linux;MiniGUI;智能導(dǎo)診系統(tǒng)
MIPS微處理器是指無(wú)內(nèi)部互鎖流水級(jí)的處理器,它是由斯坦福大學(xué)的Hennessy教授領(lǐng)導(dǎo)的研究小組研制出來(lái)的。MIPS微處理器采用RISC(Recluced InstructionSet Computer)的設(shè)計(jì)原則,只支持有限的機(jī)器指令以及簡(jiǎn)單的算術(shù)指令,通過(guò)提供大量的內(nèi)部寄存器減少內(nèi)存訪問(wèn)次數(shù)。MIPS有32個(gè)通用寄存器,每個(gè)寄存器擁有32位的地址空間。系統(tǒng)通過(guò)研究基于MIPS架構(gòu)的SMP8654芯片,設(shè)計(jì)和實(shí)現(xiàn)了高清播放器的視頻播放以及圖片字體顯示功能。SMP8654解決方案是Sigma公司依據(jù)MIPS設(shè)計(jì)公司指導(dǎo)的全新設(shè)計(jì)方案,是Sigma公司專(zhuān)為滿足高清視頻播放應(yīng)用需求而設(shè)計(jì)的全新芯片。和基于ARM架構(gòu)的低端芯片相比,SMP8654的視頻處理能力更加優(yōu)越。
1 基于SMP8654芯片的高清播放器
1.1 SMP8654硬件介紹
SMP8654芯片的內(nèi)部,有一個(gè)MIPS 24kf系列的主CPU芯片,工作頻率為500 MHz。在主CPU芯片的內(nèi)部,具有1個(gè)32 KB的指令Cache和1個(gè)32 KB的數(shù)據(jù)Cache、2個(gè)可編程計(jì)時(shí)器以及3個(gè)獨(dú)立的中斷控制器和2路UART(Universal Asynchronous Receiver/Transmitter)。主CPU內(nèi)部采用雙總線結(jié)構(gòu),G-bus是主總線,CPU通過(guò)此總線訪問(wèn)外部功能單元的各狀態(tài)寄存器,而對(duì)主CPU芯片內(nèi)部的中斷控制器、計(jì)時(shí)器等的訪問(wèn)是通過(guò)將L-bus映射到G-Bus上的方式進(jìn)行的。主CPU內(nèi)部有一個(gè)高效的乘除運(yùn)算單元(Multiply/Divide Unit)及浮點(diǎn)數(shù)運(yùn)算單元(FPU),還有一個(gè)增強(qiáng)的JTAG調(diào)試模塊,用于調(diào)試應(yīng)用程序及內(nèi)核代碼。
SMP8654芯片內(nèi)部有一個(gè)IPU(Interrupt ProcesslngUnit)。這個(gè)MIPS 24kf系列的32位處理器專(zhuān)門(mén)處理那些需要低延時(shí)的應(yīng)用需求。它主要處理從視頻處理子系統(tǒng)(Video Processing Subsystem)所產(chǎn)生的中斷。它的時(shí)鐘頻率為333 MHz,而且還有16 KB的指令Cache和16KB數(shù)據(jù)Cache。
SMP8654芯片包含兩個(gè)DDR-DRAM控制器,每一個(gè)控制都支持高達(dá)512 MB的DDR2內(nèi)存,這些外部存儲(chǔ)器可以為音頻、視頻以及數(shù)據(jù)提供緩沖區(qū),并且能存放硬件模塊的臨時(shí)數(shù)據(jù)。
1.2 SMP8654的視頻及音頻處理
1.2.1 視頻解碼子系統(tǒng)
SMP8654的視頻解碼子系統(tǒng)(Video Decoder Subsystem)可以解碼HDSMPTE、H.264、HD WMV9、AVS、MPEG1、MPEG2等視頻格式的視頻文件。SMP8654的視頻解碼系統(tǒng)執(zhí)行特定解碼算法,它是一種基于處理器和電路邏輯方式的混合架構(gòu)。能同時(shí)解碼的視頻文件數(shù)目是由視頻的格式以及所要呈現(xiàn)的分辨率決定的。SMP8654可以支持包括IPTV、AVCHD、MSTV的視頻解碼要求。視頻處理引擎是一個(gè)16位的RISC處理器,視頻解壓算法的密集計(jì)算部分是由此部分處理的。
1.2.2 視頻處理子系統(tǒng)
視頻處理子系統(tǒng)(Video Processing Subsystem)從內(nèi)存中檢索圖形和視頻圖像,將這些圖像混合并且縮放至某個(gè)顯示器所要求的分辨率并且將其呈現(xiàn)出來(lái)。視頻處理子系統(tǒng)可以控制顏色、分辨率以及色彩飽和度,并且能處理視頻數(shù)據(jù)轉(zhuǎn)換,選擇視頻的輸出模式(模擬信號(hào)的輸出模式包括RGB、YPbPr)。視頻處理子系統(tǒng)還有一個(gè)2D圖形加速功能模塊。智能導(dǎo)診系統(tǒng)利用此GFX引擎實(shí)現(xiàn)了文字和圖片的高清顯示功能。
1.2.3 音頻處理子系統(tǒng)
SMP8654芯片的集成音頻處理子系統(tǒng)(Audio)Processing Subsystem)是一個(gè)為用戶專(zhuān)門(mén)設(shè)計(jì)的32位數(shù)字信號(hào)處理器,音頻的解碼和操作是由這個(gè)專(zhuān)用的DSP處理的。這個(gè)DSP工作在333 MHz的時(shí)鐘頻率下,指令和數(shù)據(jù)是分開(kāi)存儲(chǔ)的,DSP通過(guò)系統(tǒng)總線取得指令,通過(guò)數(shù)據(jù)總線獲取需要解碼的音頻數(shù)據(jù)。和基于ARM架構(gòu)的處理器一樣,它有一個(gè)32位的指令系統(tǒng),同時(shí)與之對(duì)應(yīng)了一個(gè)16位的指令集,通過(guò)Load/Store從內(nèi)存裝載數(shù)據(jù)到DSP的相關(guān)寄存器中進(jìn)行處理。
1.2.4 高清播放機(jī)硬件架構(gòu)
高清播放機(jī)硬件架構(gòu)如圖1所示。高清播放器實(shí)現(xiàn)的功能主要包括視頻處理以及圖片文字顯示。硬件架構(gòu)中的重要部分包括視頻解碼子系統(tǒng)、視頻處理子系統(tǒng)、音頻處理子系統(tǒng)。這里的HDD表示可選的硬盤(pán),通過(guò)內(nèi)部的SATA接口控制。提供對(duì)USB2.0協(xié)議支持以及802.11n協(xié)議的支持,也就是說(shuō)播放器可以從網(wǎng)絡(luò)中讀取各種視頻資源,從硬盤(pán)或者是USB等移動(dòng)盤(pán)中獲得數(shù)據(jù)。視頻處理子系統(tǒng)中的GFX代表的是圖形加速引擎,通過(guò)Sigma公司提供的SDK可以很容易地操作這些硬件,實(shí)現(xiàn)硬件加速功能。在智能導(dǎo)診系統(tǒng)的軟件部分,介紹了如何利用硬件特性加速文字和圖片的繪制過(guò)程。在智能導(dǎo)診系統(tǒng)中,醫(yī)院HIS系統(tǒng)中的病人掛號(hào)信息通過(guò)TCP/IP傳遞到此硬件播放器,然后再由硬件播放器處理,將病人信息排隊(duì)到相關(guān)隊(duì)列中,這樣病人就可以在專(zhuān)門(mén)的等候區(qū)休息等候了。
[!--empirenews.page--]
2 基于嵌入式Linux和MiniGUI的主控程序
2.1 嵌入式Linux
Linux是一個(gè)完全免費(fèi)的開(kāi)源操作系統(tǒng),內(nèi)核可以被裁剪到134 KB左右。Linux是一個(gè)能夠適應(yīng)多種CPU和硬件平臺(tái)的操作系統(tǒng),裁剪之后的Linux系統(tǒng)用于這些設(shè)備中執(zhí)行資源管理、任務(wù)調(diào)度、存儲(chǔ)空間分配等任務(wù)。嵌入式應(yīng)用系統(tǒng)的開(kāi)發(fā)一般可以分為如下幾個(gè)步驟:交叉編譯工具的建立,Bootloader的編譯和燒寫(xiě),編譯內(nèi)核并移植到開(kāi)發(fā)板,文件系統(tǒng)的編譯和燒寫(xiě)。交叉編譯是嵌入式系統(tǒng)開(kāi)發(fā)中需要用到的一個(gè)常見(jiàn)技術(shù),其主要特征是嵌入式設(shè)備上的可執(zhí)行程序通常是在另外一臺(tái)機(jī)器上編譯生成的。通常將前者稱(chēng)為目標(biāo)機(jī)器(Target),后者稱(chēng)為主機(jī)(Host)。主機(jī)擁有的資源豐富很適合在上面編譯機(jī)器相關(guān)的代碼,這種技術(shù)為軟件的不同平臺(tái)移植創(chuàng)造了便利條件。交叉編譯工具配置在主機(jī)(Host)上編譯及配置環(huán)境變量后,就可以用來(lái)編譯Bootloader、內(nèi)核和文件系統(tǒng)。Bootloader是一個(gè)啟動(dòng)加載Linux內(nèi)核的固件程序,有點(diǎn)類(lèi)似于PC機(jī)的BIOS程序,在完成硬件初始化以及內(nèi)存映射等操作之后,通常會(huì)將外部存儲(chǔ)介質(zhì)上存放的內(nèi)核鏡像加載到RAM中,然后跳轉(zhuǎn)到指定的內(nèi)存位置執(zhí)行。
2.2 MiniGUI用戶界面
GUI(Graphical User Interface)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。系統(tǒng)中所要闡述的高清播放機(jī)上需要提供人機(jī)交互界面,控制諸如視頻的暫停、播放、文件更新以及播放機(jī)的聲音控制和開(kāi)關(guān)機(jī)控制等圖形界面。智能導(dǎo)診系統(tǒng)中使用的圖形用戶界面采用的是MiniGUI。MiniGUI是一個(gè)跨平臺(tái)的面向嵌入式系統(tǒng)的輕量級(jí)圖形用戶界面支持系統(tǒng),可在Linux/μClinux、eCos、μC/OS-II、VxWorks、pSOS、ThreadX等操作系統(tǒng)以及Win32平臺(tái)上運(yùn)行,廣泛應(yīng)用于手持信息終端、機(jī)頂盒、工業(yè)控制系統(tǒng)、便攜式多媒體播放器機(jī)等產(chǎn)品和領(lǐng)域。
3 播放機(jī)軟件系統(tǒng)設(shè)計(jì)
3.1 智能導(dǎo)診系統(tǒng)的軟件架構(gòu)
SMP8654為應(yīng)用開(kāi)發(fā)提供分層服務(wù)架構(gòu),軟件系統(tǒng)設(shè)計(jì)主要根據(jù)SMP8654分層服務(wù)模型,找出最優(yōu)化的設(shè)計(jì)方案。智能導(dǎo)診通過(guò)研究DCC的控制邏輯,及Sigma公司的SDK文檔,設(shè)計(jì)出了如圖2所示的SMP8654高清播放機(jī)的軟件系統(tǒng)架構(gòu)。智能導(dǎo)診系統(tǒng)首先對(duì)硬件平臺(tái)初始化,接著初始化有線或者無(wú)線網(wǎng)絡(luò)(這部分主要作用是網(wǎng)絡(luò)接口卡初始化操作,日志部分初始化是跟蹤和調(diào)試應(yīng)用程序的重要組成部分);接著創(chuàng)建MiniGUI主窗口,最后進(jìn)入消息循環(huán)。
當(dāng)MiniGUI接收到MSG_CLOSE消息時(shí),由HWNDDESKTOP向主窗口發(fā)送退出消息,至此程序結(jié)束,播放機(jī)被關(guān)閉;當(dāng)播放機(jī)接收到圖片顯示命令時(shí),將命令消息存入到消息隊(duì)列中,這里要?jiǎng)?chuàng)建消息隊(duì)列是因?yàn)镸iniGUI在接收到用戶的各種不同命令時(shí),都會(huì)將命令解析并且存入到任務(wù)隊(duì)列中,由任務(wù)派發(fā)器將任務(wù)發(fā)送到不同模塊處理。MiniGUI的主程序會(huì)根據(jù)用戶選擇的視頻及音頻文件,選擇將消息發(fā)送到視頻解碼進(jìn)程處理,當(dāng)用戶選擇打開(kāi)某個(gè)高清的圖片時(shí),消息隊(duì)列中會(huì)保留圖片大小、圖片格式、圖片的顯示時(shí)間等控制信息。這里要使用任務(wù)隊(duì)列的原因其實(shí)很簡(jiǎn)單,分離出播放器的一個(gè)個(gè)任務(wù),讓不同的軟件服務(wù)模塊處理。如果要播放視頻,調(diào)度程序會(huì)將任務(wù)隊(duì)列中的視頻播放任務(wù)派發(fā)給視頻解碼進(jìn)程處理。如果要使用GFX引擎高效率繪制圖片,則任務(wù)被分派到高清圖片處理進(jìn)程處理。
智能導(dǎo)診系統(tǒng)服務(wù)進(jìn)程主要負(fù)責(zé)從醫(yī)院HIS信息系統(tǒng)的接口函數(shù)中獲得當(dāng)前病人的掛號(hào)信息,并且通過(guò)TCP發(fā)送到高清播放機(jī)上,最后通過(guò)MiniGUI的Draw Text函數(shù)將相關(guān)病人信息以列表的方式顯示在預(yù)先定義的排隊(duì)隊(duì)列中。這里的視頻解碼進(jìn)程是獨(dú)立的進(jìn)程,主控程序和此進(jìn)程的通信是通過(guò)Linux的消息隊(duì)列機(jī)制實(shí)現(xiàn)的。消息隊(duì)列是一種內(nèi)核標(biāo)示,兩個(gè)進(jìn)程之間的交互是通過(guò)調(diào)用msgsnd和msgrecv這樣的函數(shù)實(shí)現(xiàn)的,只要兩個(gè)進(jìn)程的消息隊(duì)列標(biāo)識(shí)是一致的,進(jìn)程之間就可以交互。當(dāng)MiniGUI接收到退出消息時(shí),會(huì)向視頻解碼進(jìn)程發(fā)送退出消息,讓視頻解碼進(jìn)程清空所占用的系統(tǒng)資源。[!--empirenews.page--]
SMP8654分層服務(wù)模型如圖3所示。最下面的一層是相關(guān)硬件,如CPU、視頻解碼器、音頻解碼器、并行I/O接口。中間的一層MRUA(Movim iento rectiline unitormemente acelerado)提供了訪問(wèn)這些硬件的抽象接口,另外DCC(Decoding Chain Control)是通過(guò)訪問(wèn)MRUA的接口實(shí)現(xiàn)對(duì)視頻播放控制、音頻解碼的操作。最頂層是軟件播放器,可以基于DCC實(shí)現(xiàn)網(wǎng)絡(luò)流媒體應(yīng)用,或者定制自己的軟件播放器。
3.2 利用圖形加速引擎優(yōu)化文字和高清圖片顯示
DCC是為應(yīng)用程序提供的編程接口,而MRUA面向底層硬件,為上層的DCC提供硬件抽象和功能接口。在深入理解了DCC是如何控制硬件顯示文字、處理圖片以及播放視頻之后,智能導(dǎo)診系統(tǒng)利用MRUA庫(kù)函數(shù)直接操作硬件特性,加快字體顯示、圖片處理效率,以及提升視頻播放等各方面性能。DCC提供的多個(gè)對(duì)象為應(yīng)用程序完成實(shí)際的功能提供函數(shù)接口,這些對(duì)象包括:
①Route。可以將Route理解為某個(gè)具體的媒體內(nèi)容(Content)到硬件視頻混合器(Hardware Video Mixer)的數(shù)據(jù)通道,它只負(fù)責(zé)把具體的媒體內(nèi)容傳送到硬件視頻混合器中。
②Surface??梢詫urface理解為視頻對(duì)象層(Video Object layer)。視頻信息,屏幕顯示以及字幕組成了一個(gè)完整的Content。在每一個(gè)Route對(duì)象中,通常會(huì)存在相同類(lèi)型的多個(gè)Surface對(duì)象。
③VideoSource??梢詫ideoSource理解為一個(gè)專(zhuān)為Surface生成圖片的生產(chǎn)者,這個(gè)生成者可能是一個(gè)硬件視頻解碼器(Hardware MPEG decoder)。
④AudioMixer。可以將AudioMixer理解為一個(gè)類(lèi)似Route的東兩,它代表的也是一個(gè)數(shù)據(jù)通道,只不過(guò)它只負(fù)責(zé)將AudioSource這個(gè)音頻生產(chǎn)者生成的音頻幀信息組合成一個(gè)輸出。
⑤AudioSource??梢詫udioSource理解為音頻幀的生產(chǎn)者。
⑥D(zhuǎn)emuxSource。它是一個(gè)可分離流,并且將數(shù)據(jù)發(fā)送到視頻、音頻解碼器的一個(gè)對(duì)象。當(dāng)然也可以將它理解為一個(gè)生成者,負(fù)責(zé)將流(stream)數(shù)據(jù)分離出音頻和視頻信息,并發(fā)送到相關(guān)處理單元處理。
如圖3所示,流解析器從內(nèi)存中檢索到與文件有關(guān)的信息之后,將數(shù)據(jù)流分解,然后組包成視頻解碼器以及音頻解碼器所處理的數(shù)據(jù),并且交由DSP和Display Engine這樣的設(shè)備進(jìn)行處理。這些都可以由DCC控制,是由MRUA層抽象出的相關(guān)硬件功能。只要通過(guò)DCC層去控制相關(guān)硬件設(shè)備,便可以實(shí)現(xiàn)圖片和文字的高清顯示。下面將介紹如何通過(guò)DCC去控制GFX引擎實(shí)現(xiàn)圖片和文字的顯示。
GFX在圖中沒(méi)有畫(huà)出,它是某個(gè)具體的圖形加速設(shè)備。當(dāng)要播放一個(gè)高清的圖片或者繪制文字時(shí),通常要經(jīng)過(guò)幾個(gè)步驟:RUA實(shí)例初始化,DCC實(shí)例初始化,設(shè)置圖片的顯示窗口,初始化GFX引擎,執(zhí)行繪制,清空資源并退出。下面以偽碼的方式給出其具體實(shí)現(xiàn)過(guò)程:
int main(int argc,char*argv[]){
創(chuàng)建RUA實(shí)例;
創(chuàng)建DCC對(duì)象實(shí)例;
初始化圖片的顯示選項(xiàng);
初始化視頻的濕示選項(xiàng);
初始化播放控制選項(xiàng);
從命令行參數(shù)獲得欲顯示的文件信息以及圖片、視頻播放控制選項(xiàng)(如果沒(méi)有就使用默認(rèn)值)
裝載相關(guān)硬件單元微碼;
創(chuàng)建硬件混合器Mixer;
創(chuàng)建ScaIer對(duì)象;
//scaler=EMHWLIB_MODULE(DispGFXMultiScaler,0);
為當(dāng)前的Mixer對(duì)象創(chuàng)建一個(gè)關(guān)聯(lián)Scaler對(duì)象的索引;
初始化GFX引擎;
設(shè)置GFX對(duì)象的各通道屬性;
開(kāi)始在GFX上投遞繪制請(qǐng)求;
關(guān)閉GFX引擎,并依次關(guān)閉DCC實(shí)例對(duì)象,RUA實(shí)例對(duì)象;
}
結(jié)語(yǔ)
智能導(dǎo)診系統(tǒng)基于MiniGUI和SMP8654的SDK完成了視頻播放、文字圖片顯示的功能?;贛iniGUI的圖形及文字繪制函數(shù),如CreateLog Font、DrawText、LoadBitmap等的使用以及利用與硬件相關(guān)的圖形加速引擎繪制圖片和文件相結(jié)合的方式,增加了系統(tǒng)的圖形繪制效果,提升了智能導(dǎo)診系統(tǒng)性能。
綜上所述,系統(tǒng)基于MIPS架構(gòu)設(shè)計(jì)實(shí)現(xiàn)了高清播放機(jī)所要完成的視頻播放以及圖片文字顯示功能。通過(guò)研究基于MIPS架構(gòu)下的高清播放機(jī)最終選擇了速度比較好的高清播放機(jī)芯片SMP8654,使得視頻處理更加穩(wěn)定,圖片的加速解碼及顯示的速度更快。基于此架構(gòu)的系統(tǒng),可以擴(kuò)展到各種信息發(fā)布系統(tǒng)中,如醫(yī)院的信息發(fā)布系統(tǒng)、車(chē)載娛樂(lè)系統(tǒng),具有很好的應(yīng)用前景。