計算機(jī)畢業(yè)設(shè)計--基于arm和qt的多路信號檢測系統(tǒng)設(shè)計_第1頁
已閱讀1頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  畢業(yè)設(shè)計說明書</b></p><p>  基于ARM和QT的多路信號檢測系統(tǒng)設(shè)計</p><p>  學(xué) 院:計算機(jī)科學(xué)與技術(shù)學(xué)院</p><p>  專 業(yè): 計算機(jī)科學(xué)與技術(shù) </p><p>  學(xué)生姓名: </p>

2、<p>  學(xué) 號: </p><p>  指導(dǎo)教師: </p><p><b>  201 年6月</b></p><p><b>  摘 要</b></p><p>  隨著嵌入式越來越受到

3、重視,嵌入式系統(tǒng)近年來的發(fā)展有目共睹,嵌入式系統(tǒng)的應(yīng)用越來越廣泛。無論是傳統(tǒng)的工業(yè)監(jiān)測、機(jī)械控制,還是新興的移動通訊、數(shù)字娛樂,嵌入式系統(tǒng)正逐漸走進(jìn)人們的生活生產(chǎn)的方方面面。在工業(yè)檢測方面,傳統(tǒng)的監(jiān)控系統(tǒng)主要以單片機(jī)為硬件載體進(jìn)行設(shè)計,功能相對單一,可視化及拓展性有限。隨著Linux系統(tǒng)的不斷升級換代,現(xiàn)在出現(xiàn)了以ARM芯片為載體,以Linux系統(tǒng)為軟件平臺設(shè)計出的新一代監(jiān)控系統(tǒng)。除了能實現(xiàn)原有單片機(jī)的功能外,其可視化更強(qiáng),具備網(wǎng)絡(luò)通信

4、功能,是一臺具備功能拓展更豐富的微型計算機(jī)。</p><p>  本文將以北京博創(chuàng)興業(yè)科技有限公司提供的UP-NetARM2410-S 實驗儀器為硬件載體,對監(jiān)測系統(tǒng)的設(shè)計進(jìn)行研究和應(yīng)用。系統(tǒng)平臺使用的是Linux2.4.18的內(nèi)核,GUI首次以Qt為底層圖形模塊,用C++和Qt圖形用戶界面類庫開發(fā)圖形數(shù)據(jù)一體化監(jiān)控平臺。</p><p>  本文先從硬件平臺設(shè)計入手,根據(jù)要求對硬件設(shè)備進(jìn)

5、行了解,設(shè)計了功能模塊,在軟件部分移植了Linux操作系統(tǒng)平臺,構(gòu)建了開發(fā)環(huán)境,就數(shù)模轉(zhuǎn)換、觸摸屏驅(qū)動程序進(jìn)行編程,最后詳述在了Qt下,如何使用C++語言設(shè)計監(jiān)控系統(tǒng)圖形界面。最后展現(xiàn)了系統(tǒng)運行效果,并提出了改進(jìn)意見。</p><p>  運行效果表明,設(shè)計的監(jiān)控系統(tǒng)是有效和實時的。</p><p>  關(guān)鍵詞:嵌入式系統(tǒng) Linux 驅(qū)動 Qt</p><p>&

6、lt;b>  Abstract</b></p><p>  With the increasing importance of embedded technology, the development of embedded systems for all to see in recent years, embedded system applications increasingly broa

7、d. Whether in traditional industrial monitoring, mechanical control, or the emerging mobile communications, digital entertainment, embedded systems are gradually moved into all aspects of production and lives of the peop

8、le. In the industrial testing, the traditional embedded control systems primarily for the single-chip microcomp</p><p>  This paper, based on UP-NetARM2410-S experiment instrument provided by the Beijing

9、0;Universal Pioneering Technology Co., LTD., designs a monitoring system to conduct research and application. System platform is Linux2.4.18 kernel, GUI for the first time in the bottom Qt graphics module,

10、 using C++ and Qt graphical user interface library monitor the development of graphical data integration platform.</p><p>  This article first start with the hardware platform design, required to understand

11、the hardware devices designed modules, ported in the software part of the Linux operating system platform, build the development environment, how to build a development environment, and were on the A/D conversion, touch

12、screen driver programming, the final details in Qt, how to use C++ language designed monitoring system graphical interface. As an application of research papers, the paper mainly on the software de</p><p>  

13、The study proved to be effective and real-time.</p><p>  Key words: Embedded system,Linux,Driver,Qt</p><p><b>  目 錄</b></p><p><b>  摘 要I</b></p>&l

14、t;p>  AbstractII</p><p><b>  目 錄III</b></p><p><b>  第一章 前言1</b></p><p>  1.1課題研究背景和意義1</p><p>  1.2嵌入式技術(shù)發(fā)展現(xiàn)狀與未來1</p><p>  

15、1.3課題研究內(nèi)容2</p><p>  第二章 基于ARM和QT的多路信號監(jiān)測系統(tǒng)硬件設(shè)計3</p><p><b>  2.1系統(tǒng)組成3</b></p><p>  2.2 S3C2410介紹3</p><p><b>  2.3設(shè)計方案7</b></p><p&g

16、t;  2.4 ADC硬件設(shè)計8</p><p>  2.4.1 ADC 轉(zhuǎn)換器8</p><p>  2.4.2 A/D轉(zhuǎn)換器在擴(kuò)展板的連接9</p><p>  第三章 嵌入式linux移植及驅(qū)動開發(fā)11</p><p>  3.1 linux主要特征11</p><p>  3.2 驅(qū)動程序開發(fā)12&

17、lt;/p><p>  3.2.1 嵌入式linux驅(qū)動程序開發(fā)方法12</p><p>  3.2.2 ADC在ARM中的驅(qū)動開發(fā)12</p><p>  3.2.3 觸摸屏在ARM中的驅(qū)動開發(fā)21</p><p>  第四章 信號監(jiān)測應(yīng)用軟件設(shè)計26</p><p>  4.1 Qt 主要特性26<

18、;/p><p>  4.2 Qt 類庫及其機(jī)制簡介27</p><p>  4.2.1 Qt類庫27</p><p>  4.2.2 Qt 對象間通訊機(jī)制28</p><p>  4.3 信號監(jiān)測UI 設(shè)計29</p><p>  4.4信號監(jiān)測UI和驅(qū)動連接30</p><p>  第

19、五章 總結(jié)與展望37</p><p>  5.1 全文總結(jié)37</p><p><b>  5.2 展望37</b></p><p><b>  參考文獻(xiàn)38</b></p><p><b>  致 謝39</b></p><p><b

