吳吉祥,夏靖波,杜華樺
(空軍工程大學(xué)電訊工程學(xué)院,西安 710077)
由于液晶顯示器具有對(duì)比度高、在陽光下清晰可見、以及重量輕等特點(diǎn),液晶式電子水平狀態(tài)指示儀(EHSI)在飛機(jī)座艙中得到普遍應(yīng)用。但是,液晶式電子水平狀態(tài)指示儀的應(yīng)用會(huì)遇到以下問題[1]。1)圖形處理速度。光柵式圖形顯示系統(tǒng)在顯示一個(gè)圖形前,需要進(jìn)行圖形掃描變換、反走樣和圖形旋轉(zhuǎn)等大量運(yùn)算,隨著顯示分辨率的提高,要處理的像素越來越多,而所允許的處理時(shí)間卻受屏幕的刷新率所限制。所以實(shí)時(shí)圖形生成系統(tǒng)對(duì)處理器處理速度提出了非常高的要求。2)顯示幀存的設(shè)計(jì)。隨著圖形顯示分辨率的提高,要顯示的像素越來越多,將待顯示的像素寫入幀存是一個(gè)頗耗時(shí)間的操作,這將影響圖形的實(shí)時(shí)生成。3)EHSI所顯示的全羅盤畫面,是需要根據(jù)飛機(jī)的參數(shù)實(shí)時(shí)變化的動(dòng)畫,動(dòng)畫的顯示是先把它在舊的位置擦除,再在相近的新位置生成,而要正確地擦除舊畫面,需要對(duì)圖形顯示的狀態(tài)作一串精確的記錄,保持這一串存儲(chǔ)記錄需要非常大的數(shù)據(jù)結(jié)構(gòu),這影響圖形實(shí)時(shí)生成。因此,如何加快圖形的處理和顯示速度,提高圖形的顯示質(zhì)量是電子水平狀態(tài)指示儀設(shè)計(jì)的關(guān)鍵所在。基于DSP和各種輔助設(shè)備的硬件平臺(tái)來實(shí)現(xiàn)電子飛行儀表顯示系統(tǒng)是當(dāng)前比較主流的方法[2-3],DSP 主要是完成圖形的實(shí)時(shí)生成和處理,輔助設(shè)備主要用來完成圖形顯示的控制和加速[4]。本文打破了傳統(tǒng)的通過圖形實(shí)時(shí)生成來進(jìn)行顯示的思路,提出了一種新的設(shè)計(jì)思路,即基于嵌入式Linux實(shí)時(shí)系統(tǒng)的電子水平狀態(tài)指示儀設(shè)計(jì)方案。
本軟件基于由ARM處理器、LCD顯示器、存儲(chǔ)器和各種外圍接口組成的最小硬件平臺(tái)。如圖1所示,信息處理機(jī)處理后的飛參信息通過CAN總線傳輸?shù)紸RM主控芯片,ARM主控芯片將各種飛參信息顯示到LCD上。

圖1 EHSI硬件結(jié)構(gòu)Fig.1 The structure of EHSI hardware
為了使飛行員能準(zhǔn)確、直觀地獲取當(dāng)前的飛參信息,本軟件遵循以下設(shè)計(jì)原則。
1)信息分級(jí)顯示原則。根據(jù)信息的重要性程度確定優(yōu)先級(jí),優(yōu)先級(jí)高的信息為自動(dòng)顯示,而優(yōu)先級(jí)較低的信息為選擇性顯示[5]。這樣可以減小信息密度,降低飛行員的壓力。
2)視覺最佳原則。優(yōu)先級(jí)高的信息采用醒目的顏色,相關(guān)信息采用相同顏色。例如,告警信息采用紅色,刻度及相關(guān)信息采用白色,羅盤指針及與之對(duì)應(yīng)的導(dǎo)航信息采用綠色。盡量綜合顯示信息,減少顏色種類,減輕飛行員視覺負(fù)擔(dān)[6]。
3)控制面板最簡(jiǎn)原則。控制面板的設(shè)計(jì)既要具有易操作性,又要盡可能的簡(jiǎn)化,尋求易操作性和最簡(jiǎn)化的最佳結(jié)合。
軟件的設(shè)計(jì)思路是根據(jù)信息處理機(jī)傳輸來的飛參信息,從圖形庫中讀取并顯示相應(yīng)的圖片,這樣避免了因圖形的實(shí)時(shí)生成和處理所帶來的各種問題。具體思路為:運(yùn)用“貼圖”技術(shù),即通過寫Linux實(shí)時(shí)操作系統(tǒng)[7]下的FB設(shè)備實(shí)現(xiàn)寫內(nèi)存的技術(shù),來實(shí)現(xiàn)圖片的顯示;采用Linux下進(jìn)程間通信技術(shù)來實(shí)現(xiàn)人機(jī)交互進(jìn)程、數(shù)據(jù)讀取進(jìn)程和屏幕刷新進(jìn)程三者之間的通信;采用多級(jí)緩沖技術(shù)克服圖片顯示過程中遇到的閃爍及走樣問題,提高圖片顯示質(zhì)量。
軟件運(yùn)行是基于消息處理機(jī)制的。操作系統(tǒng)負(fù)責(zé)接受消息,并且對(duì)消息進(jìn)行排隊(duì)處理,消息處理由系統(tǒng)回調(diào)函數(shù)中的循環(huán)體實(shí)現(xiàn)。如圖2所示,軟件主要處理3類消息:一種是系統(tǒng)初始化信息,用于各種設(shè)備的初始化;其二是定時(shí)消息,用于驅(qū)動(dòng)數(shù)據(jù)接收進(jìn)程和屏幕刷新進(jìn)程;其三是人機(jī)交互消息,用于處理飛行員的各種操作。

