<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è) > 光電顯示 > 設計應用 > 平板電視OSD的結構化界面設計

平板電視OSD的結構化界面設計

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

UI開(kāi)發(fā)工具界面。

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

  這樣的結構是為了描述一個(gè)物件的基本屬性及規定其對于動(dòng)作的相應表現。利用這樣的結構將場(chǎng)景中的每個(gè)物件描述清楚,則一個(gè)特定UI場(chǎng)景的內容就可以被確定,而同時(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發(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ì)量。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: 界面設計 結構化 OSD 電視 平板

評論


相關(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>