20、>  附錄40</b></p><p><b>  第一章 前言</b></p><p>  1.1課題研究背景和意義</p><p>  在現(xiàn)在日益信息化的社會中,計算機(jī)和網(wǎng)絡(luò)已經(jīng)全面滲透到日常生活的每一個角落。對于我們每個人,需要的已經(jīng)不再僅僅是那種放在桌上處理文檔,進(jìn)行工作管理和生產(chǎn)控制的計算機(jī)"機(jī)器&quo

21、t;;各種各樣的新型嵌入式系統(tǒng)設(shè)備在應(yīng)用數(shù)量上已經(jīng)遠(yuǎn)遠(yuǎn)超過通用計算機(jī)。而在工業(yè)和服務(wù)領(lǐng)域中,使用嵌入式技術(shù)的數(shù)字機(jī)床,智能工具,工業(yè)機(jī)器人,服務(wù)機(jī)器人也將逐漸改變傳統(tǒng)的工業(yè)和服務(wù)方式。 目前嵌入式系統(tǒng)技術(shù)已經(jīng)成為了最熱門的技術(shù)之一,吸引了大批的優(yōu)秀人才投入其中。嵌入式系統(tǒng)可以稱為后PC時代和后網(wǎng)絡(luò)時代的新秀。由于嵌入式系統(tǒng)采用的是微處理器,實現(xiàn)相對單一的功能,采用獨立的操作系統(tǒng),所以往往不需要大量的外圍器件。因而在體積上,功耗

22、上有其自身的優(yōu)勢。嵌入式在應(yīng)用中擁有廣闊的前景!</p><p>  1.2嵌入式技術(shù)發(fā)展現(xiàn)狀與未來</p><p>  嵌入式系統(tǒng)是將計算機(jī)技術(shù)、半導(dǎo)體技術(shù)和電子技術(shù)與各個行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物,是一門綜合技術(shù)學(xué)科。由于空間和各種資源相對不足,嵌入式系統(tǒng)的硬件和軟件都必須高效率地設(shè)計,量體裁衣、去除冗余,力爭在同樣的硅片面積上實現(xiàn)更高的性能,這樣才能在具體應(yīng)用中對處理器的選擇更具有

23、競爭力。 作為軟硬件高度結(jié)合的產(chǎn)物。為了提高執(zhí)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲器芯片或單片機(jī)本身中,而不是存貯于磁盤等載體中。片上系統(tǒng),板上系統(tǒng)的實現(xiàn),使得以pda等為代表的這類產(chǎn)品擁有更加熟悉的操作界面和操作方式,比著傳統(tǒng)的商務(wù)通等功能更加完善,實用。</p><p>  因為嵌入式系統(tǒng)往往和具體應(yīng)用有機(jī)地結(jié)合在一起,它的升級換代也是和具體產(chǎn)品同步進(jìn)行,因此嵌入式系統(tǒng)產(chǎn)品一旦進(jìn)入市場,具有

24、較長的生命周期。 </p><p>  從軟件方面講,軟件功能趨向?qū)R换U粕显O(shè)備的各種通訊,管理軟件需求量極大,開發(fā)環(huán)境齊備,可以完全在PC機(jī)上進(jìn)行,通過軟件模擬調(diào)試,等到模擬通過再下載入機(jī)器,而且因為可以使用大量的PC機(jī)的API函數(shù),SDK,所以開發(fā)過程是在已有的成熟技術(shù)基礎(chǔ)上進(jìn)行,相對簡單。</p><p>  硬件方面,不僅有各大公司的微處理器芯片,還有用于學(xué)習(xí)和研發(fā)的各種配套開發(fā)

25、包。目前低層系統(tǒng)和硬件平臺經(jīng)過若干年的研究,已經(jīng)相對比較成熟,實現(xiàn)各種功能的芯片應(yīng)有盡有。而且巨大的市場需求給我們提供了學(xué)習(xí)研發(fā)的資金和技術(shù)力量。從軟件方面講,也有相當(dāng)部分的成熟軟件系統(tǒng)。國外商品化的嵌入式實時操作系統(tǒng),已進(jìn)入我國市場的有WindRiver、Microsoft、QNX和Nuclear等產(chǎn)品。我國自主開發(fā)的嵌入式系統(tǒng)軟件產(chǎn)品如科銀(CoreTek)公司的嵌入式軟件開發(fā)平臺DeltaSystem,它不僅包括DeltaCore

26、嵌入式實時操作系統(tǒng),而且還包括LamdaTools交叉開發(fā)工具套件、測試工具、應(yīng)用組件等;此外,中科院也推出了Hopen嵌入式操作系統(tǒng)(雖然還不夠完善)。同時由于是研究熱點,所以我們可以在網(wǎng)上找到各種各樣的免費資源,從各大廠商的開發(fā)文檔,到各種驅(qū)動,程序源代碼,甚至很多廠商還提供微處理器的樣片。這對于我們從事這方面的研發(fā),無疑是個資源寶庫。對于軟件設(shè)計來說,不管是上手還是進(jìn)一步開發(fā),都相對來說比較容易。這就使得很多生手能夠比較快的進(jìn)入研

27、究狀態(tài),利于發(fā)揮大家的積極創(chuàng)造性。[6]</p><p>  嵌入式系統(tǒng)是這個后PC時代的擎天之柱。我們有理由相信,未來的電子技術(shù)就是嵌入式系統(tǒng)技術(shù)的天下。</p><p><b>  1.3課題研究內(nèi)容</b></p><p>  嵌入式系統(tǒng)逐漸成為IT業(yè)界技術(shù)研究和產(chǎn)品開發(fā)的熱點。其重要性隨著手持設(shè)備的普及而越來越突出。本文通過對嵌入式li

28、nux和qt的分析與研究,在Qt和ADC自定義驅(qū)動的基礎(chǔ)上,開發(fā)了基于S3C2410和ADC實現(xiàn)對多路模擬量信號的實時監(jiān)測系統(tǒng),利用QT和液晶實現(xiàn)圖形化顯示數(shù)據(jù)。一體化的圖形界面非常方便用戶觀測,充分地體現(xiàn)了嵌入式系統(tǒng)的優(yōu)勢。此外Qt作為一個GUI解決方案,可用于對GUI大小要求苛刻的系統(tǒng)中。</p><p>  第二章 基于ARM和QT的多路信號監(jiān)測系統(tǒng)硬件設(shè)計</p><p><