圖2 EHSI消息機(jī)制Fig.2 The message mechanism of EHSI software
“貼圖”技術(shù)是指通過讀寫Linux系統(tǒng)下的FB設(shè)備來讀寫顯存把圖片直接顯示在屏上的技術(shù)。圖片不需要進(jìn)行實(shí)時(shí)的生成處理,系統(tǒng)只需要從圖形庫中直接讀取就可以實(shí)現(xiàn)儀表的各種顯示。FrameBuffer即FB設(shè)備是出現(xiàn)在2.2.xx內(nèi)核當(dāng)中的一種驅(qū)動(dòng)程序接口。這種接口將顯示設(shè)備抽象為幀緩沖區(qū)。該驅(qū)動(dòng)程序的設(shè)備文件一般是/dev/fb0、/dev/fb1等。
FrameBuffer中內(nèi)存塊分布如圖3所示。Frame-Buffer的顯示緩沖區(qū)位于Linux核心態(tài)地址空間,在Linux中每個(gè)應(yīng)用程序都有自己的虛擬地址空間,在應(yīng)用程序中是不能直接訪問物理緩沖區(qū)地址的,為此在Linux的文件操作結(jié)構(gòu)中提供mmap函數(shù)可將文件的內(nèi)存映射到用戶空間,對(duì)于幀緩沖設(shè)備則可通過映射操作將屏幕緩沖區(qū)的物理地址映射到用戶空間的一段虛擬地址中,之后用戶可以通過讀寫這段虛擬地址訪問屏幕緩沖區(qū),在屏幕上畫圖[3]。

