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

正文內(nèi)容

基于處理器sc22410的手持終端觸摸屏的設(shè)計(jì)(編輯修改稿)

2025-02-14 14:31 本頁面
 

【文章內(nèi)容簡介】 er的使用Qt Designer是一個(gè)GUI工具,它可以幫助我們來加快編寫Qt應(yīng)用程序的速度。利用Qt Designer可以用一種所見既所得的方式來生成Qt程序GUI 圖形界面的程序源碼,并且只需要手工編寫一個(gè)main函數(shù)就可以進(jìn)行編譯了。利用Qt Designer可以非常快速的學(xué)會(huì)Qt,但是在編寫大型應(yīng)用程序時(shí)并不使用Qt Designer,這是因?yàn)镼t Designer所產(chǎn)生的程序源碼有些繁瑣,運(yùn)行起來也比較慢,因此,只是借助Qt Designer來更好的理解和學(xué)習(xí)Qt,不是直接去運(yùn)行Qt Designer 生成的程序源碼。Qt應(yīng)用程序的完成包括以下幾個(gè)步驟:(1) 創(chuàng)建和初始化子部件(2) 設(shè)置子部件的布局(3) 設(shè)置Tab鍵的次序(4) 建立信號(hào)與插槽的連接將部件布置好后,就可以根據(jù)我們的需要來建立連接,Qt開創(chuàng)性的使用了信號(hào)與插槽機(jī)制,與傳統(tǒng)的回調(diào)函數(shù)方式不同,它是一種靈活、類型安全、快速、完全面向?qū)ο蟮腃++機(jī)制。使用傳統(tǒng)的回調(diào)函數(shù)機(jī)制來關(guān)聯(lián)某段代碼和和一個(gè)按鍵,需要有一個(gè)指向函數(shù)的指針,并且將這個(gè)指針地址傳給按鈕。當(dāng)這個(gè)按鈕被按下,這個(gè)函數(shù)就會(huì)被執(zhí)行。以前的工具包不能保證函數(shù)被執(zhí)行時(shí)所傳遞的類型是正確的,這使得進(jìn)程很容易崩潰。另一個(gè)問題是,這種回調(diào)方法緊緊得綁定了GUI得基本功能元素,使得很難進(jìn)行獨(dú)立的分類開發(fā)。Qt的信號(hào)與插槽機(jī)制則不同,Qt部件(Widgets)事件發(fā)生時(shí)發(fā)出信號(hào),如一個(gè)按鈕被點(diǎn)擊時(shí)會(huì)發(fā)出一個(gè)“clicked”信號(hào)。程序員可以選擇建立一個(gè)函數(shù)(稱為插槽)并調(diào)用connect( )來將這個(gè)信號(hào)與插槽連接起來。用戶在編程時(shí)可以將兩個(gè)對(duì)象捆綁在一起而不需要知道每個(gè)對(duì)象的各自的信息,而且可以自己創(chuàng)建信號(hào)與插槽,發(fā)射自己的信號(hào)等等。 Qt 。但只有這兩個(gè)文件程序還是不能運(yùn)行的。到這一步編譯出來的Qt應(yīng)用程序只能在宿主機(jī)上運(yùn)行,若要移植到開發(fā)板上還要對(duì)Qt/Embedded重新編譯。其編譯步驟與前面編譯宿主機(jī)上的Qt/Embedded類似,唯一不同的是編譯器的設(shè)置:export TMAKEPATH=$TMAKEDIR/lib/qws/linuxarmg++,即將平臺(tái)由linuxx86g++改為linuxarmg++。 Qtopia虛擬平臺(tái)建立Qtopia是TrollTech公司為采用嵌入式Linux系統(tǒng)的移動(dòng)計(jì)算設(shè)備和手持設(shè)備而開發(fā)的綜合應(yīng)用平臺(tái),包含完整的應(yīng)用層、靈活的用戶界面、窗口操作系統(tǒng)、應(yīng)用程序啟動(dòng)程序以及開發(fā)框架。它是基于Qt/Embedded編寫的應(yīng)用程序環(huán)境,也是開放源碼的一套應(yīng)用程序包和開發(fā)庫。使用Qt/Embedded不僅可以開發(fā)Qtopia也可以用來開發(fā)面向Qtopia的第三方軟件。它包括三個(gè)版本:Qtopia手機(jī)版Qtopia PDA版和Qtopia消費(fèi)電子產(chǎn)品平臺(tái)。、 .。其編譯方法和前面建立qt桌面運(yùn)行環(huán)境時(shí)的方法類似,不過前面解壓出來的文件在這里不可以直接使用,必須重新解壓。這里多出了libqte庫文件和qtopia的編譯。其中在編譯qtopia時(shí)容易出現(xiàn)錯(cuò)誤,主要是說Qtoipa的運(yùn)行需要jpeg的支持,提示前面在編譯ligqte庫文件時(shí)沒有configure上systemjpeg,因此需要重新編譯libqte,在configure時(shí)加上systemjpeg。 宿主機(jī)上的虛擬Qtopia平臺(tái) Qtopia的移植,其編譯方法和建立本機(jī)Qtopia平臺(tái)類似,、jpeg6b和tslib三個(gè)工具包,Qtopia分別用到它們中的libuuid、jpeg和tslib庫文件。在編譯完后通過NFS將文件下載到/mnt/yaffs目錄下,同時(shí)還要復(fù)制幾個(gè)庫文件到開發(fā)板上。但是在調(diào)試過程中遇到了問題:實(shí)驗(yàn)文檔上給出的是:將src/ 下載到目標(biāo)機(jī)的/usr/bin 目錄下將src/e2fsinstall/lib/*下載到目標(biāo)機(jī)的/lib 目錄下將src/jpeginstall/lib/*下載到目標(biāo)機(jī)的/lib 目錄下通過NFS將開發(fā)板掛載到宿主機(jī)后,依次執(zhí)行:cp /root/share/ /usr/bincp /root/share/* /libcp /root/share/* /lib終端上總提示錯(cuò)誤:cp: unable to open ‘/lib/*’:Operation not permitted cp: unable to open ‘/lib/.*’: Operation not permitted cp: unable to open 39。/usr/bin/39。: Permission denied起初認(rèn)為是cp的參數(shù)設(shè)置錯(cuò)誤,可將cp的每個(gè)參數(shù)都試了仍然提示上面的錯(cuò)誤。后來查了嵌入式文件系統(tǒng)的資料,知道yaffs文件系統(tǒng)的屬性是可讀、可寫、可修改的。而根文件系統(tǒng)是只讀的,/lib和/usr/bin都是屬于根文件系統(tǒng),所以文件無法復(fù)制。后來發(fā)現(xiàn)是實(shí)驗(yàn)文檔書寫有誤,應(yīng)該把文件都復(fù)制到y(tǒng)affs文件系統(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)的問題。 5 觸摸屏圖形操作界面的實(shí)現(xiàn) Linux設(shè)備驅(qū)動(dòng)程序 設(shè)備驅(qū)動(dòng)程序分類Linux中的驅(qū)動(dòng)程序設(shè)計(jì)是嵌入式Linux開發(fā)中十分重要的部分,驅(qū)動(dòng)程序是應(yīng)用程序與硬件之間的一個(gè)中間軟件層。目前Linux 支持的設(shè)備驅(qū)動(dòng)可分為三種:字符設(shè)備(character device)、塊設(shè)備(block deivce)和網(wǎng)絡(luò)接口設(shè)備(network interface)。(1) 字符設(shè)備:所有能夠像字節(jié)流一樣訪問的設(shè)備比如文件等在Linux中都通過字符設(shè)備驅(qū)動(dòng)程序來實(shí)現(xiàn)。在Linux中它們也被映射為文件系統(tǒng)的一個(gè)節(jié)點(diǎn),常放置在/dev目錄下。字符設(shè)備驅(qū)動(dòng)程序一般要包含open,close,read,write 等幾個(gè)系統(tǒng)調(diào)用。(2) 塊設(shè)備:Linux的塊設(shè)備通常是指諸如磁盤,內(nèi)存,F(xiàn)lash等可以容納文件系統(tǒng)的存儲(chǔ)設(shè)備。與字符設(shè)備類似,塊設(shè)備也是通過文件系統(tǒng)來進(jìn)行訪問,它們之間的區(qū)別僅僅在于內(nèi)核內(nèi)部管理數(shù)據(jù)的方式不同。它也允許像字符設(shè)備一樣的訪問,可以一次傳遞任意多的字節(jié)。(3) 網(wǎng)絡(luò)接口設(shè)備:網(wǎng)絡(luò)接口設(shè)備是Linux中比較復(fù)雜的一種設(shè)備,通常它們指的是硬件設(shè)備,但有時(shí)也可是一個(gè)軟件設(shè)備(如回環(huán)接口loopback)。它們由內(nèi)核中網(wǎng)絡(luò)子系統(tǒng)驅(qū)動(dòng),負(fù)責(zé)發(fā)送和接收數(shù)據(jù)包。它們的數(shù)據(jù)傳送往往并不是面向流的(少數(shù)如telnet,F(xiàn)TP等是面向流的),所以不容易把它們映射到一個(gè)文件系統(tǒng)的節(jié)點(diǎn)上。在Linux中采用給網(wǎng)絡(luò)接口設(shè)備分配一個(gè)唯一名字的方法來訪問該設(shè)備[13]。 Linux設(shè)備驅(qū)動(dòng)程序的構(gòu)成應(yīng)用程序一般有一個(gè)main 函數(shù),從頭到尾執(zhí)行一個(gè)任務(wù);驅(qū)動(dòng)程序卻不同,它沒有main函數(shù),通過使用宏module_init(初始化函數(shù)名)將初始化函數(shù)加入內(nèi)核全局初始化函數(shù)列表中,在內(nèi)核初始化時(shí)執(zhí)行驅(qū)動(dòng)的初始化函數(shù),從而完成驅(qū)動(dòng)的初始化和注冊(cè),之后驅(qū)動(dòng)便停止等待被應(yīng)用軟件調(diào)用。驅(qū)動(dòng)程序中有一個(gè)宏moudule_exit(退出處理函數(shù)名)注冊(cè)退出處理函數(shù)。它在驅(qū)動(dòng)退出時(shí)被調(diào)用。應(yīng)用程序可以和GLIBC庫連接,可以包含標(biāo)準(zhǔn)的頭文件,比如,在驅(qū)動(dòng)程序中是不能使用標(biāo)準(zhǔn)C庫的,包含的頭文件只能是內(nèi)核的頭文件。內(nèi)核需要一對(duì)稱作主次設(shè)備號(hào)的參數(shù),才能唯一標(biāo)識(shí)一個(gè)設(shè)備。主設(shè)備號(hào)相同的設(shè)備使用相同的驅(qū)動(dòng)程序,次設(shè)備號(hào)用于區(qū)分具體設(shè)備的實(shí)例。設(shè)備操作宏MAJOR()和MINOR()可分別用于獲取主次設(shè)備號(hào)設(shè)備類型、主次設(shè)備號(hào)是內(nèi)核與設(shè)備驅(qū)動(dòng)程序通信時(shí)所使用的,但是對(duì)于開發(fā)應(yīng)用程序的用戶來說比較難于理解和記憶,所以Linux使用了設(shè)備文件的概念來統(tǒng)一對(duì)設(shè)備的訪問接口,在引入設(shè)備文件系統(tǒng)(devfs)之前Linux將設(shè)備文件放在/dev目錄下,設(shè)備的命名一般為設(shè)備文件名加上數(shù)字或字母表示的子類。 (devfs),所有的設(shè)備文件作為一個(gè)可以掛裝的文件系統(tǒng),這樣就可以被文件系統(tǒng)進(jìn)行統(tǒng)一管理。通常所說的設(shè)備驅(qū)動(dòng)程序接口是指結(jié)構(gòu)file_operations{},它定義在include/linux/。完整的file_operations數(shù)據(jù)結(jié)構(gòu)為:struct file_operations {struct module *owner。loff_t (*llseek) (struct file *, loff_t, int)。ssize_t (*read) (struct file *, char *, size_t, loff_t *)。ssize_t (*write) (struct file *, const char *, size_t, loff_int (*readdir) (struct file *, void *, filldir_t)。unsigned int (*poll) (struct file *, struct poll_table_struct *)。int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long)。int (*mmap) (struct file *, struct vm_area_struct *)。int (*open) (struct inode *, struct file *)。int (*flush) (struct file *)。int (*release) (struct inode *, struct file *)。int (*fsync) (struct file *, struct dentry *, int datasync)。int (*fasync) (int, struct file *, int)。int (*lock) (struct file *, int, struct file_lock *)。ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *)。ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *)。ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int)。unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsignedlong)。}。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)需要的功能。static struct file_operations _fops = {…}完成了將驅(qū)動(dòng)函數(shù)映射為標(biāo)準(zhǔn)接口,devfs_register()和register_chrdev()函數(shù)完成將驅(qū)動(dòng)向內(nèi)核注冊(cè)。驅(qū)動(dòng)程序的使用有read、write、ioctl、open、release等方法。(1) Open 方法Open方法提供給驅(qū)動(dòng)程序初始化設(shè)備的能力,從而為以后的設(shè)備操作做好準(zhǔn)備,此外open操作一般還會(huì)遞增使用計(jì)數(shù),用以防止文件關(guān)閉前模塊被卸載出內(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ù)。(2) Release 方法與open方法相反,release方法應(yīng)完成如下功能:1)釋放由open 分配的filpprivate_data 中的所有內(nèi)容;2)在最后一次關(guān)閉操作時(shí)關(guān)閉設(shè)備;3)使用計(jì)數(shù)減一。(3) Read 和Write 方法read方法完成將數(shù)據(jù)從內(nèi)核拷貝到應(yīng)用程序空間,write方法相反,將數(shù)據(jù)從應(yīng)用程序空間拷貝到內(nèi)核。ssize_t demo_write(struct file *filp,const char * buffer, size_t count,loff_t *ppos)ssize_t demo_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)對(duì)于者兩個(gè)方法,參數(shù)filp 是文件指針,count 是請(qǐng)求傳輸數(shù)據(jù)的長度,buffer 是用戶空間的數(shù)據(jù)緩沖區(qū),ppos 是文件中進(jìn)行操作的偏移量,類型為64 位數(shù)。由于用戶空間和內(nèi)核空間的內(nèi)存映射方式完全不同,所以不能使用象memcpy 之類的函數(shù),必須使用如下函數(shù):unsigned long copy_to_user (void *to,const void *from,unsigned long count)。unsigned long copy_from_user(void *to,const void *from,unsigned long count)。(4) ioctl 方法ioctl 方法主要用于對(duì)設(shè)備進(jìn)行讀寫之外的其他控制,比如配置設(shè)備、進(jìn)入或退出某種操作模式,這些操作一般都無法通過read/write文件操作來完成,比如在UPNETARM2410S中的SPI 設(shè)備通道的選擇操作
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1