29、b>  2.1系統(tǒng)組成</b></p><p>  信號監(jiān)測系統(tǒng)設(shè)計包括信號采集模塊、數(shù)據(jù)處理功能電路模塊、以及液晶顯示模塊,如圖2-1所示。這些模塊使得該設(shè)備擁有強(qiáng)大的功能,集信號采集、數(shù)據(jù)處理、參數(shù)顯示為一體,用戶可方便的對多路信號進(jìn)行實時監(jiān)測。</p><p>  圖2-1 系統(tǒng)概要框圖</p><p>  2.2 S3C2410介紹<

30、/p><p>  S3C2410處理器是Samsung公司基于ARM公司的ARM920T處理器內(nèi)核,采用0.18um制造工藝的32位微控制器。該處理器擁有:獨立的16KB指令Cache和16KB數(shù)據(jù)Cache,MMU,支持TFT的LCD控制器, NAND閃存控制器,3路UART,4路DMA,4路帶PWM的Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BU

31、S 接口,2個USB主機(jī),1個USB設(shè)備,SD主機(jī)和MMC接口,2路SPI。S3C2410處理器最高可運行在203MHz。[1,7,11]</p><p>  圖2-2 S3C2410資源結(jié)構(gòu)圖</p><p>  CPU:S3C2410X芯片是基于ARM920T內(nèi)核,主頻200M,提供如下功能: </p><p>  ①1.8V內(nèi)核電壓/電源管理有Normal、S

32、low、Idle、Stop和Power-off模式</p><p> ?、?.3V內(nèi)存電壓、3.3V的處理器IO電壓,處理器擁有16KB I-Cache, 16KB D-Cache, 和MMU</p><p>  ③外部SDRAM控制器 </p><p> ?、芗蒐CD控制器可以支持4K color STN and 64K color TFT,1個通道的專用DMA

33、用于顯存刷新 </p><p>  ⑤有外部請求引腳的4通道DMA,3通道的UART,支持IrDA1.0 16-byteFIFO, 1個通道的SPI </p><p> ?、?個多主IIC總線控制器,一個IIS總線控制器 </p><p> ?、逽DHost支持1.1的多媒體協(xié)議 </p><p>  ⑧兩個USB1.1控制器,可以配置成為h

34、ost或device </p><p> ?、?通道PWM和一通道的內(nèi)部定時器 /8通道10bitADC和觸摸屏控制器</p><p> ?、饪撮T狗定時器 /117個外部通用IO、24個外部中斷源</p><p>  其中本文主要顯示應(yīng)用ADC和LCD資源!</p><p>  UP-NetARM2410-S 實驗儀器硬件配置如下表:<

35、/p><p>  表2-1UP-NetARM2410-S 實驗儀器硬件配置</p><p>  UP-NetARM2410-S試驗箱圖如下:</p><p>  圖2-3 UP-NetARM2410-S試驗箱</p><p>  圖2-4 UP-NetARM2410-S</p><p><b>  2.3設(shè)計方案

36、</b></p><p>  圖2-5 系統(tǒng)結(jié)構(gòu)圖</p><p>  如圖2-5所示,電流電壓信號經(jīng)過電阻分壓簡單濾波后送入S3C2410 ADC模塊,S3C2410接受電阻觸摸屏輸入和鼠標(biāo)輸入,并送顯示。</p><p>  2.4 ADC硬件設(shè)計</p><p>  2.4.1 ADC 轉(zhuǎn)換器</p><

37、p>  A/D 轉(zhuǎn)換器是模擬信號源和CPU 之間聯(lián)系的接口,它的任務(wù)是將連續(xù)變化的模擬信號轉(zhuǎn)換為數(shù)字信號,以便計算機(jī)和數(shù)字系統(tǒng)進(jìn)行處理、存儲、控制和顯示。在工業(yè)控制和數(shù)據(jù)采集及許多其他領(lǐng)域中,A/D 轉(zhuǎn)換是不可缺少的。A/D 轉(zhuǎn)換器有以下類型:逐位比較型、積分型、計數(shù)型、并行比較型、電壓-頻率型,主要應(yīng)根據(jù)使用場合的具體要求,按照轉(zhuǎn)換速度、精度、價格、功能以及接口條件等因素來決定選擇何種類型。[1]常用的有以下兩種:</p&

38、gt;<p> ?、?雙積分型的 A/D 轉(zhuǎn)換器</p><p>  雙積分式也稱二重積分式,其實質(zhì)是測量和比較兩個積分的時間,一個是對模擬輸入電壓積分的時間T0,此時間往往是固定的;另一個是以充電后的電壓為初值,對參考電源Vref反向積分,積分電容被放電至零所需的時間T1。模擬輸入電壓Vi 與參考電壓VRef 之比,等于上述兩個時間之比。由于VRef 、T0 固定,而放電時間T1 可以測出,因而可

39、計算出模擬輸入電壓的大小(VRef 與Vi 符號相反)。由于T0、VRef 為已知的固定常數(shù),因此反向積分時間T1 與輸入模擬電壓Vi 在T0 時間內(nèi)的平均值成正比。輸入電壓Vi 愈高,VA 愈大,T1 就愈長。在T1 開始時刻,控制邏輯同時打開計數(shù)器的控制門開始計數(shù),直到積分器恢復(fù)到零電平時,計數(shù)停止。則計數(shù)器所計出的數(shù)字即正比于輸入電壓Vi 在T0 時間內(nèi)的平均值,于是完成了一次A/D 轉(zhuǎn)換。由于雙積分型A/D 轉(zhuǎn)換是測量輸入電壓V

40、i 在T0 時間內(nèi)的平均值,所以對常態(tài)干擾(串摸干擾)有很強(qiáng)的抑制作用,尤其對正負(fù)波形對稱的干擾信號,抑制效果更好。雙積分型的A/D 轉(zhuǎn)換器電路簡單,抗干擾能力強(qiáng),精度高,這是突出的優(yōu)點。但轉(zhuǎn)換速度比較慢,常用的A/D 轉(zhuǎn)換芯片</p><p> ?、谥鸫伪平偷?A/D 轉(zhuǎn)換器</p><p>  逐次逼近型(也稱逐位比較式)的 A/D 轉(zhuǎn)換器, 主要由逐次逼近寄存器SAR、D/A 轉(zhuǎn)換

41、器、比較器以及時序和控制邏輯等部分組成。它的實質(zhì)是逐次把設(shè)定的SAR 寄存器中的數(shù)字量經(jīng)D/A 轉(zhuǎn)換后得到電壓Vc 與待轉(zhuǎn)換模擬電壓V。進(jìn)行比較。比較時,先從SAR 的最高位開始,逐次確定各位的數(shù)碼應(yīng)是“1”還是“0”,其工作過程如下:轉(zhuǎn)換前,先將SAR 寄存器各位清零。轉(zhuǎn)換開始時,控制邏輯電路先設(shè)定SAR 寄存器的最高位為“1”,其余位為“0”,此試探值經(jīng)D/A 轉(zhuǎn)換成電壓Vc,然后將Vc 與模擬輸入電壓Vx 比較。如果Vx≥Vc,說

