平板電視OSD的結構化界面設計
UI開(kāi)發(fā)工具界面。本文引用地址:http://dyxdggzs.com/article/167910.htm
這樣的結構是為了描述一個(gè)OSD物件的基本屬性及規定其對于動(dòng)作的相應表現。利用這樣的結構將場(chǎng)景中的每個(gè)物件描述清楚,則一個(gè)特定UI場(chǎng)景的OSD內容就可以被確定,而同時(shí)被確定的還有其上一個(gè)場(chǎng)景、下一個(gè)場(chǎng)景及動(dòng)作響應特性等所有UI特性。這樣的信息構成一個(gè)數組,由一個(gè)統一的“解釋平臺”對其進(jìn)行翻譯和描述,從而將整個(gè)UI構造完成。
這有點(diǎn)類(lèi)似解釋語(yǔ)言,而我們所需要做的就是編寫(xiě)這些“腳本”,對物件進(jìn)行OSD“繪制”的工作由“解釋”平臺去調用外部的OSD發(fā)生器的驅動(dòng)代碼來(lái)完成。當需要改變OSD發(fā)生器或基于不同平面顯示控制器平臺時(shí),只需要更新少量OSD部分驅動(dòng)代碼,從而實(shí)現UI系統“平臺無(wú)關(guān)化”。
我們需要構造相關(guān)物件的數據結構,以便“解釋”平臺識別物件類(lèi)型并進(jìn)行正確的繪制。例如下面的結構完成了一個(gè)語(yǔ)言選項(文字物件)的描述:
void UI_ChangeLan()
{
UI_Lan=VAL_Lan;
ReDraw();
}
code byte *STR_LAN_CHN[]=
{
“中文”,
“英文”,
“法文”,
“西班牙文”,
};
code word TXT_LAN_CHN[]=
{
//文字物件的標志 對應的文字資源 對應的變量 具有的可選項目總數 當該物件被改變時(shí)的執行動(dòng)作
RES_TXT,STR_LAN_CHN,VAL_LAN,sizeof(STR_LAN_CHN)/sizeof(byte *),UI_ChangeLan
};
第一個(gè)數據RES_TXT向“解釋”平臺表明這個(gè)物件是文字,具有文字的數據結構。“解釋”平臺依據這一點(diǎn),按照事先約定的結構讀取后繼數據,第二個(gè)數據表明其文字內容的來(lái)源是STR_LAN_CHN,第三個(gè)數據表明需要根據哪個(gè)變量來(lái)決定獲取文字資源中第幾個(gè)數據,而第四個(gè)數據表明,該物件具有多少個(gè)可供選擇的文字內容,最后一個(gè)數據規定了當該物件發(fā)生改變時(shí)需要做什么。這樣,“解釋”平臺獲得了足夠的信息去“繪制”這樣一個(gè)語(yǔ)言選項,并可以在發(fā)生改變時(shí)去自動(dòng)執行UI_ChangeLan()這個(gè)函數,幫助程序員去完成語(yǔ)言改變所需要進(jìn)行的操作。
事實(shí)上,所有這些結構完全可以進(jìn)行定制,只要與“解釋”平臺保持一致就可以了。
利用這樣一個(gè)OSD驅動(dòng)結構,一旦“解釋”平臺構建完成,OSD開(kāi)發(fā)人員需要做的就變成利用平臺支持的各種物件積木,進(jìn)行擺放、堆積來(lái)構造OSD圖形表現,而不必要重復編寫(xiě)實(shí)現代碼和關(guān)心與特定硬件平臺相關(guān)的驅動(dòng)代碼細節。
更進(jìn)一步,甚至連這些積木的擺放和設計,我們可以設計一個(gè)直觀(guān)的Windows應用程序來(lái)完成諸如圖形-->字符元件生成器、OSD圖形界面設計,以及最終的資源文件和UI資料數組的生成,并與底層的“解釋”平臺進(jìn)行聯(lián)接編譯,得到最后的MCU代碼。
這樣的OSD界面開(kāi)發(fā)環(huán)境會(huì )擺脫抽象、枯燥和低效率,變得直觀(guān)、有趣,甚至可以由客戶(hù)自己設計相關(guān)的OSD的界面,而完全不需要編程經(jīng)驗和對OSD底層驅動(dòng)的了解。
需要指出的是,相較傳統的if else,結構化的OSD UI處理機制會(huì )帶來(lái)最終程序體積的增加和運行速度的變慢,但是這些缺點(diǎn)在MCU內部程序空間不斷增加和支持的時(shí)鐘頻率不斷提高的情況下是微不足道的。所以,如果讀者面對的案例是對MCU處理速度和程序存儲器受限的情況下,可能并不適用這樣的方案。以筆者開(kāi)發(fā)的液晶電視項目為例,在支持所有電視功能、圖文、麗音及游戲、日歷等附加功能的情況下,基于MCS51的多任務(wù)系統的總程序小于32KB,而基于Myson MTV230的OSD+MCU處理器的運行速度非???,并不會(huì )感到任何延遲。而通常支持位圖OSD的開(kāi)發(fā)環(huán)境使用的是X86或更快速的ARM等處理器,并具有大于2MB的程序存儲空間。
本文小結
當固件開(kāi)發(fā)工程師面對越來(lái)越復雜的應用時(shí),面向對象、結構化的編程方式會(huì )變得越來(lái)越重要,其直接的好處是編程效率的提高和維護成本的下降,同時(shí)對于程序的健壯性也有幫助。本文提供的方法的優(yōu)越性已經(jīng)在實(shí)際的開(kāi)發(fā)案例中得到檢驗,這樣完成同樣的OSD界面,筆者可以縮短到原來(lái)的1/4的時(shí)間,并提高了代碼的質(zhì)量。
評論