圖3 內(nèi)存塊分布Fig.3 Memory block distribution
用戶可以將它看成是顯示內(nèi)存的一個(gè)映像,將其映射到進(jìn)程地址空間之后,就可以直接進(jìn)行讀寫操作,而寫操作可以立即顯示在屏幕上。圖形庫中的圖片是使用Adobe Illustrator CS3繪制的BMP格式的圖片。
進(jìn)程間通信是內(nèi)核用于協(xié)調(diào)進(jìn)程間相互通信的活動(dòng)。Linux支持一部分進(jìn)程間的通信(Inter-Process Communication,IPC)機(jī)制[4]。信號(hào)和管道是兩種 IPC機(jī)制。
信號(hào)機(jī)制是Unix系統(tǒng)使用最早的進(jìn)程間通信機(jī)制之一,主要用于向一個(gè)或多個(gè)進(jìn)程發(fā)異步事件信號(hào),信號(hào)可以通過鍵盤中斷觸發(fā),也可以由進(jìn)程訪問虛擬內(nèi)存中不存在的地址這樣的錯(cuò)誤來產(chǎn)生。信號(hào)機(jī)制還可以用于shell向它們的子進(jìn)程發(fā)送作業(yè)控制命令。Linux使用存貯在每個(gè)進(jìn)程task_struct結(jié)構(gòu)中的信息實(shí)現(xiàn)信號(hào)機(jī)制,它支持的信號(hào)數(shù)受限于處理器的字長(zhǎng)。當(dāng)前未處理的信號(hào)記錄在signal域中,并把阻塞信號(hào)掩碼對(duì)應(yīng)位設(shè)置為阻塞狀態(tài)。但對(duì)SIGSTOP和SIGKILL信號(hào)來說,所有的信號(hào)都被設(shè)置為阻塞狀態(tài)。如果一個(gè)被阻塞的信號(hào)產(chǎn)生了,將一直保持未處理狀態(tài),直到阻塞被取消。
管道是單向的字節(jié)流,它可以把一個(gè)進(jìn)程的標(biāo)準(zhǔn)輸出與另一個(gè)進(jìn)程的標(biāo)準(zhǔn)輸入連接起來。在Linux系統(tǒng)中,管道用兩個(gè)指向同一個(gè)臨時(shí)性VFS索引節(jié)點(diǎn)的文件數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)。這個(gè)臨時(shí)性的VFS索引節(jié)點(diǎn)指向內(nèi)存中的一個(gè)物理頁面。表明每個(gè)文件數(shù)據(jù)結(jié)構(gòu)包含指向不同文件操作例程向量的指針。一個(gè)例程用于寫管道,另一個(gè)用于從管道中讀數(shù)據(jù)。Linux必須同步對(duì)管道的訪問,使讀進(jìn)程和寫進(jìn)程步調(diào)一致。Linux使用鎖、等待隊(duì)列和信號(hào)量這3種方式來實(shí)現(xiàn)同步。
在該系統(tǒng)的設(shè)計(jì)中,通過信號(hào)機(jī)制實(shí)現(xiàn)人機(jī)交互進(jìn)程與數(shù)據(jù)讀取進(jìn)程和屏幕刷新進(jìn)程之間的通信,通過管道機(jī)制實(shí)現(xiàn)數(shù)據(jù)讀取進(jìn)程與屏幕刷新進(jìn)程之間的通信。
多級(jí)緩沖技術(shù),利用在計(jì)算機(jī)內(nèi)存中開辟多個(gè)圖形緩沖區(qū),實(shí)現(xiàn)圖形的分層,后臺(tái)處理,避免了前臺(tái)圖形刷新顯示時(shí)出現(xiàn)的圖像閃爍問題,并提高了圖形的顯示速度[8-10]。
本設(shè)計(jì)方案中,在內(nèi)存中開辟3級(jí)圖形緩沖區(qū),實(shí)現(xiàn)圖形顯示與繪制的分離。實(shí)時(shí)顯示圖形時(shí),觀察到的是圖形操作的結(jié)果,而不是圖形的繪制過程。這3級(jí)圖形緩沖區(qū)分別為當(dāng)前顯示內(nèi)存區(qū)、將要顯示內(nèi)存區(qū)和圖片庫內(nèi)存區(qū)。當(dāng)前顯示內(nèi)存區(qū)的圖片為當(dāng)前屏幕正在顯示的圖片,即屏幕顯示內(nèi)存區(qū)。將要顯示內(nèi)存區(qū)內(nèi)正在繪制的圖片是屏幕將要顯示的圖片,而圖片庫內(nèi)存區(qū)存儲(chǔ)的是所有的圖片,在軟件啟動(dòng)時(shí),所有的圖片便被讀取到該內(nèi)存區(qū),完成初始化的工作,操作系統(tǒng)根據(jù)顯示需求把將要顯示的圖片從該內(nèi)存區(qū)直接拷貝到將要顯示圖片內(nèi)存區(qū)。當(dāng)前顯示內(nèi)存區(qū)和將要顯示內(nèi)存區(qū)的切換是通過一個(gè)OFFSET偏離量來完成的。如圖4a所示,在軟件啟動(dòng)時(shí),先將所有的圖片初始化到第三級(jí)緩沖區(qū)中,此時(shí)OFFSET的偏移地址為第一級(jí)緩沖區(qū)地址,第一級(jí)緩沖區(qū)為當(dāng)前顯示圖片內(nèi)存區(qū)。第二級(jí)緩沖區(qū)為將要顯示圖片內(nèi)存區(qū),如圖4b所示,當(dāng)要顯示下一幅圖片時(shí),OFFSET的偏移地址為第二級(jí)內(nèi)存地址。通過OFFSET值的不斷切換,使得顯示內(nèi)存在第一級(jí)內(nèi)存和第二級(jí)內(nèi)存之間切換。

圖4 多級(jí)緩沖機(jī)制Fig.4 The mechanism of multi-level buffers
與每次顯示時(shí)從硬盤中讀取圖片相比,先將所有圖片初始化到內(nèi)存中的方法有很大優(yōu)勢(shì),因?yàn)閳D片在內(nèi)存之間拷貝比在硬盤和內(nèi)存之間拷貝要快得多。當(dāng)前顯示內(nèi)存區(qū)和將要顯示內(nèi)存區(qū)的開辟很好地解決了圖片在顯示過程中的閃爍問題。多級(jí)緩沖技術(shù)的使用提高了圖片的顯示速度和顯示質(zhì)量。
本軟件屏幕顯示部分已經(jīng)成功實(shí)現(xiàn),運(yùn)行界面如圖5所示。