42、明SAR 最高位的“1”應(yīng)予保留;如果Vx<Vc,說明SAR 該位應(yīng)予清零。然后再對SAR 寄存器的次高位置“1”,依上述方法進(jìn)行D/A 轉(zhuǎn)換和比較。如此重復(fù)上述過程,直至確定SAR 寄存器的最低位為止。過程結(jié)束后,狀態(tài)線改變狀態(tài),表明已完成一次轉(zhuǎn)換。最后,逐次逼近寄存器SAR 中的內(nèi)容就是與輸入模擬量V 相對應(yīng)的二進(jìn)制數(shù)字量。顯然A/D轉(zhuǎn)換器的位數(shù)N 決定于SAR 的位數(shù)和D/A 的位數(shù)。圖2.4.1(b)表示四位A/D 轉(zhuǎn)換器

43、的逐次逼近過程。轉(zhuǎn)換結(jié)果能否準(zhǔn)確逼近</p><p>  本文所用為逐次逼近型的A/D轉(zhuǎn)換器。</p><p>  2.4.2 A/D轉(zhuǎn)換器在擴(kuò)展板的連接</p><p>  A/D 轉(zhuǎn)換器在擴(kuò)展板的接法如圖2-8所示,前三路通過電位器接到3.3v 電源上。</p><p>  圖2-6 ADC電阻分壓</p><p>

44、;  第三章 嵌入式linux移植及驅(qū)動開發(fā)</p><p>  3.1 linux主要特征</p><p> ?、俜螾OSIX 1003.1標(biāo)準(zhǔn)</p><p>  POSIX 1003.1標(biāo)準(zhǔn)定義了一個最小的Unix操作系統(tǒng)接口,任何操作系統(tǒng)只有符合這一標(biāo)準(zhǔn),才有可能運 行Unix程序??紤]到Unix具有豐富的應(yīng)用程序,當(dāng)今絕大多數(shù)操作系統(tǒng)都把滿足POSIX

45、1003.1標(biāo)準(zhǔn)作為實現(xiàn) 目標(biāo),Linux也不例外,它完全支持POSIX 1003.1標(biāo)準(zhǔn)。另外,為了使Unix System V和BSD上的程序能直接在 Linux上運行, Linux還增加了部分System V和BSD的系統(tǒng)接口,使Linux成為一個完善的Unix程序開發(fā)系統(tǒng)。</p><p>  ②支持多用戶訪問和多任務(wù)編程</p><p>  Linux是一個多用戶操作系統(tǒng),它允許

46、多個用戶同時訪問系統(tǒng)而不會造成用戶之間的相互干擾。另外, Linux還支持真正的多用戶編程,一個用戶可以創(chuàng)建多個進(jìn)程,并使各個進(jìn)程協(xié)同工作來完成用戶的需求. </p><p> ?、鄄捎庙撌酱鎯芾?</p><p>  頁式存儲管理使Linux能更有效地利用物理存儲空間,頁面的換入換出為用戶提供了更大的存儲空間。 </p><p><b>  ④支持動態(tài)

47、鏈接</b></p><p>  用戶程序的執(zhí)行往往離不開標(biāo)準(zhǔn)庫的支持,一般的系統(tǒng)往往采用靜態(tài)鏈接方式--即在裝配階段就已將 用戶程序和標(biāo)準(zhǔn)庫鏈接好,這樣,當(dāng)多個進(jìn)程運行時,可能會出現(xiàn)庫代碼在內(nèi)存中有多個副本而浪費存儲 空間的情況。Linux 支持動態(tài)鏈接方式,當(dāng)運行時才進(jìn)行庫鏈接,如果所需要的庫已被其它進(jìn)程裝入內(nèi)存, 則不必再裝入,否則才從硬盤中將庫調(diào)入。這樣能保證內(nèi)存中的庫程序代碼是唯一的。<

48、;/p><p> ?、葜С侄喾N文件系統(tǒng) </p><p>  Linux能支持多種文件系統(tǒng)。目前支持的文件系統(tǒng)有:EXT2、EXT、XIAFS、ISOFS、HPFS、MSDOS、UMSDOS、 PROC、NFS、SYSV、MINIX、SMB、UFS、NCP、VFAT、AFFS。Linux最常用的文件系統(tǒng)是EXT2,它的文件名長度可 達(dá)255字符,并且還有許多特有的功能,使它比常規(guī)的Unix文件

49、系統(tǒng)更加安全。</p><p>  ⑥支持TCP/IP、SLIP和PPP</p><p>  在Linux中,用戶可以使用所有的網(wǎng)絡(luò)服務(wù),如網(wǎng)絡(luò)文件系統(tǒng)、遠(yuǎn)程登錄等。SLIP和PPP能支持串行線上的 TCP/IP協(xié)議的使用,這意味著用戶可用一個高速Modem通過電話線連入Internet網(wǎng)中。[10] </p><p>  3.2 驅(qū)動程序開發(fā)</p>

50、<p>  3.2.1 嵌入式linux驅(qū)動程序開發(fā)方法</p><p>  Linux 中的驅(qū)動設(shè)計是嵌入式Linux 開發(fā)中十分重要的部分,它要求開發(fā)者不僅要熟悉Linux 的內(nèi)核機(jī)制、驅(qū)動程序與用戶級應(yīng)用程序的接口關(guān)系、考慮系統(tǒng)中對設(shè)備的并發(fā)操作等等,而且還要非常熟悉所開發(fā)硬件的工作原理。這對驅(qū)動開發(fā)者提出了比較高的要求,這個實驗主要是給大家進(jìn)入驅(qū)動設(shè)計提供一個簡單入門的一個實例,并不需要提供

51、太多與硬件相關(guān)的內(nèi)容,這部分應(yīng)該是通過仔細(xì)閱讀芯片廠家提供的資料來解決。驅(qū)動程序的作用是應(yīng)用程序與硬件之間的一個中間軟件層,驅(qū)動程序應(yīng)該為應(yīng)用程序展現(xiàn)硬件的所有功能,不應(yīng)該強(qiáng)加其他的約束,對于硬件使用的權(quán)限和限制應(yīng)該由應(yīng)用程序?qū)涌刂?。但是有時驅(qū)動程序的設(shè)計是跟所開發(fā)的項目相關(guān)的,這時就可能在驅(qū)動層加入一些與應(yīng)用相關(guān)的設(shè)計考慮,主要是因為在驅(qū)動層的效率比應(yīng)用層高,同時為了項目的需要可能只強(qiáng)化或優(yōu)化硬件的某個功能,而弱化或關(guān)閉其他一些功能;

