freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

觸摸屏控制實(shí)驗(yàn)設(shè)計(jì)報(bào)告(編輯修改稿)

2024-08-30 07:08 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 才能保證電容達(dá)到穩(wěn)定狀態(tài)。 我們可以通過(guò)編程讓處理器在FIFO存有任何有效數(shù)據(jù)時(shí)就產(chǎn)生中斷,或在輸入FIFO裝滿時(shí)產(chǎn)生中斷。由于我們通常會(huì)做多次讀取,因此驅(qū)動(dòng)程序一般會(huì)在FIFO裝滿時(shí)產(chǎn)生中斷。當(dāng)該中斷產(chǎn)生時(shí),會(huì)有12個(gè)原始的模數(shù)轉(zhuǎn)換數(shù)據(jù)等待處理,分別對(duì)應(yīng)于X軸的6次讀數(shù)和Y軸的6次讀數(shù)。 一旦序列器控制字在LH79524上被編好程,驅(qū)動(dòng)程序獲取原始讀數(shù)所需要做的就是命令序列器執(zhí)行。當(dāng)EOS(序列結(jié)束)中斷產(chǎn)生時(shí),我們獲得的結(jié)果就可以用于采集和檢查了。序列器可以被配置為當(dāng)屏幕被觸摸時(shí)自動(dòng)觸發(fā)、根據(jù)軟件命令觸發(fā)或連續(xù)觸發(fā)三種模式。 這里不可避免要進(jìn)行折衷考慮。如果我們要求較窄的穩(wěn)定窗口,那么驅(qū)動(dòng)程序?qū)o(wú)法跟蹤快速的拖曳操作。對(duì)于在簽名輸入期間發(fā)生的滑動(dòng)或筆劃跟蹤事件來(lái)說(shuō)快速拖曳是非常重要的。如果我們加寬穩(wěn)定窗口,我們就可能面臨著風(fēng)險(xiǎn),這些風(fēng)險(xiǎn)包括接收到不精確的觸摸數(shù)據(jù)和上文描述過(guò)的處于臨界狀態(tài)的層連接結(jié)果。因此需要通過(guò)實(shí)驗(yàn)來(lái)確定適合自己系統(tǒng)的最佳值。智能化的觸摸控制器同樣允許你通過(guò)軟件命令調(diào)整這些參數(shù)。 每個(gè)樣值所需的讀取次數(shù)、連續(xù)讀取間允許的偏差以及采樣速率是每個(gè)驅(qū)動(dòng)程序的全部可編程參數(shù)??梢酝ㄟ^(guò)defines調(diào)整這些參數(shù)以便在你的系統(tǒng)上產(chǎn)生最佳結(jié)果。智能化的外部觸摸控制器一般會(huì)以很快的速度讀取數(shù)十或數(shù)百個(gè)數(shù)據(jù)用以改善精度。由于我們是用核心CPU完成這種過(guò)濾,因此我們需要確定有多少時(shí)間可以合理地分配給觸摸采樣任務(wù)。嵌入式系統(tǒng)包含折衷,你的任務(wù)就是想出最佳的折衷辦法,以產(chǎn)生能使用戶(hù)滿意的系統(tǒng)。 2 . 4 . 2觸摸屏的校準(zhǔn) 電阻觸摸屏需要校準(zhǔn),我們需要一些參考值,以便我們能夠?qū)⒔邮盏降脑寄?shù)轉(zhuǎn)換值轉(zhuǎn)換成高層軟件所需的屏幕像素坐標(biāo)。理想情況下校準(zhǔn)程序只要在產(chǎn)品初次加電測(cè)試過(guò)程中運(yùn)行一次就可以了,參考值被存儲(chǔ)在非易失性存儲(chǔ)器中。我已經(jīng)安排好讓觸摸驅(qū)動(dòng)程序在一啟動(dòng)時(shí)就運(yùn)行校準(zhǔn)程序,但要記住,你要把參考值保存起來(lái),以免讓用戶(hù)在以后的加電啟動(dòng)期間再做校準(zhǔn)。不過(guò)無(wú)論如何你仍然需要向用戶(hù)提供一種進(jìn)入校準(zhǔn)例程的途徑,從而在由于溫度漂移或其它因素造成校準(zhǔn)不準(zhǔn)確時(shí)進(jìn)行重新校準(zhǔn)。 校準(zhǔn)例程的名稱(chēng)是CalibrateTouchScreen(),它是一個(gè)簡(jiǎn)單的逐步操作過(guò)程,會(huì)在屏幕上向用戶(hù)提供圖形目標(biāo),并要求用戶(hù)觸摸目標(biāo),然后記錄下原始的ADC讀數(shù),該讀數(shù)將用于后面的原始數(shù)據(jù)轉(zhuǎn)換到像素位置的調(diào)整例程。圖形目標(biāo)和用戶(hù)提示通過(guò)使用便攜式圖形用戶(hù)界面(PEG)圖形軟件API顯示在屏幕上,不過(guò)這也可以通過(guò)類(lèi)似的圖形軟件實(shí)現(xiàn)。 在理想情況下你只需兩組(X和Y)原始數(shù)據(jù),即在屏幕對(duì)角讀取的最小和最大值。而在實(shí)際應(yīng)用中,因?yàn)樵S多電阻觸摸屏存在顯著的非線性,因此如果在最小和最大值之間簡(jiǎn)單的插入位置數(shù)值會(huì)導(dǎo)致驅(qū)動(dòng)程序非常的不精確。 非線性意味著在屏幕上的等距物理移動(dòng)會(huì)導(dǎo)致原始數(shù)據(jù)的增量不等。更糟的情況下,即使我們只改變X軸的觸摸位置,但從Y軸讀取的數(shù)據(jù)也會(huì)發(fā)生很大的變化。 得出的結(jié)論是采用的校準(zhǔn)點(diǎn)越多越好,盡量減小內(nèi)插窗口的間距,才能產(chǎn)生可能的最佳精度。如果你能在工廠做一次校準(zhǔn),那么得到大量采樣點(diǎn)并不是件難事。如果無(wú)法在工廠完成校準(zhǔn),那你必須確定用戶(hù)需要輸入多少個(gè)點(diǎn)才能產(chǎn)生足夠精確的校準(zhǔn)。本文提供的校準(zhǔn)例程用了四個(gè)數(shù)據(jù)點(diǎn),即屏幕的每個(gè)角一個(gè)。對(duì)于參考板上的VGA分辨率(640x480)顯示屏幕來(lái)說(shuō),這樣做的精度可達(dá)到一個(gè)或二個(gè)像素之內(nèi)。對(duì)于更高的屏幕分辨率或其它觸摸屏,要產(chǎn)生一個(gè)精確的驅(qū)動(dòng)程序這些點(diǎn)也許過(guò)多,也許不夠。做出準(zhǔn)確判定的唯一途徑只能是對(duì)具體的硬件進(jìn)行大量反復(fù)測(cè)試。 2 . 4 . 3 正常操作 一旦校準(zhǔn)過(guò)程完成,我們就可以開(kāi)始正常的操作,并開(kāi)始向更高層軟件發(fā)送觸摸事件。我把提供的每個(gè)觸摸驅(qū)動(dòng)程序在每種支持的RTOS環(huán)境中都作為低優(yōu)先級(jí)任務(wù)加以執(zhí)行。任務(wù)的入口名叫PegTouchTask,因?yàn)轵?qū)動(dòng)程序需要與PEG圖形軟件進(jìn)行交互操作。這些驅(qū)動(dòng)程序修改后,可與其它圖形軟件甚至你自己編寫(xiě)的用戶(hù)接口環(huán)境協(xié)同工作。在任何時(shí)候PegTouchTask總是先調(diào)用硬件配置例程,然后調(diào)用校準(zhǔn)例程,最后進(jìn)入等待觸摸輸入的無(wú)限循環(huán)中。 LH79524驅(qū)動(dòng)程序以相似的方式工作。當(dāng)產(chǎn)生PEN_DOWN中斷時(shí),我們命令A(yù)DC序列器開(kāi)始進(jìn)行轉(zhuǎn)換。驅(qū)動(dòng)程序以20Hz的速度工作,檢查位置的變化,直到屏幕不再處于被觸摸的狀態(tài)。 當(dāng)屏幕被觸摸時(shí),我們需要對(duì)每個(gè)軸連續(xù)讀取多個(gè)轉(zhuǎn)換值以確定觸摸位置是否穩(wěn)定。如果任何兩個(gè)連續(xù)讀數(shù)中的增量或變化超出defined定義的噪聲窗口范圍,我們就要重新開(kāi)始。我們一直這樣做,直到讀取的多個(gè)連續(xù)值處于defined定義的穩(wěn)定范圍內(nèi),此時(shí)我們可以調(diào)整該結(jié)果并向更高層軟件報(bào)告更新。當(dāng)屏幕不再被觸摸時(shí),我們又可以中斷此任務(wù),等待觸摸輸入事件的發(fā)生。 在每個(gè)轉(zhuǎn)換過(guò)程的前后,驅(qū)動(dòng)程序必須檢查并確認(rèn)屏幕仍處于被觸摸狀態(tài)。我們不希望向更高層的軟件報(bào)告實(shí)際上是處于開(kāi)路狀態(tài)的穩(wěn)定讀數(shù)。我也看到過(guò)有的驅(qū)動(dòng)程序在屏幕被初始觸摸后會(huì)忽略掉N個(gè)讀數(shù)。不過(guò)對(duì)于這兩塊參考電路板,我沒(méi)有發(fā)現(xiàn)忽略掉一定數(shù)量的初始讀數(shù)是有必要或有益的。 第三章 觸摸屏控制器的軟件設(shè)計(jì)3 . 1 嵌入式Linux系統(tǒng)下的驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序是Linux內(nèi)核的重要組成部分,控制了操作系統(tǒng)和硬件設(shè)備之間的交互。Linux的設(shè)備治理是和文件系統(tǒng)緊密結(jié)合的,各種設(shè)備都以文件的形式存放在/dev目錄下,成為設(shè)備文件。應(yīng)用程序可以打開(kāi)、關(guān)閉、讀寫(xiě)這些設(shè)備文件,對(duì)設(shè)備的操作就像操作普通的數(shù)據(jù)文件一樣簡(jiǎn)便。為開(kāi)發(fā)便利、提高效率,本設(shè)計(jì)采用可安裝模塊方式開(kāi)發(fā)調(diào)試觸摸屏驅(qū)動(dòng)程序。Linux操作系統(tǒng)通過(guò)系統(tǒng)調(diào)用和硬件中斷完成從用戶(hù)空間到內(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ù)指針μClinux繼承了Linux的設(shè)備管理方法,將所有的設(shè)備看做具體的文件,通過(guò)文件系統(tǒng)層對(duì)設(shè)備進(jìn)行訪問(wèn)。所以在Clinux的框架結(jié)構(gòu)中,和設(shè)備相關(guān)的處理可以分為兩個(gè)層次――文件系統(tǒng)層和設(shè)備驅(qū)動(dòng)層。設(shè)備驅(qū)動(dòng)層屏蔽具體設(shè)備的細(xì)節(jié),文件系統(tǒng)層則向用戶(hù)提供一組統(tǒng)一的規(guī)范的用戶(hù)接口。這種設(shè)備管理方法可以很好地做到“與設(shè)備無(wú)關(guān)性”,使Clinux可以根據(jù)硬件外設(shè)的發(fā)展進(jìn)行方便的擴(kuò)展,比如要實(shí)現(xiàn)一個(gè)設(shè)備驅(qū)動(dòng)程序,只要根據(jù)具體的硬件特性向文件系統(tǒng)提供一組訪問(wèn)接口即可。 3 . 1 . 1 驅(qū)動(dòng)程序在內(nèi)核的裝載方法 驅(qū)動(dòng)程序在內(nèi)核中裝載的方式有兩種:一種是直接編譯進(jìn)內(nèi)核,在系統(tǒng)初始化的時(shí)候就對(duì)設(shè)備進(jìn)行注冊(cè);一種是模塊化加載的方法,將驅(qū)動(dòng)程序編譯成目標(biāo)文件(*.o),需要添加設(shè)備時(shí),使用insmod命令向系統(tǒng)注冊(cè),停止使用時(shí),用rmmod命令卸載。對(duì)于觸摸屏這種基本的輸入工具,建議采取直接編譯進(jìn)內(nèi)核的方式,這樣系統(tǒng)一啟動(dòng)就可以使用了。 向內(nèi)核注冊(cè)一個(gè)字符設(shè)備的函數(shù)為:externintregister_chrdev(unsignedintmajor,constchar*name, structfile_operations*fops);內(nèi)核用主設(shè)備號(hào)和次設(shè)備號(hào)惟一地標(biāo)識(shí)一個(gè)設(shè)備。參數(shù)major對(duì)應(yīng)所請(qǐng)求的主設(shè)備號(hào),name對(duì)應(yīng)設(shè)備的名字,fops是一個(gè)指向file_operations結(jié)構(gòu)的指針,它是Clinux下編寫(xiě)驅(qū)動(dòng)程序用到的一個(gè)關(guān)鍵的數(shù)據(jù)結(jié)構(gòu),它提供了應(yīng)用空間與驅(qū)動(dòng)程序的調(diào)用接口。這個(gè)數(shù)據(jù)結(jié)構(gòu)的每一項(xiàng)都指向驅(qū)動(dòng)程序完成的一個(gè)功能。 (TaggedStructureInitializationSyntax),這種語(yǔ)法可移植性更好,程序的可讀性和代碼的緊湊性都比較好。以觸摸屏為例: static struct file_operations ts_fops={ owner:THIS_MODULE, read:ts_read, //讀數(shù)據(jù)操作 poll:ts_poll, //非阻塞操作 ioctl:ts_ioctl, //I/O控制操作 open:ts_open, //打開(kāi)設(shè)備 release:ts_release, //釋放設(shè)備 fasync:ts_fasync, //異步觸發(fā)} 完整的結(jié)構(gòu)還包括llseek、readdir等函數(shù)指針,只是由于在本程序中沒(méi)有用到,所以省略不寫(xiě),內(nèi)核把它們默認(rèn)為空(NULL)。 3 . 2 .觸摸屏驅(qū)動(dòng)程序的流程及關(guān)鍵函數(shù)在本設(shè)計(jì)中。驅(qū)動(dòng)程序主要設(shè)計(jì)思想是:驅(qū)動(dòng)程序在初始化結(jié)束后,進(jìn)入空閑狀態(tài),等待中斷的到來(lái)。一旦筆中斷(pen_irq)發(fā)生,則進(jìn)入中斷處理程序,
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1