圖5 EHSI顯示界面Fig.5 The display interface of EHSI
下面對(duì)其進(jìn)行了性能測(cè)試。
1)通過在軟件中設(shè)置計(jì)時(shí)函數(shù),記錄顯示界面每刷新一次所用的時(shí)間,從而得出每秒顯示界面的刷新次數(shù),即幀速率。如圖6所示,當(dāng)復(fù)雜度(所貼圖層數(shù))為1層時(shí),本軟件的幀速率為317.2幀/s,而沒有采用多級(jí)緩存方法的幀速率為110.5幀/s。隨著復(fù)雜度的不斷增加,幀速率不斷下降。當(dāng)復(fù)雜度為6時(shí),本軟件的幀速率為61幀/s,而沒有采用多級(jí)緩存方法的幀速率為21.2幀/s。電子水平狀態(tài)指示儀的幀速率要求為30幀/s,在復(fù)雜度為6的情況下,本軟件都能很好地滿足設(shè)計(jì)需求。

圖6 幀速率分析Fig.6 The analysis of frame rate
2)在幀速率設(shè)定為30幀/s的情況下,對(duì)CPU的使用率進(jìn)行了測(cè)試。如圖7所示,當(dāng)復(fù)雜度為1時(shí),本軟件CPU的使用率為21%,而沒有采用多級(jí)緩沖技術(shù)方法的CPU的使用率為31%。隨著復(fù)雜度的不斷增加,CPU的使用率不斷升高。當(dāng)復(fù)雜度為6時(shí),本軟件的CPU使用率為58%,而沒有采用多級(jí)緩沖技術(shù)方法的CPU的使用率為100%。因而,在復(fù)雜度比較高的情況下,本系統(tǒng)在功能上還有很大的可擴(kuò)展性。

圖7 CPU使用率分析Fig.7 The analysis of CPU utilization rate
另外,本軟件在程序上還有很多地方需要進(jìn)一步優(yōu)化。優(yōu)化之后,軟件的性能會(huì)得到進(jìn)一步提高。
該方案通過采用“貼圖”技術(shù)和多級(jí)緩沖技術(shù)設(shè)計(jì)電子水平狀態(tài)指示儀,在思路上是一種突破。從對(duì)已經(jīng)完成的屏幕顯示部分的測(cè)試來看,軟件在幀速率和CPU使用率方面均能達(dá)到較好效果,該方案能夠有效提高電子水平狀態(tài)指示儀界面的顯示速度和質(zhì)量,此外,開源Linux操作系統(tǒng)的引入大大增強(qiáng)了電子水平狀態(tài)指示儀的系統(tǒng)可擴(kuò)展性。
[1]朱耀東,張煥春,經(jīng)亞枝.一種新型飛機(jī)座艙電子水平狀態(tài)儀的研制[J].航空學(xué)報(bào),2003,24(4):360-364.
[2]THOMSEN S V,HANCOCK W R.Extending AMLCD technology into the space shuttle cockpit[C]//SPIE Proceedings,1994,2219:118-129.
[3]RUNYON K R.Application of an advanced graphics processor[C]//SPIE Cockpit Displays,1994,2219:383-387.
[4]胡小龍,周俊明,夏顯忠,等.飛機(jī)座艙圖形顯示加速系統(tǒng)設(shè)計(jì)及FPGA實(shí)現(xiàn)[J].中南大學(xué)學(xué)報(bào):自然科學(xué)版,2008,39(5):1042-1048.
[5]張德斌,郭定,馬利東,等.戰(zhàn)斗機(jī)座艙顯示的發(fā)展需求[J].電光與控制,2004,11(1):54-55.
[6]楊昕欣,張曉林,徐廣毅.嵌入式電子飛行儀表系統(tǒng)軟件設(shè)計(jì)[J].航空學(xué)報(bào),2005,26(1):74-78.
[7]冼進(jìn),許振山,劉崢嶸,等.嵌入式Linux應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社,2007.
[8]夏寶亮,張宗澄.基于 Framebuffer的應(yīng)用開發(fā)[J].大眾科技,2007(10):79-80.
[9]陳莉君.Linux操作系統(tǒng)內(nèi)核分析[M].北京:人民郵電出版社,2000.
[10]胡還剛,龔暉.多緩沖技術(shù)的一種實(shí)現(xiàn)方法及其應(yīng)用[J].計(jì)算機(jī)應(yīng)用研究,2003(4):20-21.