52、到底需要展現(xiàn)硬件的哪些功能全都由開發(fā)者根據(jù)需要而定。驅(qū)動程序有時會被多個進(jìn)程同時使用,這時我們要考慮如何處理并發(fā)的問題,就需要調(diào)用一些內(nèi)核的函數(shù)使用互斥量和鎖等機(jī)制。驅(qū)動程序主要需要考慮下面三個方面:提供盡量多的選項給用戶,提高驅(qū)動程序</p><p>  3.2.2 ADC在ARM中的驅(qū)動開發(fā)</p><p><b>  一、開發(fā)環(huán)境</b></p>

53、<p>  主  機(jī):redhat/linux2.4.2</p><p>  開發(fā)板:北京博創(chuàng)興業(yè)科技有限公司開發(fā)的UP-NetARM2410-S 實驗儀器</p><p>  編譯器:arm-linux-gcc-4.3.2</p><p><b>  二、硬件原理分析</b></p><p>  

54、圖3-1所示S3C2410內(nèi)部ADC結(jié)構(gòu)</p><p>  圖3-1 S3C2410內(nèi)部ADC結(jié)構(gòu)</p><p>  我們從上面的結(jié)構(gòu)圖和數(shù)據(jù)手冊可以知道,該ADC模塊總共有8個通道可以進(jìn)行模擬信號的輸入,分別是AIN0、AIN1、AIN2、AIN3、 YM、YP、XM、XP。那么ADC是怎么實現(xiàn)模擬信號到數(shù)字信號的轉(zhuǎn)換呢?首先模擬信號從任一通道輸入,然后設(shè)定寄存器中預(yù)分頻器的值來確定

55、AD轉(zhuǎn)換器 頻率,最后ADC將模擬信號轉(zhuǎn)換為數(shù)字信號保存到ADC數(shù)據(jù)寄存器0中(ADCDAT0),然后ADCDAT0中的數(shù)據(jù)可以通過中斷或查詢的方式來訪問。 對于ADC的各寄存器的操作和注意事項請參閱數(shù)據(jù)手冊。</p><p>  S3C2410的ADC及觸摸屏控制寄存器以下有5種:</p><p> ?。?)ADC控制寄存器:ADCCON。該寄存器各參數(shù)描述見表3-1。</p>

56、;<p>  表3-1 ADC控制寄存器</p><p>  (2)ADC觸摸屏控制寄存器:ADCTSC。該寄存器主要是通過觸摸屏的各個控制引腳來決定觸摸屏轉(zhuǎn)換狀態(tài),使其進(jìn)行坐標(biāo)軸轉(zhuǎn)換,或者進(jìn)入中斷狀態(tài),等待觸摸屏終端。各參數(shù)描述見表3-2。</p><p>  表3-3 ADC觸摸屏控制寄存器</p><p> ?。?)ADC延時寄存器:ADCDLY

57、。該寄存器是只讀的,其中控制位都是標(biāo)志位和結(jié)果位。各參數(shù)描述見表3-3。</p><p>  表3-3 ADC延時寄存器</p><p> ?。?)ADC數(shù)據(jù)寄存器0:ADCDATA0。該寄存器是只讀的,其中控制位都是標(biāo)志位和結(jié)果位。該寄存器各參數(shù)描述見表3-4。</p><p>  表3-4 ADC數(shù)據(jù)寄存器0</p><p>  (5)A

58、DC數(shù)據(jù)寄存器1:ADCDATA1。該寄存器是只讀的,其中控制位都是標(biāo)志位和結(jié)果位。該寄存器各參數(shù)描述見表3-5。</p><p>  表3-5 ADC數(shù)據(jù)寄存器1</p><p>  圖3-2 ADC接口電路圖</p><p>  上圖是UP-NetARM2410-S上的ADC應(yīng)用實例,開發(fā)板通過一個10K的電位器(可變電阻)來產(chǎn)生電壓模擬信號,然后通過第一個通道

59、(即:AIN0)將 模擬信號輸入ADC。[1,8]</p><p><b>  三、實現(xiàn)方法</b></p><p>  ADC設(shè)備在Linux中可以看做是簡單的字符設(shè)備,也可以當(dāng)做是一混雜設(shè)備(misc設(shè)備),這里我們作為misc設(shè)備來實現(xiàn)ADC的驅(qū)動。注意:這里我們獲取AD轉(zhuǎn)換后的數(shù)據(jù)將采用中斷的方式,即當(dāng)AD轉(zhuǎn)換完成后產(chǎn)生AD中斷,在中斷服務(wù)程序中來讀取ADCD

60、AT0的第0-9位的值(即AD 轉(zhuǎn)換后的值)。</p><p>  1、建立驅(qū)動程序文件s3c2410-adc.c,實現(xiàn)驅(qū)動的打開、讀、寫和退出</p><p>  static int s3c2410_adc_open(struct inode *inode, struct file *filp)</p><p><b>  //adc打開句柄</

61、b></p><p><b>  {</b></p><p>  init_MUTEX(&adcdev.lock);</p><p>  init_waitqueue_head(&(adcdev.wait));</p><p>  adcdev.channel=0;</p><p

62、>  adcdev.prescale=0xff;</p><p>  MOD_INC_USE_COUNT;</p><p>  DPRINTK( "adc opened\n");</p><p><b>  return 0;</b></p><p><b>  }</b>

