蔡 昌,羅小華,鄧 娜
(重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶 400065)
Windows CE是微軟開發(fā)的專注于嵌入式領(lǐng)域的一款操作系統(tǒng),它提供了眾多強(qiáng)大工具,用戶利用它可以快速開發(fā)出下一代的智能化小體積設(shè)備。特別是在便攜式的電子類產(chǎn)品開發(fā)過程中,LCD液晶顯示屏由于其可視化強(qiáng),強(qiáng)大的人機(jī)友好界面操作等特點(diǎn),已經(jīng)逐漸成為工業(yè)控制系統(tǒng)、消費(fèi)電子產(chǎn)品中客戶體驗(yàn)(QoE)的重要環(huán)節(jié)。在基于Windows CE的硬件平臺(tái)上開發(fā)嵌入式產(chǎn)品時(shí),LOGO啟動(dòng)的實(shí)現(xiàn)和算法研究就顯得非常重要?,F(xiàn)在比較流行的做法是在LCD控制器初始化后加入一段完整啟動(dòng)輸出畫面的代碼,以達(dá)到在系統(tǒng)啟動(dòng)過程中輸出畫面的效果。該方法的優(yōu)點(diǎn)是方法簡單,易于實(shí)現(xiàn);而缺點(diǎn)是對圖片的大小有嚴(yán)格要求,如果太大,將會(huì)引起LCD顯示花屏,嚴(yán)重者甚至造成系統(tǒng)的不穩(wěn)定。在此基礎(chǔ)之上,提出一種采用線性插值法改進(jìn)LOGO的算法。該方法能夠?qū)λ迦氲腖OGO圖片進(jìn)行相應(yīng)放大和縮小,大大降低了對圖片大小的限制。同時(shí)由于其穩(wěn)定性好,移植性強(qiáng),可以適用于多種具有同類操作系統(tǒng)的硬件平臺(tái)。
該設(shè)計(jì)的開發(fā)平臺(tái)是基于Platform Builder 6.0操作系統(tǒng),該工具集成了微軟新一代基于ARM的設(shè)備仿真器,可以仿真ARMV4I指令集,為開發(fā)者的操作系統(tǒng)和應(yīng)用程序的開發(fā)、構(gòu)建和測試提供了極大方便[1]。Eboot(通過以太網(wǎng)口從開發(fā)機(jī)下載操作系統(tǒng)鏡像得到目標(biāo)設(shè)備與運(yùn)行于Platform Builder 6.0的開發(fā)平臺(tái)通信,從而進(jìn)行下載操作系統(tǒng)鏡像和配置調(diào)試服務(wù)[2]。
LOGO啟動(dòng)的具體實(shí)現(xiàn)是在系統(tǒng)啟動(dòng)的過程中,在Windows CE內(nèi)核啟動(dòng)階段完成對LCD控制器初始化后加入一段完整啟動(dòng)輸出畫面的代碼?;蛘呖梢院唵蔚乩斫鉃樵贚CD控制器初始化后直接往LCD的Framebuffer(幀緩存空間)里面寫輸出畫面的數(shù)據(jù)。這個(gè)工作一般在Eboot中進(jìn)行,如果在OS(操作系統(tǒng))啟動(dòng)時(shí)一般就太晚了,如果不加入人為的延時(shí),啟動(dòng)畫面剛一顯示,就到了OS畫面了,看不到效果。因此,選擇在Bootloader中初始化LCD后添加啟動(dòng)LOGO的代碼,從而實(shí)現(xiàn)開機(jī)畫面的顯示。
Bootloader是建立在操作系統(tǒng)內(nèi)核運(yùn)行之前的一小段程序,通過這段小程序,可以初始化硬件設(shè)備,建立系統(tǒng)的內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)已知的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。最終,Bootloader把操作系統(tǒng)內(nèi)核映像加載到RAM中,并將系統(tǒng)控制權(quán)傳遞給它[3]。
Bootloader的控制流程如圖1所示。
圖1 Bootloader的控制流程圖Fig.1 Flow chart of Bootloader control
當(dāng)打開電源或者復(fù)位時(shí),CPU首先執(zhí)行Startup函數(shù),Startup函數(shù)通常由匯編語言代碼編寫,主要用來建立存儲(chǔ)器訪問和初始化緩存。然后Startup函數(shù)跳轉(zhuǎn)到blcommon框架的blcommonMain函數(shù)。Blcommon框架被實(shí)現(xiàn)為blcommon.lib庫,并與平臺(tái)特定的Bootloader代碼進(jìn)行鏈接[4]。
BootLoaderMain函數(shù)中主要調(diào)用OEMDebugInit、OEMPlatformInit、 OEMPreDownLoader、 DownloaderImage 和OEMLaunch等主要函數(shù),其中OEMPlatformInit函數(shù)是BootLoader最重要的OEM函數(shù),所有與BootLoader所需硬件功能相關(guān)的目標(biāo)板級(jí)外設(shè)如以太網(wǎng)接口、Flash存儲(chǔ)器等都應(yīng)該在這里進(jìn)行初始化,也可以初始化嵌入式CPU芯片內(nèi)置的外設(shè),這里還涉及到S3C6410內(nèi)置的LCD控制器[5]。因?yàn)锽ootLoader中LOGO的實(shí)現(xiàn)就是通過OEMPlatformInit函數(shù)調(diào)用InitializeDisplay函數(shù)初始化S3C6410的LCD控制器使之在BootLoader啟動(dòng)時(shí)顯示[6]。
通常的做法是在%_WINCEROOT%Platform
2.3.1 制作Logo.C
首先用軟件工具實(shí)現(xiàn)圖片到數(shù)組文件的轉(zhuǎn)換[8],這里使用StartLogo圖片制作工具。StartLogoMaker是由Linux Logo制作工具LogoMaker移植而來,是一款“綠色軟件”,將其直接復(fù)制到Windows XP平臺(tái)即可運(yùn)行。它可以把bmp,jpg等格式的圖片轉(zhuǎn)換為BSP(板級(jí)支持包)所需要的數(shù)組文件StartLogo.c,使用新生成的文件替換BSP中的同名文件,即可方便地更換Windows CE的啟動(dòng)畫面[9]。StartLogo.c數(shù)組的頭部內(nèi)容如下:
生成的默認(rèn)文件名稱為StartLogo.c,將其修改為Logo.c,并將其前兩個(gè)數(shù)組元素(這里是240,320)刪除,這樣做的目的只是方便代碼實(shí)現(xiàn)的簡化(下同),同時(shí)保存該文件到%_WINCEROOT%Platform
2.3.2 Eboot中相關(guān)函數(shù)的實(shí)現(xiàn)
在%_WINCEROOT%Platform
#include
2.3.3 啟動(dòng)調(diào)試
將生成的映像文件下載到開發(fā)板中,重新啟動(dòng)系統(tǒng),會(huì)發(fā)現(xiàn)在系統(tǒng)啟動(dòng)的過程中出現(xiàn)了如圖2所示的畫面。
圖2 啟動(dòng)中的LOGO畫面Fig.2 LOGO screen in booting
從圖2可以清楚地看出,圖片模糊,失真。造成這個(gè)問題的原因是在目錄%_WINCEROOT%PLATFORMSMDK6410SrcBootloaderEboot下的eboot.bib有如下定義:
從上面的MEMORY段可以看出Eboot的大小為512 KB,而Logo.c文件的大小卻是768 KB,加入LOGO后大小超過512 KB,導(dǎo)致生成的文件數(shù)據(jù)丟失。是否會(huì)超過了顯示緩存的大小呢?再看%_WINCEROOT%PLATFORMSMDK6410Filesconfig.bib有如下定義:
系統(tǒng)定義了一個(gè)顯存的起始地址為0x86800000,大小為12 MB,顯然幀緩存的大小是足夠的。因此,可以認(rèn)為是顯示圖片過大導(dǎo)致eboot.bin超出規(guī)定大小的范圍。解決的辦法就是用算法將圖片進(jìn)行壓縮,然后在Eboot里面用相關(guān)代碼對縮小的圖片進(jìn)行相應(yīng)地放大。
在圖像進(jìn)行放大縮小的過程中,一般采用最近鄰法和線性插值法。如果采用最近鄰法,在把圖像放大較大倍數(shù)時(shí)會(huì)產(chǎn)生馬賽克形狀,放大倍數(shù)越大,這種現(xiàn)象越發(fā)明顯[10]。
本文為了得到更好的放大圖像的質(zhì)量,采用線性插值法。如圖3所示,當(dāng)求出的地址與格子點(diǎn)不一致之時(shí),先求出與其相鄰的4個(gè)格子點(diǎn)的距離之比,用該比率對近鄰4像素的濃度值進(jìn)行插值處理。計(jì)算該濃度值的公式:
其中,[x],[y]分別為不超過 x,y 的整數(shù),d(x,y)表示坐標(biāo)(x,y)處的濃度值。[x],[y]分別代表不超過它的最大整數(shù)。采用線性插值法處理的圖像可以在即時(shí)放大的場合,沒有馬賽克形狀,也變得比較圓滑柔順。
圖3 線性插值法(從鄰近4個(gè)點(diǎn)進(jìn)行線性插值)Fig.3 Linear interpolation(Linear interpolation from the nearest four points)
線性插值法不僅可以采用鄰近4點(diǎn),也可以采用鄰近9點(diǎn)或者16點(diǎn)進(jìn)行高次插值法。在進(jìn)行嚴(yán)密的縮小處理時(shí),需要預(yù)先進(jìn)行前置濾波處理。
用photoshop等圖形處理軟件,將圖片縮小1倍,由于這里使用的屏幕為 240×320,因此,將圖片縮小為 120×160,取名為Logo.jpg。使用StartLogo工具將Logo.jpg轉(zhuǎn)換成相應(yīng)的數(shù)組文件Logo.c。將新生成的文件替換BSP中的同名文件。其他步驟和上述常規(guī)做法一致。最后給出在main.c文件中的InitializeDisplay函數(shù)中添加采用線性插值法進(jìn)行圖像擴(kuò)大的主要代碼:
重新生成映像并下載到硬件平臺(tái)中,在系統(tǒng)啟動(dòng)的過程中出現(xiàn)如圖4所示的LOGO畫面。
經(jīng)過算法的優(yōu)化之后,可以清楚地看見圖像顯示效果明顯有了提升,而Eboot.bin的大小卻沒有超過512 KB,數(shù)據(jù)也不會(huì)因此而丟失。
實(shí)驗(yàn)證明,線性插值算法對于縮放比例較小的情況是完全可以接受的。在通常情況下,縮小0.5倍以上或放大3.0倍以下對于任何圖像都是可以接受的。
圖4 算法優(yōu)化后的LOGO啟動(dòng)畫面Fig.4 LOGO screen after optimized algorithm
本文提出一種普遍適用的基于Windows CE6.0操作系統(tǒng)的啟動(dòng)LOGO畫面的制作和優(yōu)化。該方法具有良好的可讀性和移植性,凡是相同系統(tǒng)的產(chǎn)品實(shí)現(xiàn)開機(jī)啟動(dòng)LOGO畫面,均可采用本文提出的方法。該設(shè)計(jì)方法已在IPTV手持式測試儀中應(yīng)用,可以非常清晰地顯示開機(jī)啟動(dòng)LOGO的畫面,性能穩(wěn)定,運(yùn)行良好。
[1]張冬泉,譚南林.Windows CE開發(fā)實(shí)例精粹[M].北京:電子工業(yè)出版社,2008.
[2]張飛,白瑞林,陸林.WinCE 5.0 Bootloader的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2009,35(7):232-234.ZHANG Fei,BAI Rui-lin,LU Lin.Design and implemention of WinCE 5.0 Bootloader[J].Computer Engineering,2009,35(7):232-234.
[3]張東泉,譚南林,王雪梅,等.WINDOWS CE實(shí)用開發(fā)技術(shù)[M].2版.北京:電子工業(yè)出版社,2008.
[4]李大為.Windows CE工程實(shí)踐完全解析[M].北京:中國電力出版社,2008.
[5]周建設(shè).Windows CE設(shè)備驅(qū)動(dòng)及BSP開發(fā)指南[M].北京:中國電力出版社,2009.
[6]Pavlov S,Belevsky P.Windows Embedded CE 6.0 Fundamentals[M].Microsoft Press,2008.
[7]李昊華,鄭文曦.Windows CE中BootLoader啟動(dòng)畫面的設(shè)計(jì)與實(shí)現(xiàn)[J].自動(dòng)化與儀表,2008,23(11):8-10.LI Hao-hua,ZHENG Wen-xi.Design and implementation of Boot Logo in Windows CE Boot Loader[J].Automation and Instrumentation,2008,23(11):8-10.
[8]楊霄雪,王力虎,葉佳寧,等.U-Boot啟動(dòng)logo制作的研究[J].電腦知識(shí)與技術(shù),2009,5(3):1731-1733.YANG Xiao-xue,WANG Li-hu,YE Jia-ning,et al.Research on the implementation of U-Boot start Logo[J].Computer Knowledge and Technology,2009,5(3):1731-1733.
[9]友善之臂公司.ARM9 MINI2440用戶手冊[EB/OL].(2010-02-04)[2010-04-29].http://www.arm123.com.cn/mini2440/mini2440-um-20100204.rar.
[10]井上誠喜,八木伸行,林正樹,等.C語言實(shí)用數(shù)字圖像處理[M].白玉林,譯.北京:科學(xué)出版社,2003.