寇俊梟 王魯云
摘 要:linus技術(shù)應(yīng)用廣泛,本文以三星2410s為基礎(chǔ),設(shè)計(jì)實(shí)現(xiàn)了觸摸屏程序,具有特性,經(jīng)過(guò)驗(yàn)證,實(shí)現(xiàn)了設(shè)計(jì)功能。
關(guān)鍵詞:觸摸屏;程序設(shè)計(jì)
觸摸屏(touch screen)又稱為“觸控屏”、“觸控面板”,是一種可接收觸頭等輸入訊號(hào)的感應(yīng)式液晶顯示裝置,當(dāng)接觸了屏幕上的圖形按鈕時(shí),屏幕上的觸覺(jué)反饋系統(tǒng)可根據(jù)預(yù)先編程的程式驅(qū)動(dòng)各種連結(jié)裝置,可用以取代機(jī)械式的按鈕面板,并借由液晶顯示畫(huà)面制造出生動(dòng)的影音效果。觸摸屏作為一種最新的電腦輸入設(shè)備,它是目前最簡(jiǎn)單、方便、自然的一種人機(jī)交互方式。它賦予了多媒體以嶄新的面貌,是極富吸引力的全新多媒體交互設(shè)備。主要應(yīng)用于公共信息的查詢、領(lǐng)導(dǎo)辦公、工業(yè)控制、軍事指揮、電子游戲、點(diǎn)歌點(diǎn)菜、多媒體教學(xué)、房地產(chǎn)預(yù)售等。
1 引言
隨著IT產(chǎn)業(yè)的不斷發(fā)展,用戶對(duì)網(wǎng)站體驗(yàn)要求也越來(lái)越高,而目前主流網(wǎng)站后端承載系統(tǒng)都是Linux系統(tǒng),目前Android手機(jī)全部基于Linux內(nèi)核研發(fā)。企業(yè)大數(shù)據(jù)、云存儲(chǔ)、虛擬化等先進(jìn)技術(shù)都是基于Linux系統(tǒng)。2010年據(jù)有關(guān)權(quán)威部門(mén)統(tǒng)計(jì):將來(lái)幾年內(nèi)我國(guó)軟件行業(yè)的從業(yè)機(jī)會(huì)十分龐大,中國(guó)每年對(duì)軟件人才的需求將達(dá)到50萬(wàn)人左右。而對(duì)于Linux專(zhuān)業(yè)人才的就業(yè)前景,更是廣闊;據(jù)悉在未來(lái)5-10年內(nèi)Linux專(zhuān)業(yè)人才的需求將達(dá)到120萬(wàn)+!尤其是有經(jīng)驗(yàn)的資深的Linux工程師目前非常的缺乏,薪資也是非常誘人,平均月薪都是15-20K,能力強(qiáng)的薪資更高。
Linux操作系統(tǒng)通過(guò)系統(tǒng)調(diào)用和硬件中斷完成從用戶空間到內(nèi)核空間的控制轉(zhuǎn)移。設(shè)備驅(qū)動(dòng)模塊的功能就是擴(kuò)展內(nèi)核的功能,主要完成兩部分任務(wù):一個(gè)是系統(tǒng)調(diào)用,另一個(gè)是處理中斷。圖2是一個(gè)設(shè)備驅(qū)動(dòng)模塊動(dòng)態(tài)掛接、卸載和系統(tǒng)調(diào)用的全過(guò)程。系統(tǒng)調(diào)用部分則是對(duì)設(shè)備的操作過(guò)程,比如open,read,write,ioctl等操作,設(shè)備驅(qū)動(dòng)程序所提供的這組入口點(diǎn)由幾個(gè)結(jié)構(gòu)向系統(tǒng)進(jìn)行說(shuō)明,分別是file_operations數(shù)據(jù)結(jié)構(gòu)、inode數(shù)據(jù)結(jié)構(gòu)和file 數(shù)據(jù)結(jié)構(gòu)。內(nèi)核內(nèi)部通過(guò)file結(jié)構(gòu)識(shí)別設(shè)備,通過(guò)file_operations數(shù)據(jù)結(jié)構(gòu)提供文件系統(tǒng)的入口點(diǎn)函數(shù),也就是訪問(wèn)設(shè)備驅(qū)動(dòng)的函數(shù),結(jié)構(gòu)中的每一個(gè)成員都對(duì)應(yīng)著一個(gè)系統(tǒng)調(diào)用。在嵌入式系統(tǒng)的開(kāi)發(fā)中,我們一般僅僅實(shí)現(xiàn)其中幾個(gè)接口函數(shù):read、write、open、ioctl及release就可以完成應(yīng)用系統(tǒng)需要的功能。寫(xiě)驅(qū)動(dòng)程序的任務(wù)之一就是完成file_operations中的函數(shù)指針。
關(guān)鍵代碼:
1 typedef struct
2 {
3 unsigned int penStatus; /* PEN_UP, PEN_DOWN, PEN_SAMPLE */
4 TS_RET buf[MAX_TS_BUF]; /*
緩沖區(qū),存放點(diǎn)擊信息 */
5 unsigned int head, tail; /*
緩沖區(qū)頭和尾 */
6 wait_queue_head_t wq; /*等待隊(duì)列*/
7 spinlock_t lock;//自旋鎖
8 #ifdef USE_ASYNC
9 struct fasync_struct *aq;
10 #endif
11 struct cdev cdev;
12 } TS_DEV;//觸摸屏控制器信息的結(jié)構(gòu),供上層使用
觸摸屏設(shè)備結(jié)構(gòu)體的成員與按鍵設(shè)備結(jié)構(gòu)體的成員類(lèi)似,也包含一個(gè)緩沖區(qū),同時(shí)包括自旋鎖、等待隊(duì)列和fasync_struct指針,如代碼清單12.12所示。
TS_DEV結(jié)構(gòu)用于記錄觸摸屏">觸摸屏運(yùn)行的各種狀態(tài),PenStatus包括PEN_UP、PEN_DOWN和PEN_FLEETING。buf[MAX_TS_BUF]是用來(lái)存放數(shù)據(jù)信息的事件隊(duì)列,head、tail分別指向事件隊(duì)列的頭和尾。程序中的筆事件隊(duì)列是一個(gè)環(huán)形結(jié)構(gòu),當(dāng)有事件加入時(shí),隊(duì)列頭加一,當(dāng)有事件被取走時(shí),隊(duì)列尾加一,當(dāng)頭尾位置指針一致時(shí)讀取筆事件的信息,進(jìn)程會(huì)被安排進(jìn)入睡眠。wq等待隊(duì)列,包含一個(gè)鎖變量和一個(gè)正在睡眠進(jìn)程鏈表。當(dāng)有好幾個(gè)進(jìn)程都在等待某件事時(shí),Linux會(huì)把這些進(jìn)程記錄到這個(gè)等待隊(duì)列。它的作用是當(dāng)沒(méi)有筆觸事件發(fā)生時(shí),阻塞上層的讀操作,直到有筆觸事件發(fā)生。lock使用自旋鎖,自旋鎖是基于共享變量來(lái)工作的,函數(shù)可以通過(guò)給某個(gè)變量設(shè)置一個(gè)特殊值來(lái)獲得鎖。而其他需要鎖的函數(shù)則會(huì)循環(huán)查詢鎖是否可用。MAX_TS_BUF的值為16,即在沒(méi)有被讀取之前,系統(tǒng)緩沖區(qū)中最多可以存放16個(gè)筆觸數(shù)據(jù)信息。
系統(tǒng)實(shí)現(xiàn):ADS7843有多種轉(zhuǎn)換時(shí)序,時(shí)序規(guī)定了芯片與設(shè)備及CPU間是如何配合工作的。設(shè)計(jì)中采用16個(gè)時(shí)鐘周期啟動(dòng)一次轉(zhuǎn)換的坐標(biāo)轉(zhuǎn)換方式。循環(huán)過(guò)程中的每一步都在8個(gè)時(shí)鐘周期內(nèi)完成,數(shù)據(jù)的處理嚴(yán)格按照時(shí)序進(jìn)行,坐標(biāo)的采集與X坐標(biāo)類(lèi)似。
2 總結(jié)
本文以三星公司內(nèi)核芯片2410s和4線電阻是觸摸屏為硬件基礎(chǔ)。開(kāi)發(fā)了觸摸屏掛圖版程序。通過(guò)軟件的濾波,通告了系統(tǒng)性能,得到了很好的處理結(jié)果,有很強(qiáng)的實(shí)用性。軟件使用了c語(yǔ)言實(shí)現(xiàn),可以方便的移植到其他操做系統(tǒng)。
通訊作者
王魯云(1959-),漢族,遼寧省大連市人,本科,大連理工大學(xué)城市學(xué)院,電子與自動(dòng)化學(xué)院,教授,研究方向:航運(yùn)雷達(dá)系統(tǒng)。