63、</p><p>  static ssize_t s3c2410_adc_write(struct file *file, const char *buffer, size_t count, loff_t * ppos)</p><p><b>  {</b></p><p>  int data;   

64、0;             //用來保存應(yīng)用程序傳來的數(shù)</p><p><b>  據(jù)</b></p><p>  if(count!=sizeof(data)){</p><p>  printk("the s

65、ize of input data must be %d\n", sizeof(data));     //應(yīng)用程序傳來的數(shù)據(jù)和data長度不同,報錯</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  sta

66、tic ssize_t s3c2410_adc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)</p><p><b>  {</b></p><p>  int ret = 0;</p><p>  if (down_interruptible(&ad

67、cdev.lock))    //先獲得互斥鎖</p><p>  return -ERESTARTSYS;</p><p>  START_ADC_AIN(adcdev.channel, adcdev.prescale);   //開始轉(zhuǎn)換</p><p>  #ifdef USE_IRQ_WAITQUEUE<

68、;/p><p>  interruptible_sleep_on(&adcdev.wait);            //休眠進(jìn)程,讓CPU做其他的事情</p><p><b>  #endif</b></p><p>  prin

69、tk("in read channel=%d\n",adcdev.channel);</p><p>  printk("ADCDAT0=%x\n",ADCDAT0);</p><p>  while(!(ADCCON & 0x8000))        

70、0;               //查看AD是否轉(zhuǎn)換完成</p><p>  udelay(100);</p><p>  ret = ADCDAT0;</p><p>  ret &= 0x3ff; 

71、60;                                 //10位AD轉(zhuǎn)換,所以取低十位</p&g

72、t;<p>  copy_to_user(buffer, (char *)&ret, sizeof(ret));   //把得到的值傳回應(yīng)用程序</p><p>  up(&adcdev.lock);              

73、;                    //釋放信號量</p><p>  return sizeof(ret);</p><p><b>  }</b></p>

74、<p>  static int s3c2410_adc_release(struct inode *inode, struct file *filp) //關(guān)閉</p><p><b>  adc {</b></p><p>  MOD_DEC_USE_COUNT;</p><p>  DPRINTK( "adc clos

75、ed\n");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  由于編譯開發(fā)板內(nèi)核時直接把a(bǔ)d驅(qū)動加入到內(nèi)核里面,對用戶的只是下面的一個文件結(jié)構(gòu)。在用戶程序里只需要用到open、read、write、release等內(nèi)核函數(shù)即可。</p&g

76、t;<p>  static struct file_operations s3c2410_fops = {</p><p>  owner: THIS_MODULE,</p><p>  open: s3c2410_adc_open,</p><p>  read: s3c2410_adc_read,</p><p>  wr

77、ite:s3c2410_adc_write,</p><p>  release: s3c2410_adc_release,</p><p><b>  };</b></p><p>  2、編寫用戶應(yīng)用程序測試my2410_adc驅(qū)動。建立應(yīng)用程序adc_test.c</p><p>  #include "

78、s3c2410-adc.h"</p><p>  #define ADC_DEV "/dev/adc/0raw"</p><p>  static int adc_fd = -1;</p><p>  static int init_ADdevice(void) //初始化設(shè)備</p><p><b>

79、;  {</b></p><p>  if((adc_fd=open(ADC_DEV, O_RDWR))<0){</p><p>  printf("Error opening %s adc device\n", ADC_DEV);</p><p>  return -1;</p><p><b&g

80、t;  }</b></p><p><b>  }</b></p><p>  static int GetADresult(int channel) //獲取AD值</p><p><b>  {</b></p><p>  int PRESCALE=0XFF;</p>

81、<p>  int data=ADC_WRITE(channel, PRESCALE);</p><p>  write(adc_fd, &data, sizeof(data));</p><p>  read(adc_fd, &data, sizeof(data));</p><p>  return data;</p>

82、<p><b>  }</b></p><p>  int main(void)</p><p><b>  {</b></p><p><b>  int i;</b></p><p><b>  float d;</b></p>

83、<p>  pthread_t th_com;</p><p>  void * retval;</p><p>  //set s3c44b0 AD register and start AD</p><p>  if(init_ADdevice()<0)</p><p>  return -1;</p>

84、<p>  /* Create the threads 創(chuàng)建線程 */</p><p>  pthread_create(&th_com, NULL, comMonitor, 0);</p><p>  printf("\nPress Enter key exit!\n");</p><p>  while( stop==0 )

85、</p><p><b>  {</b></p><p>  for(i=0; i<=2; i++){//采樣0~2 路A/D 值</p><p>  d=((float)GetADresult(i)*3.3)/1024.0;</p><p>  printf("a%d=%8.4f\t",i,d

86、);</p><p><b>  }</b></p><p>  usleep(1);</p><p>  printf("\r");</p><p><b>  }</b></p><p><b>  }</b></p>

87、<p>  GetADresult函數(shù)的具體過程如下:假如我們的比列因子是0XFF,通道是1路,即0XO1,那么經(jīng)過int data=ADC_WRITE(channel, PRESCALE);后我們可以得到數(shù)據(jù)為0X0100FF,而通過下一條語句write(adc_fd, &data, sizeof(data))后,實際調(diào)用的是驅(qū)動程序中的s3c2410_adc_write函數(shù),在這個函數(shù)中 ch=ADC_WR

88、ITE_GETCH(data),又將通道0X01獲取出來。這是因為我們經(jīng)常在采樣的時候需要知道是哪個通道的數(shù)據(jù),比列因子是AD頻率轉(zhuǎn)換的一個因素,所以我們在讀取數(shù)據(jù)時,要保持這兩個部分的值是不變的,而真正換取10位二進(jìn)制的數(shù)據(jù)則是在read函數(shù)中,通過讀取寄存器的值,再取出需要的那10位。</p><p>  3、將驅(qū)動程序下載掛載到內(nèi)核,下載應(yīng)用程序到開發(fā)板上后,運行應(yīng)用程序,扭動s3c2410開發(fā)板上的定位器

89、,可以觀察到ADC轉(zhuǎn)換值的變化,證明驅(qū)動程序工作正常。效果圖如下:</p><p>  圖3-3 ADC驅(qū)動測試截圖</p><p>  3.2.3 觸摸屏在ARM中的驅(qū)動開發(fā)</p><p>  SPI接口是Motorola推出的一種同步串行接口,采用全雙工、四線通信系統(tǒng),S3C2410X是三星推出的自帶觸摸屏接口的ARM920T內(nèi)核芯片,ADS7848為Bur

90、r-Brown生產(chǎn)的一款性能優(yōu)異的觸摸屏控制器。本文采用SPI接口的觸摸屏控制器ADS7848外接四線電阻式觸摸屏,這種方式最顯著的特點是響應(yīng)速度更快、靈敏度更高,微處理器與觸摸屏控制器間的通訊時間大大減少,提高了微處理器的效率。ADS7848與S3C2410的硬件連接如圖3-4所示,鑒于ADS7848差分工作模式的優(yōu)點,在硬件電路中將其配置為差分模式。[4]</p><p><b>  圖3-4 連接

91、圖</b></p><p>  Linux操作系統(tǒng)通過系統(tǒng)調(diào)用和硬件中斷完成從用戶空間到內(nèi)核空間的控制轉(zhuǎn)移。設(shè)備驅(qū)動模塊的功能就是擴(kuò)展內(nèi)核的功能,主要完成兩部分任務(wù):一個是系統(tǒng)調(diào)用,另一個是處理中斷。圖3-5是一個設(shè)備驅(qū)動模塊動態(tài)掛接、卸載和系統(tǒng)調(diào)用的全過程。系統(tǒng)調(diào)用部分則是對設(shè)備的操作過程,比如open,read,write,ioctl等操作,設(shè)備驅(qū)動程序所提供的這組入口點由幾個結(jié)構(gòu)向系統(tǒng)進(jìn)行說明,

