新興微型光學(xué)手指導(dǎo)航模組的嵌入式系統(tǒng)開發(fā)
具有EOS的軟件系統(tǒng),OFN驅(qū)動(dòng)程序需要遵循相應(yīng)EOS公用驅(qū)動(dòng)程序的編寫、調(diào)試、加/卸載要求,如Windows CE/Mobile的單/雙層、本地/流接口驅(qū)動(dòng)、動(dòng)態(tài)庫形式,ARMLinux的字符設(shè)備驅(qū)動(dòng)、動(dòng)態(tài)加/卸載、VxWorks的I/O設(shè)備驅(qū)動(dòng)等。OFN驅(qū)動(dòng)程序傳播的是系統(tǒng)公用的人機(jī)交互輸入信息,必須為公用驅(qū)動(dòng)程序。EOS驅(qū)動(dòng)程序可以劃分為專用驅(qū)動(dòng)程序或公用驅(qū)動(dòng)程序兩大類,公用驅(qū)動(dòng)程序軟件要求很高,需要根據(jù)具體EOS的特點(diǎn)和要求,認(rèn)真編寫、調(diào)試和測(cè)試。
3 微型光學(xué)手指導(dǎo)航模組應(yīng)用實(shí)踐
在各類嵌入式應(yīng)用系統(tǒng)中開發(fā)使用OFN模組,軟硬件體系設(shè)計(jì)的核心是OFN驅(qū)動(dòng)程序的實(shí)現(xiàn),其關(guān)鍵在于OFN數(shù)據(jù)信息的實(shí)時(shí)采集和具體EOS下公用信息的形成。下面針對(duì)一些最常見的OFN應(yīng)用開發(fā)設(shè)計(jì)實(shí)踐,加以闡述。其中涉及的I2C、SPI、UART、LCD(Liquid Crystal Display)、定時(shí)器(Timer)、GPIO(General Port Input/Output)等的軟件驅(qū)動(dòng)操作,限于篇幅,這里不再著重說明。
3.1 工業(yè)測(cè)控/儀表儀器應(yīng)用
工農(nóng)業(yè)過程控制、儀表儀器設(shè)備、器件性能檢測(cè)等軟件體系或微型ERTOS下的OFN應(yīng)用,可以采用外部事件中斷或定時(shí)器查詢的方式,在其中斷服務(wù)程序中直接操作I2C或SPI總線,高效地從OFN中獲得手指觸控信息,并進(jìn)行屏幕指示、操作控制或數(shù)據(jù)的存儲(chǔ)、轉(zhuǎn)發(fā)等活動(dòng)。
下面的例程代碼(見網(wǎng)絡(luò)版)展示了ARM926T內(nèi)核的S3C2440微處理器平臺(tái)上測(cè)試OFN模組A2815性能的情形。中斷服務(wù)程序中進(jìn)行I2C或SPI總線操作,獲得手指觸控信息,在LCD屏上以“鼠標(biāo)”形式隨動(dòng)顯示,并通過UART接口上傳數(shù)據(jù)給PC機(jī)。
3.2 Nucleus MTK手機(jī)應(yīng)用
聯(lián)發(fā)科技MediaTek推出的各種款式功能手機(jī),以高度的性價(jià)比具有極高的市場(chǎng)份額,其內(nèi)核是ARM7EJS或ARM9EJS微處理器,在MentorATI的優(yōu)先級(jí)搶占調(diào)度和時(shí)間片輪轉(zhuǎn)的多任務(wù)ERTOS--Nucleus基礎(chǔ)上,形成了完整的人機(jī)接口MMI(Man Machine Interface)應(yīng)用程序體制,俗稱“MTK”。Nucleus MTK多數(shù)情況下采用可管理的逐級(jí)中斷機(jī)制:低級(jí)中斷LISR(Lower ISR)→高級(jí)中斷HISR(High ISR)→中斷任務(wù)處理ISR(Interrupt Serve Routine)。ISR可以與其他任務(wù)進(jìn)行通信或同步的交互。
Nucleus MTK系統(tǒng)不支持鼠標(biāo),但支持鍵盤和觸摸屏操作,而觸摸屏操作最終歸結(jié)在鍵盤操作上。因此在Nucleus MTK下應(yīng)用OFN模組,需要把OFN的“觸控”信息轉(zhuǎn)換為“方向動(dòng)作”信息,進(jìn)而廣播為可以公用的“方向按鍵”信息,從而為多數(shù)現(xiàn)有的和未來的應(yīng)用程序所共享。不容忽視的是必須實(shí)現(xiàn)高度頻繁的OFN信息與緩慢的方向按鍵之間的合理匹配,可以通過均值濾波和邏輯分析進(jìn)行取舍算法達(dá)到這一目的。
需要注意的是,Nucleus MTK軟件體系層次和等級(jí)較為嚴(yán)格,高低層之間除了通信、同步和信息傳遞,一般不允許函數(shù)互相調(diào)用;同時(shí),為保證中斷響應(yīng)的及時(shí)性,不應(yīng)在中斷服務(wù)程序中作過多的停留,因此傳統(tǒng)的設(shè)備驅(qū)動(dòng)及其分析處理需要放在不同的層次上,按輕重緩急,分別加以實(shí)現(xiàn)。
按照上述Nucleus MTK的設(shè)備驅(qū)動(dòng)規(guī)范和OFN信息的運(yùn)用機(jī)理,設(shè)計(jì)OFN模組的Nucleus MTK軟件應(yīng)用如下:定義OFN特定消息結(jié)構(gòu),分配中斷形式和總線接口;實(shí)時(shí)獲取OFN移動(dòng)信息,取舍處理后,打包成OFN消息包,上傳MMI應(yīng)用處理層;MMI應(yīng)用處理層拆包分析,變換成方向按鍵的“按下”和“釋放”消息,進(jìn)而廣播給整個(gè)系統(tǒng)。相關(guān)的關(guān)鍵程序開發(fā)如下:
?、?基本設(shè)置。增加全局操作常量MSG_ID_MMI_OFN_MOVE_REQ,定義OFN消息結(jié)構(gòu)體ofn_hdr_ind_struct{LOCAL_PARA_HDR, kal_uint8 Direction},并在系統(tǒng)自定義設(shè)備驅(qū)動(dòng)的初始化文件中加入對(duì)OFN初始化函數(shù)的調(diào)用。
② 底層驅(qū)動(dòng)程序設(shè)計(jì)。限于篇幅,這里僅列出I2C接口的定時(shí)器中斷查詢實(shí)現(xiàn)。
?、?公用信息形成。在上層主要程序文件MMITask.c中添加代碼。
3.3 Windows CE/Mobile應(yīng)用
Windows CE/Mobile是一款在嵌入式系統(tǒng),特別是智能手機(jī)中,廣泛應(yīng)用的EOS。Windows CE/Mobile按照“物理中斷IRQ(Interrupt ReQuest)→邏輯中斷SYSINTR(System Interrupt)→中斷服務(wù)線程IST(Interrupt Serve Thread)”的層層映射方式進(jìn)行中斷處理,其設(shè)備驅(qū)動(dòng)程序以用戶態(tài)下的DLL(Dynamic Link Library)文件形式存在,區(qū)分為本地與流接口驅(qū)動(dòng)、獨(dú)立與雙層驅(qū)動(dòng),可以在系統(tǒng)啟動(dòng)時(shí)自動(dòng)加載或動(dòng)態(tài)加載。啟動(dòng)時(shí)加載的驅(qū)動(dòng)程序,需要特別進(jìn)行注冊(cè)表的配置添加。
OFN模組及其應(yīng)用特點(diǎn)決定了在Windows CE/Mobile下,其驅(qū)動(dòng)程序宜設(shè)計(jì)為獨(dú)立的本地驅(qū)動(dòng)形式,并在系統(tǒng)啟動(dòng)時(shí)能夠自動(dòng)加載。Windows CE/Mobile支持鼠標(biāo)操作,有鼠標(biāo)消息結(jié)構(gòu)體的系統(tǒng)定義,可以用來簡(jiǎn)化OFN的驅(qū)動(dòng)程序。OFN模組的Windows CE/Mobile軟件應(yīng)用可以完全在驅(qū)動(dòng)程序中實(shí)現(xiàn),中斷服務(wù)程序的編寫和系統(tǒng)注冊(cè)表的配置添加是OFN模組Windows CE/Mobile驅(qū)動(dòng)程序設(shè)計(jì)的關(guān)鍵。以I2C總線接口、外部中斷事件觸發(fā)方式說明OFN模組Windows CE/Mobile驅(qū)動(dòng)程序的具體實(shí)現(xiàn),核心微處理器為ARM926T內(nèi)核的S3C2440。
3.4 ARMLinux/Android應(yīng)用
ARMLinux/Android是一個(gè)源碼開放、音/視頻性能優(yōu)良、網(wǎng)絡(luò)功能強(qiáng)大、易于擴(kuò)展開發(fā)的EOS及其應(yīng)用體系,一經(jīng)推出就在便攜式移動(dòng)通信、微型筆記本電腦等諸多領(lǐng)域得到了廣泛運(yùn)用。其底層多是基于CortexA8/A9、ARM1176、ARM9EJS等內(nèi)核的微處理器。Linux下設(shè)備驅(qū)動(dòng)規(guī)范是將設(shè)備視作文件操作,稱為“設(shè)備文件”,應(yīng)用十分方便。其設(shè)備驅(qū)動(dòng)程序分為字符型、塊型和網(wǎng)絡(luò)型三類,嵌入式系統(tǒng)的大多數(shù)外設(shè)或接口都可以作為字符型設(shè)備進(jìn)行驅(qū)動(dòng)。根據(jù)應(yīng)用的特點(diǎn),Linux將所有輸入設(shè)備歸為可以數(shù)據(jù)緩沖的鏈表結(jié)構(gòu)的字符型輸入子類(Input),包括鼠標(biāo)、鍵盤、觸摸屏等,其中鼠標(biāo)類驅(qū)動(dòng)(mousedev)架構(gòu)體系十分完備。ARMLinux/Android體系的這些特征,使得OFN模組的驅(qū)動(dòng)應(yīng)用開發(fā)簡(jiǎn)便了很多:可以按照鼠標(biāo)類驅(qū)動(dòng)的實(shí)例化方式,快速實(shí)現(xiàn)OFN的驅(qū)動(dòng)程序設(shè)計(jì)。Linux驅(qū)動(dòng)可以動(dòng)態(tài)加載,也可以在啟動(dòng)時(shí)加載;OFN設(shè)備使用頻繁,宜選擇啟動(dòng)時(shí)加載。這里以常見的TI推出的CortexA8內(nèi)核的OMAP3530微處理器平臺(tái)為例,關(guān)鍵的程序代碼略--編者注。
4 結(jié)語
光學(xué)手指導(dǎo)航模組,性能高度集成,成本低,形體小,在嵌入式應(yīng)用系統(tǒng)中備受青睞。只要按照各種嵌入式應(yīng)用體系的具體特點(diǎn),遵循各類嵌入式體系及其操作系統(tǒng)下驅(qū)動(dòng)軟件的開發(fā)規(guī)律,并因地制宜,具體情況具體分析,就可以無縫地將其融入到各個(gè)已有的嵌入式應(yīng)用軟硬件體系中,并拓展到新的嵌入式應(yīng)用產(chǎn)品中。不斷豐富完善的微型光學(xué)手指導(dǎo)航模組,應(yīng)用前景極好,推動(dòng)著人機(jī)輸入界面的深遠(yuǎn)變革和長足發(fā)展。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論