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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于處理器sc22410的手持終端觸摸屏的設(shè)計(jì)(參考版)

2025-01-19 22:49本頁面
  

【正文】 device是鼠標(biāo)設(shè)備, 因?yàn)轵?qū)動(dòng)程序中使用輸入事件接口, device設(shè)置為 /dev/input/event0。 }TS_RET; 再把 QWSMouseHandlerPrivate 函數(shù)中打開的設(shè)備文件節(jié)點(diǎn)由 / dev/ t s 改為自己的設(shè)備文件 / dev/input/event0。 unsigned short y。 在 src/kernel/ : typedef struct { unsigned short pressure。 分析 S3C2410平臺(tái)上的驅(qū)動(dòng) ,找到了 適用于北京博創(chuàng)的S3C2410處理器 平臺(tái)觸摸屏驅(qū)動(dòng) 的方法 : static struct file_operations s3c2410_fops = { owner: THIS_MODULE, open: s3c2410_ts_open, release: s3c2410_ts_release, }。 34 表 Qt/Embedded 函數(shù)接口 描述 QCustomTPanelHandlerPrivate::QCustomTPanelHandlerPrivate() 打開鼠標(biāo)類設(shè)備, 連接觸摸屏點(diǎn)擊 事件與處理函數(shù) QCustomTPanelHandlerPrivate::QCustomTPanelHandlerPrivate() 關(guān)閉鼠標(biāo)類設(shè)備 Struct CustomTPdata 驅(qū)動(dòng)返回的點(diǎn)擊數(shù)據(jù)結(jié)構(gòu) Void QCustomTPanelHandlerPrivate::readMouseData() 觸摸屏點(diǎn)擊數(shù)據(jù)獲取 Qt/Embedded的 觸摸屏驅(qū)動(dòng)接口的 設(shè)置 由前面分析可知, 鼠標(biāo) 類 設(shè)備在源碼目錄中的 src/ kernel/ qwsmouseqws. cpp 中實(shí)現(xiàn) ,從該類又重新派生出一些特殊鼠標(biāo)類設(shè)備的實(shí)現(xiàn)類 ,根據(jù)具體的硬件驅(qū)動(dòng)程序?qū)崿F(xiàn)的接口 ,可以實(shí)現(xiàn)類似的接口函數(shù)。由于觸摸屏在實(shí)現(xiàn)原理上存在著 A/D量化誤差的問題, 因此所有的觸摸屏接口實(shí)現(xiàn)類需要從特殊的 QCalibratedMouseHandler繼承,并獲得校正功能。 對(duì)于 Qt/Embedded 中的 輸入設(shè)備的底 層接口,觸摸屏設(shè)備和鍵盤設(shè)備需要根據(jù)具體的驅(qū)動(dòng)程序接口在 Qt/Embedded 中設(shè)計(jì)實(shí)現(xiàn)對(duì)應(yīng)的設(shè)備操作類。從鼠標(biāo)驅(qū)動(dòng)接口中 只會(huì)讀到相對(duì)移動(dòng)量, 而觸摸屏接口則 都是 絕對(duì)位置信息和壓力信息。打開相應(yīng)設(shè)備并 返回相應(yīng)設(shè)備的基類句柄指針給系統(tǒng),系統(tǒng)通過將該基類指針強(qiáng)制轉(zhuǎn)換為對(duì)應(yīng)的具體子類設(shè)備指針,獲得對(duì)具體鼠標(biāo)類設(shè)備和鍵盤類設(shè)備的調(diào)用操作。 然后這個(gè) 函數(shù)調(diào)用 QMouseDriverFactory::create()函數(shù)。其中鼠標(biāo)類設(shè)備的抽象基類為 QWSMouseHandler,從該類又重新派生出一些具體的鼠標(biāo)類設(shè)備的實(shí)現(xiàn)類。 t s _ t i m e r )s p i n _ u n l o c k _ i r q ( )返 回YN 圖 定時(shí)中斷服務(wù)程序流程圖 Qt/Eembedded中的觸摸屏驅(qū)動(dòng)接口 Qt/Embedded中與用戶輸 入事件相關(guān)的信號(hào),是建立在對(duì)底層輸入設(shè)備的接口調(diào)用之上的。 中 斷s p i n _ l o c k _ i r q ( )查 詢P E N I R Q = 0 ?s 3 c 2 4 1 0 _ g e t _ X Y ( )P e n S t a t u s = P E N _ F L E E T I N G重 新 設(shè) 置 定 時(shí) 器A d d _ t i m e r ( amp。因此有觸摸屏硬件中斷的情況下 50ms后就會(huì)引發(fā)定時(shí)中斷,中斷服務(wù)程序?yàn)閠s_timer_handler()(詳見附錄 A)。圖 。 中斷 處理程序如下 : int reguest_irq( unsigned int irq, void(*handler)(int, void *, struct pt_regs *), unsigned long irq_flags, const char *dev_name, void *dev_id) 其中, 參數(shù) irq表示所要申請(qǐng)的中斷號(hào) , handler為向系統(tǒng)登記的中斷處理子程序, dev_name為設(shè)備名 , dev_id為 中斷 設(shè)備標(biāo)識(shí)符 , irq_flags是申請(qǐng)時(shí)的選項(xiàng) [6]。 圖 Linux驅(qū)動(dòng)程序加載、卸載示意圖 這樣有效地避開了 ADC輸出值的不穩(wěn)定時(shí)期,使中斷服務(wù)程序和中斷處理任務(wù)串行化,達(dá)到了處理時(shí)間較長(zhǎng)的觸摸屏事件的目的。按觸摸屏?xí)r,從 ADC輸出的數(shù)值有一個(gè)抖動(dòng)過程,即從 ADC輸出的數(shù)值有一個(gè)不穩(wěn)定時(shí)期,這個(gè)過程大約為 10ms。這些工作都是在所有中斷被禁止的情況 30 下完成的,能夠被允許稍后完成的工作會(huì)推遲到下半部去。在 Linux操作系統(tǒng)中一般把中斷處理切為兩個(gè)部分或兩半。 (3) 中斷處理函數(shù) 在本設(shè)計(jì)中設(shè)備與系統(tǒng)之間以中斷方 式進(jìn)行數(shù)據(jù)交換。 驅(qū)動(dòng)程序的加載、卸載如圖 。在函數(shù)內(nèi)部通過 s3c2410_ts_init( )實(shí)現(xiàn)模塊的初始化工作。上面的這種特殊表示方法不是標(biāo)準(zhǔn) C的語法,而是 GNU編譯器的一種特殊擴(kuò)展,它使用名字進(jìn)行結(jié)構(gòu)字段的初始化,它的好處體現(xiàn)在結(jié)構(gòu)清晰,易于理解,并且避免了結(jié)構(gòu)發(fā)生變化帶來的許多問題。 Buf為 在沒有被讀取之前,系統(tǒng)緩沖區(qū)中存放 的 觸 摸點(diǎn) 數(shù)據(jù)信息。 lock使用自旋鎖,自旋鎖是基于共享變量來工作的,函數(shù)可以通過給某個(gè)變量設(shè)置一個(gè)特殊值來獲得鎖。當(dāng)有好幾個(gè)進(jìn)程都在等待某件事時(shí) , Linux會(huì)把這些進(jìn)程記錄到這個(gè)等待隊(duì)列。程序中的筆事件隊(duì)列是一個(gè)環(huán)形結(jié)構(gòu),當(dāng)有事件加入時(shí),隊(duì)列頭加一,當(dāng)有事件被取走時(shí),隊(duì)列尾加一,當(dāng)頭尾位置指針一致時(shí)讀取筆事件的信息,進(jìn)程會(huì)被安排進(jìn)入睡眠。 TS_DEV結(jié)構(gòu)用于記錄觸摸屏運(yùn)行的各種狀態(tài), PenStatus包括 PEN_UP、PEN_DOWN和 PEN_FLEETING。 29 TS_RET結(jié)構(gòu)體中的信息就是驅(qū)動(dòng)程序提供給上層應(yīng)用程序使用的信息,用來存儲(chǔ)觸摸屏的返回值。 } TS_DEV。 spinlock_t lock。 TS_RET buf。 } TS_RET。 unsigned short y。 typedef struct { unsigned short pressure。在完成一次 x/y 坐標(biāo)采樣的過程中需要一次模式轉(zhuǎn)換即在點(diǎn)擊觸摸屏之前是等待中斷模式,當(dāng)有觸摸動(dòng)作產(chǎn)生觸摸屏中斷以后,在 x/y 的坐標(biāo)采集驅(qū)動(dòng)中設(shè)置成自動(dòng)的 x/y 位置轉(zhuǎn)換模式,在完成采集以后再轉(zhuǎn)換回等待中斷模式,準(zhǔn)備下一次的觸摸采樣。在該模式下, A/D轉(zhuǎn)換操作停止, ADCDAT0寄存器的 XPDATA域和 ADCDAT1寄存器的YPDATA(正常 ADC)域保持這個(gè)先前轉(zhuǎn)換所得 的值 [5,16]。該模式下的觸摸屏引腳情況見表 。在觸摸筆點(diǎn)擊到觸摸屏上時(shí),控制器產(chǎn)生中斷信號(hào)( INT_TC)。該模式下的觸摸屏引腳情況見表 。觸摸屏控制器自動(dòng)將測(cè)量得到的 X軸數(shù)據(jù)寫入到 ADCDAT0寄存器的XPDATA域,然后將測(cè)量到的 Y軸數(shù)據(jù)寫入到 ADCDAT1的 YPDATA域 。轉(zhuǎn)換后,觸摸屏接口將產(chǎn)生中斷源( INT_ADC)到中斷控制器。轉(zhuǎn)換后,觸摸屏接口將產(chǎn)生中斷源( INT_ADC)到中斷 控制器。 觸摸屏驅(qū)動(dòng)程序分析 觸摸屏接口工作 模式及相關(guān)寄存器設(shè)置 S3C2410處理器中和觸摸屏相關(guān)的寄存器有 ADC控制寄存器、 ADC觸摸屏控制器、 ADC開始延遲寄存器、兩個(gè) ADC轉(zhuǎn)換數(shù)據(jù)寄存器( ADCDAT0和 ADCDAT1),由這些寄存器可以設(shè)置觸摸屏的五種工作模式: (1) 分離的 X/Y軸坐標(biāo)轉(zhuǎn)換模式 分離的 X/Y軸坐標(biāo)轉(zhuǎn)換模式可以分為兩個(gè)轉(zhuǎn)換步驟: X軸坐標(biāo)轉(zhuǎn)換和 Y坐標(biāo)轉(zhuǎn)換。模塊方式調(diào)試效率很高,它使用 insmod工具將編譯的模塊直接插入內(nèi)核,如果出現(xiàn)故障,可以使用 rmmod從內(nèi)核中卸載模塊。 Linux的驅(qū)動(dòng)開發(fā)調(diào)試有兩種方法,一種是直接編譯到內(nèi)核,再運(yùn)行新的內(nèi)核來測(cè)試;二是編譯為模塊的形式,單獨(dú)加載運(yùn)行調(diào)試。 (4) ioctl 方法 ioctl 方法主要用于對(duì)設(shè)備進(jìn)行讀寫之外的其他控制,比如配置設(shè)備、進(jìn)入或退出某種操作模式,這些操作一般都無 法通過 read/write文件操作來完成,比如在 UPNETARM2410S中的 SPI 設(shè)備通道的選擇操作,無法通過 write 操作控制,這就是 ioctl 操作的功能。由于用戶空間和內(nèi)核空間的內(nèi)存映射方 式完全不同,所以不能使用象 memcpy 之類的函數(shù),必須使用如下函數(shù): unsigned long copy_to_user (void *to,const void *from,unsigned long count)。 (3) Read 和 Write 方法 read方法完成將數(shù)據(jù)從內(nèi)核拷貝到應(yīng)用程序空間 , write方法相反,將數(shù)據(jù)從應(yīng)用程序空間拷貝到內(nèi)核。在大多數(shù)驅(qū)動(dòng)程序中 Open方法應(yīng)完成如下工作: 1) 遞增使用計(jì)數(shù) ; 2) 檢查特定設(shè)備錯(cuò)誤; 3) 如果設(shè)備是首次打 開,則對(duì)其進(jìn)行初始化 ; 4) 識(shí)別次設(shè)備號(hào),如有必要修改 fop指針; 5) 分配并填寫 filpprivate_data 中的數(shù)據(jù)。 驅(qū)動(dòng)程序的使用有 read、 write、 ioctl、 open、 release等方法。 file_operations是整個(gè) Linux內(nèi)核的重要數(shù)據(jù)結(jié)構(gòu),它也是 file{}、 inode{}結(jié)構(gòu)的重要成員,在嵌入式系統(tǒng)的開發(fā)中一般僅僅實(shí)現(xiàn)其中幾個(gè)接口函數(shù): read、write、 ioctl、 open、 release,就可以完成應(yīng)用系統(tǒng)需要的功能。 unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long)。 ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *)。 int (*lock) (struct file *, int, struct file_lock *)。 int (*fsync) (struct file *, struct dentry *, int datasync)。 int (*flush) (struct file *)。 int (*mmap) (struct file *, struct vm_area_struct *)。 unsigned int (*poll) (struct file *, struct poll_table_struct *)。 ssize_t (*read) (struct file *, char *, size_t, loff_t *)。 完整 的 file_operations數(shù)據(jù)結(jié)構(gòu)為: struct file_operations { struct module *owner。在 (devfs),所有的設(shè)備文件作為一個(gè)可以掛裝的文件系統(tǒng),這樣就可以被文件系統(tǒng)進(jìn)行統(tǒng)一管理 。主設(shè)備號(hào)相同的設(shè)備使用相同的驅(qū)動(dòng)程序,次設(shè)備號(hào)用于區(qū)分具體設(shè)備的實(shí)例。應(yīng) 24 用程序可以和 GLIBC庫連接,可以包含標(biāo)準(zhǔn)的頭文件,比如 ,在驅(qū)動(dòng)程序中是不能使用標(biāo)準(zhǔn) C庫的,包含的頭文件只能是內(nèi)核的頭文件。驅(qū)動(dòng)程序中有一個(gè)宏moudule_exit(退出處理函數(shù)名 )注冊(cè) 退出處理函數(shù)。在 Linux中采用給網(wǎng)絡(luò)接口設(shè)備分配一個(gè)唯一名字的方法來訪問該設(shè)備 [13]。它們由內(nèi)核中網(wǎng)絡(luò)子系統(tǒng)驅(qū)動(dòng), 負(fù)責(zé)發(fā)送和接收數(shù)據(jù)包。它也允許像字符設(shè)備一樣的訪問,可以一次傳遞任意多的字節(jié)。 (2) 塊設(shè)備: Linux的塊設(shè)備通常是指諸如磁盤,內(nèi)存, Flash等可以容納文件系統(tǒng)的存儲(chǔ)設(shè)備。在 Linux中它們也被映射為文件系統(tǒng)的一個(gè)節(jié)點(diǎn),常放置在 /dev目錄下 。 目前 Linux 支持的設(shè)備驅(qū)動(dòng)可分為三種:字符設(shè)備( character device) 、 塊設(shè)備( block deivce) 和 網(wǎng)絡(luò)接口設(shè)備( work interface)。后來發(fā)現(xiàn)是實(shí)驗(yàn)文檔書寫有誤,應(yīng)該把文件都復(fù)制到 yaffs 文件系統(tǒng)下: 將 src/ 下載到 開發(fā)板 的 /mnt/yaffs/Qtopia 目錄下 . 將 src/e2fsinstall/lib/*下載到 開發(fā)板 的 /mnt/yaffs/lib 目錄下 將 src/jpeginstall/lib/*下載到 開發(fā)板 的 /mnt/yaffs/lib 目錄下 經(jīng)過改正,最終調(diào)試通過,解決了系統(tǒng)的問題。后來查了嵌入式文件系統(tǒng)的資料,知道 yaffs 文件系統(tǒng)的屬性是可讀、可寫、可修改的。/usr/bin/39。 在編譯完后通過 NFS將文件下載到/mnt/yaffs目錄下,同時(shí)還要復(fù)制幾個(gè)庫文件到開發(fā)板上。 在宿主機(jī)上編譯成功的 Qtopia平臺(tái)如圖 。 這里多出了 libqte庫文件和 qtopia的編譯。 Qtopia虛擬平臺(tái) 由 文件 、 、 和 . 。使用 Qt/Em
點(diǎn)擊復(fù)制文檔內(nèi)容
電大資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1