92、分別是file_operations數(shù)據(jù)結(jié)構(gòu)、inode數(shù)據(jù)結(jié)構(gòu)和file 數(shù)據(jù)結(jié)構(gòu)。內(nèi)核內(nèi)部通過file結(jié)構(gòu)識別設(shè)備,通過file_operations數(shù)據(jù)結(jié)構(gòu)提供文件系統(tǒng)的入口點函數(shù),也就是訪問設(shè)備驅(qū)動的函數(shù),結(jié)構(gòu)中的每一個成員都對應(yīng)著一個系統(tǒng)調(diào)用。在嵌入式系統(tǒng)的開發(fā)中,我們一般僅僅實現(xiàn)其中幾個接口函數(shù):read、write、open、ioctl及release就可以完成應(yīng)用系統(tǒng)需要的功能。寫驅(qū)動程序的任務(wù)之一就是完成file_op

93、erations中的函數(shù)指針。[9]</p><p>  圖3-5 設(shè)備驅(qū)動在內(nèi)核中的掛接、卸載和系統(tǒng)調(diào)用過程</p><p>  在驅(qū)動程序中有三個重要的數(shù)據(jù)結(jié)構(gòu):用于表示筆觸點數(shù)據(jù)信息的結(jié)構(gòu)TS_RET,表示ADS7843中有關(guān)觸摸屏控制器信息的結(jié)構(gòu)TS_DEV,以及驅(qū)動程序與應(yīng)用程序的接口file_operations結(jié)構(gòu)的s3c2410_fops:</p><p

94、>  typedef struct {</p><p>  unsigned short pressure;</p><p>  unsigned short x;</p><p>  unsigned short y;</p><p>  unsigned short pad;</p><p><b>

95、;  } TS_RET;</b></p><p>  typedef struct {</p><p>  unsigned int PenStatus;</p><p>  TS_RET buf[MAX_TS_BUF];</p><p>  unsigned int head, tail;</p><p>

96、;  wait_queue_head_t wq;</p><p>  spinlock_t lock;</p><p><b>  } TS_DEV;</b></p><p>  static struct file_operations s3c2410_fops = {</p><p>  owner: THIS_MO

97、DULE,</p><p>  open: s3c2410_ts_open,</p><p>  read: s3c2410_ts_read,   release: s3c2410_ts_release,</p><p>  poll: s3c2410_ts_poll,    };</p><p&

98、gt;  init_module函數(shù)是模塊的入口函數(shù)。在函數(shù)內(nèi)部通過s3c2410_ts_init( )實現(xiàn)模塊的初始化工作。在本設(shè)計中設(shè)備與系統(tǒng)之間以中斷方式進(jìn)行數(shù)據(jù)交換。</p><p>  在s3c2410_ts_init()中的另一個重要任務(wù)是執(zhí)行接口函數(shù)s3c2410_ts_open(),在這個函數(shù)中初始化緩沖區(qū)的頭尾指針、觸摸屏狀態(tài)變量及觸摸屏事件等待隊列。</p><p> 

99、 module_exit()</p><p>  該函數(shù)調(diào)用s3c2410_ts_exit(),主要任務(wù)是撤銷驅(qū)動程序向內(nèi)核的登記以及釋放申請的中斷資源。</p><p>  接口函數(shù)s3c2410_ts_read( )</p><p>  這個函數(shù)實現(xiàn)的任務(wù)是將事件隊列從設(shè)備緩存中讀到用戶空間的數(shù)據(jù)緩存中。實現(xiàn)的過程主要是通過一個循環(huán),只有在事件隊列的頭、尾指針不

100、重合時,才能成功的從tsdev.tail指向的隊列尾部讀取到一組觸摸信息數(shù)據(jù),并退出循環(huán)。否則調(diào)用讀取函數(shù)的進(jìn)程就要進(jìn)入睡眠。</p><p>  坐標(biāo)讀取函數(shù)s3c2410_get_XY()</p><p>  在定時器中斷處理程序中,當(dāng)查詢到與相連的EINT5/GPF5為低電平時,即表示有有效事件,應(yīng)該調(diào)用s3c2410_get_XY()函數(shù)采集筆觸信息。</p><

101、;p>  ADS7843有多種轉(zhuǎn)換時序,時序規(guī)定了芯片與設(shè)備及CPU間是如何配合工作的。設(shè)計中采用16個時鐘周期啟動一次轉(zhuǎn)換的坐標(biāo)轉(zhuǎn)換方式。坐標(biāo)的讀取是通過多次采集取平均值的方法,以X坐標(biāo)的讀取為例。循環(huán)過程中的每一步都在8個時鐘周期內(nèi)完成,數(shù)據(jù)的處理嚴(yán)格按照時序進(jìn)行,Y坐標(biāo)的采集與X坐標(biāo)類似。</p><p>  第四章 信號監(jiān)測應(yīng)用軟件設(shè)計</p><p>  4.1 Qt 主要

102、特性</p><p>  隨著嵌入式L i n u x 應(yīng)用的不斷發(fā)展,嵌入式處理器運算能力的不斷增強(qiáng),越來越多的嵌入式設(shè)備開始采用較為復(fù)雜的G U I 系統(tǒng),手持設(shè)備中的G U I 系統(tǒng)發(fā)展得非常迅速。傳統(tǒng)的GUI 系統(tǒng),如Microwindows 等,由于項目規(guī)模較小、功能較為薄弱,缺乏第三方軟件開發(fā)的支持等諸多原因,在比較高級的手持或移動終端設(shè)備(如PDA、Smart-Phone、車載導(dǎo)航系統(tǒng))中應(yīng)用較少。

103、Qt/Embedded 是著名的Qt 庫開發(fā)商Trolltech 公司開發(fā)的面向嵌入式系統(tǒng)的Qt 版本,開發(fā)人員多為K D E 項目的核心開發(fā)人員。許多基于Qt的XWindow 程序可以非常方便地移植到Qt/Embedded上,與X11 版本的Qt 在最大程度上接口兼容, 延續(xù)了在X 上的強(qiáng)大功能,在底層徹底摒棄了Xlib,僅采用framebuffer作為底層圖形接口。Qt/Embedded 類庫完全采用C++ 封裝。豐富的控件資源和較

104、好的可移植性是Qt/Embedded 最為優(yōu)秀的一方面,使用X 下的開發(fā)工具Qt Designer 可以直接開發(fā)基于Qt/Embedded 的UI(用戶操作接口)界面。越</p><p>  圖4-1 Qt/Embedded的實現(xiàn)結(jié)構(gòu)</p><p>  4.2 Qt 類庫及其機(jī)制簡介</p><p>  Qt 類庫是一個跨平臺的面向?qū)ο蟮腃++類庫, 目前主要用于

105、Linux下的開發(fā)。普通的UI編程是極其底層和繁瑣的,而Qt高度面向?qū)ο蠛湍K化的特征將我們從這種繁瑣中解脫了出來。Qt還提供了免費的版本, 這對于非商業(yè)的科學(xué)項目如我們目前正在設(shè)計的《基于ARM和Qt的多路信號監(jiān)測系統(tǒng)》特別適合,同時Qt還是跨平臺的, 這對于要求移植性很強(qiáng)的項目也是很好的選擇。</p><p>  4.2.1 Qt類庫</p><p>  Qt類庫大致可以分為三個部分:

106、 控件, 框架和工具。</p><p><b> ?、倏丶?lt;/b></p><p>  控件部分包括環(huán)境控件, 主窗口控件, 標(biāo)準(zhǔn)對話框, 基本的GUI控件, 擴(kuò)展GUI控件,GUI組織控件,以及幫助系統(tǒng)控件。主窗口類為應(yīng)用程序提供界面框架, 可以在上面添加菜單、工具條等, 為應(yīng)用程序提供集裝箱的功能,標(biāo)準(zhǔn)對話框類是打開/關(guān)閉文件, 選擇顏色等預(yù)先設(shè)計的標(biāo)準(zhǔn)對話框,基

107、本控件包括所有的GUI控件,如按鈕組合框等,擴(kuò)展的控件包括樹狀視圖、進(jìn)度條等, 如QlistView GUI組織類負(fù)責(zé)對各種控件進(jìn)行組織以構(gòu)成復(fù)雜的對話框, 如Q GroupBox幫助系統(tǒng)是為應(yīng)用程序提供在線幫助的類, 如QStstusBar,QToolTip。</p><p><b> ?、诳蚣?lt;/b></p><p>  框架部分包括的是一些抽象的類, 通常不可見

108、, 如對象模型、抽象控件、繪圖、拖放、控件、外觀。對象模型是框架的基礎(chǔ), 如QObject可見的控件一般從抽象控件派生, 如QButton繪圖類控制繪圖, 如QBrush拖放類控制拖放操作,如QDragObject控件外觀類控制控件的外觀如顏色、字體等。例如QColor。Qt的應(yīng)用程序框架(framework),Qt的應(yīng)用程序框架是自頂向下的, 首先是在main函數(shù)中產(chǎn)生一個Qapplication 類的實例a和一個主窗口類w,主窗口可

109、以是任何QWidget 類的派生類, 這里用的是QMainWidget類, 調(diào)用該類的方法來設(shè)置主窗口的位置和大小, 調(diào)用a 的方法來把窗口w設(shè)置成主窗口并顯示, 剩下的工作就是按照項目對面板的要求來編輯主窗口類w了。下面是一個最簡單的程序框架:</p><p>  int main(int argc,char **argv)</p><p><b>  {</b>&

110、lt;/p><p>  QApplication a(argc,argv);//Qapplication實例化</p><p>  myMainWindow w;</p><p>  a.setMainWidget(&w);</p><p>  w.show();//窗口開顯示</p><p>  a.exec()

111、;//告訴程序退出,伴隨返回代碼</p><p><b>  }</b></p><p><b>  ③工具</b></p><p>  工具部分包括時間日期和鏈表樹等數(shù)據(jù)結(jié)構(gòu), 它們和GUI無關(guān)。普通工具包括鏈表、堆棧、隊列、樹等常見數(shù)據(jù)結(jié)構(gòu), 如QArray。圖形處理工具控制圖像的編碼/解碼算法。如Qimage等,IO

112、控制工具具體處理IO的一些類, 如QFile。時間和日期工具類處理時間和日期, 如Qdate,QTime。另外還有其他雜類如Qsignal,QIconSet等。</p><p>  4.2.2 Qt 對象間通訊機(jī)制</p><p>  對象間通訊是面向?qū)ο蟪绦蛟O(shè)計的一個極其重要的內(nèi)容, 類似于Microsoft MFC 的消息映射(MessageMaping) 和事件循環(huán),Qt 的對象間通

113、訊采用的是signal/slot 機(jī)制, 信號就好像是事件,而slot則是響應(yīng)事件的方法, 如果需要實現(xiàn)對象間的通訊, 只需要把一個對象的slot和另外一個對象的信號“連接起來”就可以實現(xiàn)“事件驅(qū)動”。在Qt中信號是一個全新的東西, 它既不屬于成員函數(shù)也不是變量, 用戶可以自定信號, 下面是自定義信號的例子:</p><p><b>  signals:</b></p><

114、;p>  void created () ;</p><p>  自定義的signal 可以在需要的時候發(fā)送,要發(fā)送上面的signal, 可以用下面的語句:</p><p>  emit created () ;</p><p>  Linux下開發(fā)Qt應(yīng)用程序比較好的IDE是KDevelop。KDevelop是X系統(tǒng)中的一個快速開發(fā)工具。它集成了很多其他實用

115、工具, 如make 和GNU C+ + Compilers, 它還可以為工程的每個類自動生成HTML 格式的A P I 文檔,同時有著很好的項目管理、編輯環(huán)境和調(diào)試環(huán)境。[12]</p><p>  另外它還有一個所見即所得的對話框編輯器。</p><p>  4.3 信號監(jiān)測UI 設(shè)計</p><p>  圖4-2 Qt/Embedded的實現(xiàn)UI結(jié)構(gòu)設(shè)計<

116、;/p><p>  在QT下進(jìn)行界面設(shè)計,可以使用水平、垂直和Grid布局管理器來進(jìn)行。水平布局管理器可以把它所管理的部件以水平的順序依次排開, Grid布局管理器可以以網(wǎng)格的形式,將它所管理的部件以一定的矩陣形式排列。比如上圖中,所有的部件一起看,其實就是一種矩陣的形式來排列的。 在QT下做界面設(shè)計的時候,其實無非就是利用上面三種布局管理器來將部件進(jìn)行分類和排列。</p><p>

117、  第一部分為二個PushButton。</p><p>  第二部分是三個水平排列的LCDNumber,progressbar可以使用水平布局管理器將其放到一起;</p><p>  4.4信號監(jiān)測UI和驅(qū)動連接</p><p>  由于編譯內(nèi)核時直接把ADC驅(qū)動加入到內(nèi)核里面,對我們來說需要了解的只是下面的一個文件結(jié)構(gòu)。在用戶程序里只需要用到open、read、

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論