版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于ARM的GPRS通信系統(tǒng)的設(shè)計 作者: 日期:2 個人收集整理 勿做商業(yè)用途基于ARM的GPRS通信系統(tǒng)的設(shè)計1 引言1.1 選題背景隨著新的ARM芯片不斷問世以及這些芯片的價格下降,嵌入式產(chǎn)品開始潛移默化的取代早期的一些單片機(jī),并在社會各行各業(yè)中占有越來越重要的位置,嵌入式產(chǎn)品也由此成為眾多工程師選擇開發(fā)高端產(chǎn)品的芯片首選。與此同時,中國移動于2002年5月正式開通GPRS網(wǎng)絡(luò)(25G移動通信技術(shù)),由于GPRS網(wǎng)絡(luò)支持TCPIP協(xié)議,這使得無線數(shù)據(jù)傳輸變得更加輕松,而且相對價格比SMS(短消息)等要便宜許多。因此,綜合嵌入式LINUX技術(shù)和GPRS網(wǎng)絡(luò)來實現(xiàn)無線數(shù)據(jù)采集與傳輸具有非常誘
2、人的前景,必將受到越來越多的重視.中國成為“世界制造中心”甚至“設(shè)計中心”的趨勢,必然導(dǎo)致對小型數(shù)字控制系統(tǒng)的需求越來越大。在嵌入式系統(tǒng)開發(fā)方面,最核心的就是微處理器芯片和嵌入式操作系統(tǒng)。其中ARM已經(jīng)給出了理想的一個答案,而在嵌入式操作系統(tǒng)方面,從上世紀(jì)80年代開始,出現(xiàn)了各種各樣的商用嵌入式操作系統(tǒng)百家爭鳴的局面,比較著名的有WindRiver公司的VX Works、PSOS和Windows CE等等,這些操作系統(tǒng)大部分是為專有系統(tǒng)而開發(fā)的.嵌入式Linux是一款遵循GPL協(xié)議的免費使用和自由傳播的實時嵌入式操作系統(tǒng),它繼承了它的“父親”Linux的所有的優(yōu)點,并且擁有一大批的社區(qū)維護(hù)和愛
3、好者。它的源碼開放性允許任何人可以獲取并修改Linux的源代碼.這樣一方面大大的降低了開發(fā)的成本,另一個方面又可以提高開發(fā)產(chǎn)品的效率。嵌入式Linux支持X86,Power PC,ARM,XSCALE1等多種體系結(jié)構(gòu),并且移植到多種硬件平臺。這對于經(jīng)費,時間受限制的研究和開發(fā)項目很有吸引力,并且Linux采取一個統(tǒng)一的框架對硬件管理,所以上層應(yīng)用程序可以方便的移植到不同的平臺上?;谝陨系脑颍覜Q定使用嵌入式Linux搭配高端的XSCALE270芯片來構(gòu)建這個項目。1。2 目的和意義GPRS通信系統(tǒng)設(shè)計的目的是使用基于億道XSBASE270的開發(fā)評估板(此評估板是基于XSCALE體系結(jié)構(gòu)),
4、利用實時多任務(wù)嵌入式操作系統(tǒng)Linux和圖形開發(fā)環(huán)境QTE,實現(xiàn)GPRS/GSM的短信與電話的功能.程序做出后放入Linux社區(qū),實現(xiàn)源代碼共享,推動嵌入式Linux的發(fā)展.1。3 技術(shù)要求,設(shè)計范圍與主要問題GPRS通信系統(tǒng)設(shè)計這個課題對于設(shè)計者的要求比較高,它要求:必須熟練C/C+語言。熟悉并擁有至少半年的Linux操作經(jīng)驗。熟悉操作系統(tǒng)的一些相關(guān)知識例如多線程2。熟悉圖形化界面的開發(fā).擁有快速學(xué)習(xí)的能力。這個設(shè)計囊括了對硬件的理解,對操作系統(tǒng)的理解以及對應(yīng)用層的操作。主要問題與解決方法:移植內(nèi)核的問題 參考了開發(fā)板供應(yīng)商提供的相關(guān)文檔。串口的操作 參考了指導(dǎo)老師給的資料和一些相關(guān)源代碼。
5、QTE的配置編譯 主要參考了網(wǎng)上的資料和指導(dǎo)老師的建議。AT指令 實習(xí)期間,請教了億道電子公司中有開發(fā)經(jīng)驗的工程師。1.4 國內(nèi)外發(fā)展現(xiàn)狀近年來,我國嵌入式系統(tǒng)應(yīng)用產(chǎn)品日益豐富,市場呈現(xiàn)快速增長趨勢,尤其在家電、電子、汽車、通信、交通、金融、網(wǎng)絡(luò)、監(jiān)控、工業(yè)自動化等領(lǐng)域應(yīng)用更加廣泛,發(fā)展嵌入式系統(tǒng)技術(shù)和產(chǎn)業(yè)已經(jīng)成為貫徹“信息化帶動工業(yè)化,工業(yè)化促進(jìn)信息化”的方針,使我國產(chǎn)品由“中國制造”向“中國創(chuàng)造"邁進(jìn)的突破口。但就目前的國際產(chǎn)業(yè)狀況而言,我國尚處于產(chǎn)業(yè)鏈的末端,傳統(tǒng)產(chǎn)業(yè)結(jié)構(gòu)面臨著全面的升級調(diào)整。加快產(chǎn)業(yè)結(jié)構(gòu)的升級與轉(zhuǎn)型,已成為國內(nèi)經(jīng)濟(jì)發(fā)展的首要問題。做為集成電路設(shè)計技術(shù)和軟件技術(shù)
6、的結(jié)合和延伸,嵌入式系統(tǒng)技術(shù)決定著電子產(chǎn)品的智能化水平及科技含量,而嵌入式系統(tǒng)技術(shù)在傳統(tǒng)產(chǎn)業(yè)中的廣泛應(yīng)用則可顯著地降低傳統(tǒng)產(chǎn)業(yè)的生產(chǎn)成本,提高運(yùn)營效率,以嵌入式軟件為核心的嵌入式系統(tǒng)將成為傳統(tǒng)產(chǎn)業(yè)升級改造的主要推動力。第37頁(共52頁)2 方案論證2.1 系統(tǒng)相關(guān)方案的選擇2。1.1 PC端系統(tǒng)的選擇PC端的軟件主要是系統(tǒng)的選擇,是選擇雙系統(tǒng)(LinuxWindows XP)還是選擇虛擬機(jī)安裝LINUX。前者的優(yōu)點是運(yùn)行速度快,缺點是切換系統(tǒng)的時候需要重新啟動。后者的優(yōu)點是可以任意切換系統(tǒng),缺點是對硬件要求較高.我建議使用512內(nèi)存,P4以上的PC使用后者.2.1。2 嵌入式操作系統(tǒng)的選擇純
7、商業(yè)性的嵌入式操作系統(tǒng)主要有WinCE和VxWorks,開源的嵌入式操作系統(tǒng)有嵌入式Linux,其他的還有rtLinux,uC/OSII等。由于條件的限制,只供WinCE和Linux可供選擇。Linux是目前最為流行的一款開放源代碼的操作系統(tǒng),從1991年問世到現(xiàn)在,不僅在PC平臺,還在嵌入式應(yīng)用中大放光彩,逐漸形成了與其他商業(yè)EOS抗衡的局面.目前正在開發(fā)的嵌入式系統(tǒng)中,70以上的項目選擇Linux作為嵌入式操作系統(tǒng)。經(jīng)過改造后的嵌入式Linux具有適合于嵌入式系統(tǒng)的特點。 內(nèi)核精簡,高性能、穩(wěn)定; 良好的多任務(wù)支持; 適用于不同的CPU體系架構(gòu):支持多種體系架構(gòu),如X86、ARM、MIPS
8、、ALPHA、SPARC等; 可伸縮的結(jié)構(gòu):可伸縮的結(jié)構(gòu)使Linux適合于從簡單到復(fù)雜的各種嵌入式應(yīng)用; 外設(shè)接口統(tǒng)一:以設(shè)備驅(qū)動程序的方式為應(yīng)用提供統(tǒng)一的外設(shè)接口; 開放源碼,軟件資源豐富:廣泛的軟件開發(fā)者的支持,價格低廉,結(jié)構(gòu)靈活,適用面廣; 完整的技術(shù)文檔,便于用戶的二次開發(fā)。而Windows CE 的最新版本W(wǎng)indows CE.NET的目的,是讓不同語言所寫的程序可以在不同的硬件上執(zhí)行,也就是所謂的。NET Compact Framework,在這個Framework下的應(yīng)用程序與硬件互相獨立無關(guān)。而核心本身是一個支持多線程以及多CPU的操作系統(tǒng)。在工作調(diào)度方面,為了提高系統(tǒng)的實時性
9、,主要設(shè)置了256級的工作優(yōu)先級以及可嵌入式中斷處理3。其提供的協(xié)議軟件非常完整,如基本的PPP、TCP/IP、IrDA、ARP、ICMP、Wireless Tunable TCP/IP、PPTP、SNMP、HTTP,等等幾乎應(yīng)有盡有,甚至還提供了有保密與驗證的加密通信,如PCT/SSL。相比易開發(fā)性,WinCE似乎更勝一籌,但基于中國的現(xiàn)在的國情,免費且開源的Linux擁有著WinCE永遠(yuǎn)無法超越的優(yōu)勢,預(yù)計未來使用免費開源代碼開發(fā)的產(chǎn)品遠(yuǎn)遠(yuǎn)大于使用商業(yè)操作系統(tǒng)。所以我選擇了嵌入式Linux來開發(fā)這次的項目。2。1.3 程序流程的選擇作為一個可收發(fā)的系統(tǒng),在處理收發(fā)信息之間的同步關(guān)系和數(shù)據(jù)交
10、互可以有兩種方案可供選擇,一種就是常用的多線程,第二種就是使用定時器,多線程流程圖如圖1所示。圖1 多線程結(jié)構(gòu)多線程的優(yōu)點是可以完整的讀出所有從串口發(fā)過來的數(shù)據(jù),因為多線程結(jié)構(gòu)有一個線程專門負(fù)責(zé)讀串口的,這樣保證了數(shù)據(jù)的完整性。多線程的缺點就是因為多線程的使用帶來了很多不確定因素4,簡單的數(shù)據(jù)傳輸就必須使用線程間通信的方式例如管道加信號來解決,也在另一種方面增加了它的技術(shù)難度。定時器的流程圖如圖2所示。圖2 定時器結(jié)構(gòu)定時器的優(yōu)點相對多線程來說就是容易控制,不會出現(xiàn)進(jìn)程通信之間產(chǎn)生的一些異常的不確定因素。定時器的運(yùn)行模式是每兩百毫秒讀一次串口看是否有數(shù)據(jù),如果有數(shù)據(jù)就處理,沒有數(shù)據(jù)就繼續(xù)等待下
11、一個兩百毫秒。定時器的缺點就是不能連續(xù)讀串口,每次讀串口之間都有200毫秒的延時,所以不能夠讀超過比串口通道緩沖區(qū)更大的數(shù)據(jù)。而硬件的緩沖區(qū)一般只有幾十字節(jié)到幾KB。但GPRS模塊接收的AT命令指令很短,所以對GPRS通信系統(tǒng)來說,定時器的缺點是不影響數(shù)據(jù)接收的。綜上所述,我采用的系統(tǒng)流程選擇為定時器流程。2。2 運(yùn)行環(huán)境和開發(fā)工具的構(gòu)建2.2。1 運(yùn)行環(huán)境(1)能夠流暢運(yùn)行WIN XP/Linux(雙系統(tǒng))的PC機(jī)作為主機(jī)端.只是要求主機(jī)端的OS 要求有XP和LINUX兩種類型的OS,便于調(diào)試和開發(fā)。WINXP系統(tǒng)是運(yùn)行虛擬機(jī)程序和查閱資料的.而在LINUX下是運(yùn)行ARM交叉編譯環(huán)境及開發(fā)Q
12、TE界面,與開發(fā)板通信以及程序的編寫的.(2)基于XSCALE270的評估板一個.用于燒寫B(tài)ootloader的JTAG線一條,交叉串口線、交叉網(wǎng)線、RS232串口線各一條.(3)一個型號為西門子MC39I 的GPRS模塊。2.2。2 開發(fā)工具(1)QT2。3。2為UI設(shè)計程序.(2)tmake-1.11用于生成makefile文件.(3)qt-2.3。7用于生成應(yīng)用程序所依賴的庫文件libqte。so.2。3.7.(4)qtopia用于虛擬開發(fā)板上的桌面系統(tǒng)。(5)arm-linux-toolchain。tar。gz為交叉工具鏈,使用它產(chǎn)生目標(biāo)機(jī)的可執(zhí)行程序.3 總體設(shè)計論述3。1 GPRS
13、通信系統(tǒng)設(shè)計過程的關(guān)鍵問題GPRS通信系統(tǒng)的設(shè)計首先必須要有基本的嵌入式操作系統(tǒng)才能實現(xiàn)GPRS通信,所以此系統(tǒng)的關(guān)鍵問題之一就是如何把嵌入式操作系統(tǒng)移植到XSBASE270開發(fā)板上,這就涉及到的具體的Bootloader移植5,文件系統(tǒng)的移植,內(nèi)核的移植,并使這個嵌入式Linux系統(tǒng)能夠正常運(yùn)行。其次是應(yīng)用程序的編寫,其中最主要的就是QT環(huán)境的編譯,因為編譯出來兩個程序,一個是在主機(jī)上調(diào)試的,另外一個是移植到開發(fā)板的,所以Qt2.3.7需要編譯兩次來滿足程序編寫的需求。最后是AT命令的編碼和解碼,本系統(tǒng)的短信是采用PDU模式來接收和發(fā)送信息的。3.2 系統(tǒng)總體框架根據(jù)以上需求經(jīng)過細(xì)化,整個系
14、統(tǒng)要完成以下模塊的設(shè)計,系統(tǒng)總體框架圖如圖3所示。XSBASE270實驗平臺,GPRS模塊經(jīng)過裁剪的嵌入式Linux系統(tǒng),libc庫QT圖形界面庫GPRS通信系統(tǒng),其中包括編碼和解碼,以及串口的傳輸以及短信電話的實現(xiàn)。硬件相關(guān)軟件相關(guān) 圖3 系統(tǒng)總體框架圖3。3 系統(tǒng)總體設(shè)計流程系統(tǒng)總體設(shè)計流程分為硬件部分和軟件部分,硬件部分做的就是為軟件部分搭建環(huán)境,包括移植Linux內(nèi)核6等等。軟件部分做的就是完成GPRS的發(fā)短信和撥打電話的功能,系統(tǒng)總體設(shè)計的流程如圖4所示.XSBASE270實驗平臺Bootloader的移植裁剪編譯Linux2.4.21,制作文件系統(tǒng)鏡像文件燒錄鏡像文件,并能成功在開
15、發(fā)板上運(yùn)行QT環(huán)境的配置和搭建GPRS模塊串口通信的實現(xiàn)應(yīng)用程序的UI設(shè)計與美化短信與撥打電話的實現(xiàn)界面與模塊之間的整合測試,調(diào)試,完成軟件系統(tǒng)相關(guān)設(shè)計硬件系統(tǒng)相關(guān)設(shè)計 安裝交叉編譯工具鏈圖4 系統(tǒng)總體設(shè)計流程圖4 過程論述4。1 硬件設(shè)計流程論述4.1。1 硬件設(shè)計XSBASE270是基于Intel高性能的PXA270處理器并支持嵌入式Linux/WinCE系統(tǒng)的針對教學(xué)/實驗的多功能嵌入式開發(fā)平臺。XSBASE270的處理器主頻率達(dá)到了520MHz,SDRAM為64MB,F(xiàn)LASH達(dá)到32MB,擁有尺寸為640480的TFT液晶屏,帶4線式觸摸屏,以及一個串口接口和擴(kuò)展總線7??傮w硬件如圖
16、5所示。PXA270芯片,520MHZ觸摸屏TFT液晶屏USB接口下載程序用。JTAG接口,燒錄Bootloader用以太網(wǎng)接口。下載文件系統(tǒng)和內(nèi)核用FLASH SDRAM電源RS232串口GPRS模塊SIM卡電源天線話筒與麥克風(fēng)圖5 總體硬件圖GPRS模塊采用的是德國西門子MC39i GSM/GPRS終端,它設(shè)計小巧、功耗很低。擁有RS232接口.配件有天線,串口線,電源。該設(shè)備支持短信收發(fā)、語音、傳真、GPRS上網(wǎng)、數(shù)據(jù)傳輸?shù)?GPRS模塊如圖6所示。圖6 GPRS模塊4。1.2 安裝交叉編譯工具鏈進(jìn)入Linux系統(tǒng),將光盤自帶的xscalev1.tar。gz拷貝到/opt目錄下,并解壓縮
17、:tar xvfz xscalev1.tar。gz修改配置文件使得每次登錄都可以使用它:vi /.bash_profile在該文件最后一行加入PATH=$PATH:/opt/xscalev1/bin然后重新登錄即可。4.1。3 Bootloader的移植Bootloader 的主要功能:1初始化硬件初始化CPU clock, Memory timing, interrupt, UART 和GPIO.2啟動Linux這是bootloader 最重要的功能。它將內(nèi)核映像復(fù)制到SDRAM 中并跳轉(zhuǎn)到內(nèi)核入口地址處。3下載Image下載內(nèi)核和文件鏡像到SDRAM 中。下載只能通過以太網(wǎng).Etherne
18、t tftp and bootp。4Flash 存儲器管理用write, erase, lock, and unlock 等命令管理Flash 存儲器。在億道提供的開發(fā)包中已經(jīng)擁有了完整的Bootloader鏡像和源文件,我使用的是自己編譯源文件得到的Bootloader.下面是我對Bootloader的編譯和燒錄步驟:1進(jìn)入光盤自帶的Jflash-XSBase270目錄,執(zhí)行make命令,生成Jfalshmm.該工具用于燒錄Bootloader。2將光盤中源文件移植到/work/Bootloader(沒有請創(chuàng)建)目錄下。然后執(zhí)行make指令生成bootloader的鏡像boot。3將/wor
19、k/Bootloader中剛生成的boot復(fù)制到Jflash-XSBase270中,連接好目標(biāo)板和主機(jī)之間的JTAG線,打開目標(biāo)板,在Jflash-XSBase270目錄中執(zhí)行下列命令:./jflashmm boot出現(xiàn)Verification successful!則說明燒錄成功,否則請檢查JTAG 電纜連接情況,然后,對目標(biāo)板重啟后再進(jìn)行嘗試。4.1.4 裁剪編譯Linux2.4。21 創(chuàng)建一個系統(tǒng)鏡像文件的過程需要使用光盤中的程序linux-2.4.21-51Board_EDR.tar.gz.在/work下面創(chuàng)建一個kernel目錄,然后將linux2。4.2151Board_EDR。t
20、ar。gz復(fù)制到該目錄下面并解壓縮。tar xvfz linux-2.4.2151Board_EDR。tar.gzcd linux-2.4。21-51Board_EDRmake menuconfig使用該命令來配置內(nèi)核8,根據(jù)需求不同而在里面選擇不同的模塊,例如進(jìn)入內(nèi)核配置的主界面,如圖7所示。圖7 內(nèi)核配置的主界面選擇第二級菜單System Type,如圖8所示。圖8 第二級菜單System Tpye進(jìn)入第三級菜單Intel PXA270/250/210 Implementations選項,并檢查XSBase270-EDR 平臺是否被選擇了,如圖9所示。圖9 第三級菜單Intel PXA27
21、0/250/210 Implementations配置完成之后執(zhí)行make生成zImage_e24qt.4。1.5 制作文件系統(tǒng)鏡像本系統(tǒng)采用的是JFFS2 文件系統(tǒng).JFFS2是一種日志結(jié)構(gòu)化的文件系統(tǒng),是專門為類似閃存芯片這樣的嵌入式設(shè)備創(chuàng)建的文件系統(tǒng)。使用腳本mkrootfs.sh 來創(chuàng)建JFFS2 文件系統(tǒng)如下命令:rm rf rootfs270.img # ./ mkrootfs。sh 最后生成一個名為rootfs270.img就是我們所需要的文件系統(tǒng)了。4。1。6 燒錄鏡像文件在Linux中打開minicom,設(shè)置波特率為115200,然后打開開發(fā)板的電源,minicom中會顯示:
22、Welcome to use 51Board Bootloader for XSBase270 boardCopyright (C) 20022006 51Board Co,。 Ltd。Support : http:/www.51BVersion : 01.00。03flash : base=0x00000000, size=0x02000000Eth port can access, the base address is 0x0c000300Eth chip is LAN91C111autoboot in progress, press any key to stop。Bo
23、ot delay 2 secondsautoboot aborted。= Operation Menu =0 ComanndLine mode1 View current configuration2 Bootp3 Download default Kernel (zImage_EDR_temp)4 Flash Kernel5 Download default Filesystem (rootfs270qt.img)6 Flash Filesystem7 Boot system8 Reboot system9 Reset to factory default configurationa Se
24、t default Kernel filename and Filesystem filenameb Set boot delay timec Help(to get a list of commands)=Please enter your selection:使用如下命令來下載內(nèi)核:1 設(shè)置需要下載的鏡像名:在菜單模式下,選擇“a" ,按提示輸入內(nèi)核鏡像和文件系統(tǒng)鏡像名,用戶必須保證在/tftpboot 目錄下存在同名的鏡像文件。2 下載內(nèi)核鏡像:在菜單模式下,選擇“3”,此時,內(nèi)核鏡像通過以太網(wǎng)下載到開發(fā)板的sdram 上;若傳輸超時或失敗,請重新執(zhí)行.3 燒寫到flash:在
25、菜單模式,選擇“4",將剛下載的內(nèi)核鏡像燒到flash上。假設(shè)文件系統(tǒng)的鏡像名為rootfs270.img,使用tftp 命令將其下載到目標(biāo)板:1設(shè)置需要下載的鏡像名:在菜單模式下,選擇“a" ,按提示輸入內(nèi)核鏡像和文件系統(tǒng)鏡像名,用戶必須保證在/tftpboot 目錄下存在同名的鏡像文件.若上一節(jié)已設(shè)置鏡像名,此步可略.2下載文件系統(tǒng)鏡像:在菜單模式下,選擇“5”,此時,文件系統(tǒng)鏡像通過以太網(wǎng)下載到開發(fā)板的sdram 上;若傳輸超時或失敗,請重新執(zhí)行.3燒寫到flash:在菜單模式,選擇“6”,將剛下載的文件系統(tǒng)鏡像燒到flash上.4。2 軟件設(shè)計流程論述4.2.1 Q
26、T環(huán)境的配置和搭建QT環(huán)境的配置和搭建由以下兩步組成:1從光盤的QT目錄下獲得以下文件9 tslib。tar。bz2 tmake-1。11。tar。gz qt-embedded2.3。7。tar.gz qtopia-free-1。7。0。tar。gzenttarget。sh, tslib。sh, qt-2.3.7。sh2編譯Qt/Embedded的環(huán)境參數(shù)的設(shè)置在編譯Qt/Embedded時,用戶在PC機(jī)上應(yīng)對編譯時所需的環(huán)境變量進(jìn)行設(shè)置(假設(shè)Qt解壓后目錄為/work/qt-2.3.7),主要參數(shù)包括:(1)QTDIRQt解壓后的所在的目錄(2)LD_LIBRARY_PATHQt共享庫存放的
27、目錄.(3)QPEDIRqtopia解壓后的所在的目錄(4) TMAKEPATHtmake編譯工具的路徑(假設(shè)tmake-1.1所在的目錄為/work)(5)TMAKEDIRtmake編譯工具的目錄(6)PATH交叉編譯工具arm-linux-gcc的路徑針對ARM開發(fā)平臺的Qt/Embedded的編譯步驟:(1) 根據(jù)編譯Qt/Embedded的環(huán)境變量的設(shè)置方法設(shè)置環(huán)境變量;進(jìn)入/qt2目錄運(yùn)行腳本:enttarget.sh,該腳本會設(shè)置所需要的環(huán)境變量。rootlocalhost rootcd qt2rootlocalhost qt2. enttarget.sh(2) QT工具鏈的配置r
28、ootlocalhost qt2tar zxvf /root/source/tmake1。11.tar。gz 。rootlocalhost qt2tar zxvf /root/source/qt-embedded2.3.7。tar.gz 。rootlocalhost qt2$mv qt2。3。7 qt-2。3。7targetrootlocalhost qt2$tar jxvf /root/source/tslib.tar.bz2 .拷貝需要的腳本和補(bǔ)丁到對應(yīng)的目錄:rootlocalhost qt2cp /root/source/patch . rfrootlocalhost qt2cp /r
29、oot/source/ent-target。sh .rootlocalhost qt2cp /root/source/tslib。sh tslibrootlocalhost qt2cp /root/source/ qt-2.3。7.sh qt-2。3.7host.sh(3) 觸摸屏共享庫的編譯和Qt/Embedded源代碼的修改 Qt/Embedded只支持鼠標(biāo)和鍵盤的操作,但在大部分嵌入式系統(tǒng)中利用觸摸屏,所以用戶必須對觸摸屏的相關(guān)操作編譯成共享庫或靜態(tài)庫.下面介紹觸摸屏共享庫的編譯過程。進(jìn)入“/qt2/tslib”目錄,運(yùn)行該目錄下的“tslib.sh”腳本。rootlocalhost r
30、oot$cd /qt2/tslibrootlocalhost tslib$。/tslib.sh(4) tmake的設(shè)置解壓后的tmake-1。11源文件需要作一定的修改后才能用于產(chǎn)生Makefile文件,需要修改的內(nèi)容如下: rootlocalhost tslibvi /qt2/tmake-1。11/lib/qws/linuxarm-g+/tmake。conf 在TMAKE_LIBS處加 lts,在TMAKE_LINK處該為arm-linuxg+。輸入:w!保存。(5) 編譯qt-embedded2。3。7。進(jìn)入qt-2.3。7-target目錄,運(yùn)行“qt-2。3。7.sh”腳本rootlo
31、calhost tslibcd /qt2/qt-2.3。7targetrootlocalhost qt-2。3。7-target$. qt2.3.7。sh (choise item:license yes:color depth:16;Virtual Framebuffer:no)以后即可以在此目錄下面編譯可在目標(biāo)機(jī)上面運(yùn)行的程序。4。2。2 串口通信模塊的實現(xiàn)串口操作主要是先打開串口,再設(shè)置它的參數(shù),串口流程如圖10所示。打開串口設(shè)置串口讀/寫串口關(guān)閉串口保存以前串口配置激活選項設(shè)置波特率設(shè)置數(shù)據(jù)位設(shè)置奇偶校驗設(shè)置停止位設(shè)置最少字符和等待時間處理要寫入的引用對象激活配置圖10 串口通信流程圖
32、本系統(tǒng)采取了將串口的所有操作做成一個類,類名為MySerial,它包含了3個函數(shù),分別為: 1tatic int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop);該函數(shù)實現(xiàn)了設(shè)置串口的一些參數(shù),fd為用戶打開的文件標(biāo)識符,nSpeed為波特率,nBits為數(shù)據(jù)位,nEvent為奇偶效驗,nStop為停止位。失敗返回0。把三個函數(shù)都設(shè)置成為靜態(tài)函數(shù)的原因是它們可以和類無關(guān),可以單獨被調(diào)用或者設(shè)置,也可以使用類來調(diào)用它們。其中設(shè)置串口參數(shù)的關(guān)鍵是在于串口配置的數(shù)據(jù)結(jié)構(gòu)9:struct termio unsigned sho
33、rt c_iflag; / 輸入模式標(biāo)志 /unsigned short c_oflag; / 輸出模式標(biāo)志 */unsigned short c_cflag; / 控制模式標(biāo)志*/unsigned short c_lflag; / local mode flags */unsigned char c_line; /* line discipline /unsigned char c_ccNCC; /* control characters /;設(shè)置串口的過程如下:(1) 串口配置使用tcgetattr(fd,&oldtio)函數(shù)struct termios newtio,oldtio
34、;tcgetattr( fd,&oldtio );(2) 激活選項有CLOCAL和CREAD,用于本地連接和接收使能. newtio.c_cflag | = CLOCAL | CREAD;(3) 設(shè)置波特率,使用函數(shù)cfsetispeed、 cfsetospeed cfsetispeed(&newtio, B115200);cfsetospeed(newtio, B115200);(4) 設(shè)置數(shù)據(jù)位,需使用掩碼設(shè)置.newtio。c_cflag = CSIZE; newtio.c_cflag = CS8;(5) 設(shè)置奇偶校驗位,使用c_cflag和c_iflag。設(shè)置奇校驗:n
35、ewtio。c_cflag |= PARENB;newtio.c_cflag |= PARODD;newtio.c_iflag = (INPCK | ISTRIP);設(shè)置偶校驗:newtio.c_iflag = (INPCK | ISTRIP);newtio。c_cflag = PARENB;newtio.c_cflag = PARODD;(6) 設(shè)置停止位,通過激活c_cflag中的CSTOPB實現(xiàn)。若停止位為1,則清除CSTOPB,若停止位為2,則激活CSTOPB.newtio.c_cflag = CSTOPB;(7) 設(shè)置最少字符和等待時間,對于接收字符和等待時間沒有特別要求時,可設(shè)為0
36、。newtio。c_ccVTIME = 0;newtio.c_ccVMIN = 0;(8) 處理要寫入的引用對象tcflush函數(shù)刷清(拋棄)輸入緩存(終端驅(qū)動程序已接收到,但用戶程序尚未讀)或輸出緩存(用戶程序已經(jīng)寫,但尚未發(fā)送).int tcflush(int filedes, int queue )(9) 激活配置。在完成配置后,需激活配置使其生效,使用tsettattr()函數(shù),它的原型:int tcgetattr(int filedes, struct termios * termptr);int tcsetattr(int filedes, int opt, const struc
37、t termios termptr);2static int open_port(int fd,int comport);該函數(shù)實現(xiàn)了打開端口,第一個參數(shù)為任意,第二個參數(shù)為打開的串口端口,如comport為1則打開串口0(ttyS0)。返回打開的文件標(biāo)識符。因為在Linux下操作串口等設(shè)備與操作文件相同。所以操作串口的函數(shù)是下面一些常用的函數(shù):fd = open( ”/dev/ttyS0”,O_RDWR|O_NOCTTY|O_NDELAY);read(fd,buff,8);write(fd,buff,8);open函數(shù)是打開串口0并返回文件標(biāo)識符,read和write分別是讀和寫的函數(shù)。其中
38、fd為文件標(biāo)識符,buff為緩沖區(qū),8為緩沖區(qū)大小。而open_port函數(shù)則封裝了open函數(shù),open_port第二個參數(shù)為選擇串口號的參數(shù).3static int nwrite(int serialfd,const char *data,int datalength);該函數(shù)實現(xiàn)了往串口寫數(shù)據(jù),其中第一個參數(shù)是文件標(biāo)識符,data為要傳送的數(shù)據(jù),datalength為要傳送數(shù)據(jù)的長度。返回成功寫入數(shù)據(jù)的長度。nwrite函數(shù)則將write函數(shù)封裝,實現(xiàn)把第二個參數(shù)的字符串輸出到串口。nwrite第二個參數(shù)設(shè)置成const char*方便在主程序使用QString。原因在于QString有
39、個函數(shù)為latin1(),將QString轉(zhuǎn)換成const char*。4。2.3 應(yīng)用程序的UI設(shè)計本系統(tǒng)采用的是QT2.3.2界面設(shè)計程序UI10。它擁有兩個UI界面,一個為短信界面,一個為電話界面.背景圖片和按鈕圖片都是用photoshop完成的,在程序中加載。短信界面如圖11所示。圖11 短信界面短信UI擁有4個按鈕,5個文本框,1個圖片框,它們分別擁有如下功能:Call按鈕:進(jìn)入Call的UI界面。Send按鈕:發(fā)送短信(發(fā)送前檢測短信中心號碼,接受號碼和內(nèi)容是否為空)。Open按鈕:閱讀“對方號碼”指定ID的短信。Exit按鈕:退出按鈕.短信中心號碼文本框:顯示短信中心號碼,屬性為
40、只讀.內(nèi)容(左)文本框:預(yù)發(fā)送的短信內(nèi)容.對方號碼文本框:預(yù)發(fā)送短信的接收人的號碼.內(nèi)容(右)文本框:顯示讀出來的內(nèi)容,屬性為只讀.State文本框:顯示所有的狀態(tài)信息.圖片框:顯示背景圖片。此UI為繼承g(shù)prs類的gprs_impl類的對象11,而gprs類是一個框架類,并不包含圖片等信息,所以在gprs_impl類的構(gòu)造函數(shù)中要初始化圖片。圖片相關(guān)的信息在構(gòu)造函數(shù)將調(diào)用的initPic()中初始化。QString strPicDir=”/pic/”;Btn_Close-setPixmap(QPixmap (strPicDir+"1_exit。png"));Btn_Ope
41、nsetPixmap(QPixmap (strPicDir+”1_open。png”));Btn_Call-setPixmap(QPixmap (strPicDir+”1_call。png”);Btn_Send-setPixmap(QPixmap (strPicDir+”1_send.png");BackImg->setPixmap(QPixmap (strPicDir+"msm.png”));其中strPicDir是圖片存放的目錄,本系統(tǒng)是放在根目錄下的pic目錄中.電話界面如圖12所示。圖12 電話界面電話UI擁有16個按鈕,2個文本框,1個圖片框,它們分別擁有如
42、下功能:Exit按鈕:退出該UI回到短信UI。Message按鈕:退出該UI打電話按鈕:撥打電話掛電話按鈕:掛電話09按鈕:電話數(shù)字按鈕,按相應(yīng)鍵在Num文本框中顯示C按鈕:刪除上一個數(shù)字按鈕:號Num文本框:顯示號碼的文本框,屬性為只讀,初始值為10086State文本框:顯示所有的狀態(tài)信息。圖片框:顯示背景圖片。此UI與gprs_impl類似,是繼承call類的call_impl類的對象,而call類是一個框架類,并不包含圖片等信息,所以在call_impl類的構(gòu)造函數(shù)中要初始化圖片。圖片相關(guān)的信息在構(gòu)造函數(shù)將調(diào)用的initPic()12中初始化。4。2。4 AT命令編碼解碼模塊的實現(xiàn)AT
43、命令作為XSCALE開發(fā)板與GPRS模塊通信的協(xié)議語言。GPRS通信系統(tǒng)使用AT命令通過串口向GPRS模塊發(fā)送控制命令。GSM規(guī)范對短消息傳輸定義了三種控制協(xié)議:即二進(jìn)制協(xié)議(塊模式),基于字符的AT命令接口協(xié)議(文本模式)和基于字符的十六進(jìn)制編碼二進(jìn)制傳輸塊接口協(xié)議(PDU 模式)。塊模式 (Block mode) 是使用二進(jìn)制編碼來傳輸用戶數(shù)據(jù)的接口協(xié)議。 為了提高可靠性,它帶有差錯保護(hù),適合于鏈接不完全可靠的地區(qū),尤其是要求控制遠(yuǎn)程設(shè)備的情況。它屬于GSM第一階段的短消息傳輸接口協(xié)議。目前,PDU已取代了塊模式。文本模式(Text mode)是使用 AT命令傳輸文本數(shù)據(jù)的接口協(xié)議。該模式
44、適合于非智能終端 、終端仿真器等。PDU模式相當(dāng)于計算機(jī)網(wǎng)絡(luò)中的分組交換接口協(xié)議.這種傳送方式能夠很平穩(wěn)地過渡到GPRS,因此GSM規(guī)范要求用戶盡可能地使用PDU模式處理短消息。所以本系統(tǒng)采用的是PDU模式來編碼和解碼。與短消息相關(guān)的常用的AT指令如表1所示。表1 常用與短消息相關(guān)的AT指令A(yù)T 指令 功 能 AT+CMGC Send an SMS command(發(fā)出一條短消息命令) AT+CMGD Delete SMS message(刪除SIM卡內(nèi)存的短消息) AT+CMGF Select SMS message formate(選擇短消息信息格式:0PDU;1-文本) AT+CMGL
45、List SMS message from preferred store(列出SIM卡中的短消息PDU/text: 0/“REC UNREAD”-未讀,1/“REC READ"-已讀,2/“STO UNSENT”-待發(fā),3/“STO SENT”-已發(fā),4/“ALL"全部的) AT+CMGR Read SMS message(讀短消息) AT+CMGS Send SMS message(發(fā)送短消息) AT+CMGW Write SMS message to memory(向SIM內(nèi)存中寫入待發(fā)的短消息) AT+CMSS Send SMS message from stora
46、ge(從SIM內(nèi)存中發(fā)送短消息) AT+CNMI New SMS message indications(顯示新收到的短消息) AT+CPMS Preferred SMS message storage(選擇短消息內(nèi)存) AT+CSCA SMS service center address(短消息中心地址) AT+CSCB Select cell broadcast messages(選擇蜂窩廣播消息) AT+CSMP Set SMS text mode parameters(設(shè)置短消息文本模式參數(shù)) AT+CSMS Select Message Service(選擇短消息服務(wù)) 短信系統(tǒng)中最
47、關(guān)鍵的就是定時器函數(shù)的實現(xiàn).定時器是在第一個UI界面的構(gòu)造函數(shù)中初始化的,由它每兩百毫秒調(diào)用一次read_timeout_slot().在read_timeout_slot()里面依賴一些位信息來處理事件,例如BInit為1的時候就處理初始化的代碼.系統(tǒng)初始化及定時器函數(shù)如圖13所示。構(gòu)造函數(shù),初始化標(biāo)志位。gprs_impl()打開串口并獲得文件描述符,新建并啟動定時器,并向串口寫獲取短信中心號碼的命令。設(shè)置BInit為1,并手動調(diào)用一次read_timeout_slot函數(shù)。initAT()初始化定時器200ms觸發(fā)一次,被觸發(fā)后調(diào)用read_timeout_slot()讀串口,是否有數(shù)據(jù)
48、。read_timeout_slot()無,返回有數(shù)據(jù)ReadMsg(QString strRecv)Bread是否為1Y將讀到的內(nèi)容解碼,見圖13。NBInit是否為1Y從串口讀出的數(shù)據(jù)strRecv中提取短信中心號碼,并顯示到短信中心號碼文本框上。并置BInit為0。NBSend是否為1Y發(fā)送已經(jīng)編碼好的字符串strEncodeMsgNstrRecv中是否有CMTIY顯示新信息到達(dá),并獲得此新信息的ID號并調(diào)用ReadMessage(ID) ReadMessage()函數(shù):往串口寫讀信息的命令,Bread置1NstrRecv中是否有RINGY彈出對話框,詢問是否接電話?!按_定”向串口寫入:
49、ATA“取消”向串口寫入:ATH圖13 系統(tǒng)初始化及定時器函數(shù)有電話時,GPRS模塊會發(fā)送“RING”信號給串口.系統(tǒng)就依靠是否讀到“RING”來判斷是否有新電話到來.然后彈出提示框詢問用戶是否接電話,如果用戶確定則向串口發(fā)送ATA接通電話,如果不接則向串口發(fā)送ATH掛電話13。有新電話出現(xiàn)提示如圖14所示。圖14 有新電話提示解碼函數(shù)ProcessMessage的作用就是將別人發(fā)過來的短信原語串解碼成信息,包括對方號碼,對方發(fā)送短信的時間,對方發(fā)送的消息內(nèi)容14等等。本系統(tǒng)提供了兩種解碼方式,一種為7位解碼,一種為PDU解碼,這樣就兼容了不同手機(jī)發(fā)送短信的編碼方式。解碼流程示例:假設(shè)接收到的
50、原語串即strMsg為:“0891683108706105F0040D91685129563107F300008060908063922306E8329BFD0E01”。由于短信原語串的可變內(nèi)容為短信內(nèi)容,而短信內(nèi)容在原語串的最末尾,所以短信原語串中很多數(shù)據(jù)例如對方電話號碼可以在固定的位置讀取出來。1 將短信內(nèi)容和時間等數(shù)據(jù)提取出來為strData為“00008060908063922306E8329BFD0E01”。2 將對方號碼提取出來為strnumber為“5129563107F3"。3 使用一個for循環(huán)將strnumber轉(zhuǎn)換成正常格式的電話號碼為
51、。4 從strData中提取時間strdate為“806090806392".5 使用一個for循環(huán)將strdate轉(zhuǎn)換為正常格式“080609 08:36:29”。6 提取短信內(nèi)容的原語串strSrc為“E8329BFD0E01”。7 獲得該短信的編碼方式nType“00”,并判斷為7位解碼形式,如果不是“00"則使用PDU格式解碼。使用Bit7Decode(strSrc)函數(shù)轉(zhuǎn)換成正常格式,解碼出來即為“hello!".解碼流程如圖15所示。QString gprs_impl:ProcessMessage(QString strMsg,QString &
52、;strNum)其中strMsg即為要解碼的原語獲得短信原語串長度,并將其從QString格式轉(zhuǎn)換成int格式獲得短信原語串從短信原語串中讀出發(fā)信人的號碼,并轉(zhuǎn)換成正常格式從短信原語串中讀出發(fā)送時間,并轉(zhuǎn)換成正常格式從短信原語串中提取出編碼方式,并由此選擇解碼成正常格式返回解碼函數(shù)圖15 解碼流程由于使用GPRS模塊發(fā)送短信需要兩個步驟:第一個步驟就是發(fā)送AT+CMGS,然后GPRS模塊會進(jìn)入等待發(fā)送信息狀態(tài),就可以發(fā)送已經(jīng)編碼好的AT原語了.所以編碼函數(shù)PreSendMessage的作用在于將欲發(fā)送的短信內(nèi)容用PDU格式編碼成AT原語格式,并向串口寫入AT+CMGS命令使得GPRS模塊處于等
53、待短信輸入狀態(tài)。編碼流程示例:假設(shè)對方手機(jī)號要發(fā)送的內(nèi)容為“hello!",短信中心號碼則strSendMsg“hello!”,strPhoneNumber,strServerNumber。并定義一個QString類型strSendTemp來保存編碼結(jié)果。1strSendTemp加上第一個固定原語字符串即strSendTemp“089168”。這里的“08”代表短信中心號碼的長度,共8位;“91”代表短信中心號碼用國際形式表示在前面加“”;“68”與后面加入的短信中心號碼一起構(gòu)成國
54、際形式即8613800716500。2使用NumberConversion函數(shù)將對方手機(jī)號轉(zhuǎn)換成原語形式,即將strServerNumber從轉(zhuǎn)換成“3108706105F0”.3將剛轉(zhuǎn)換完的strServerNumber添加到原語中,strSendTemp現(xiàn)在為:“0891683108706105F0”。4加上固定原語字符串“11000B81”,strSendTemp現(xiàn)在內(nèi)容為:“0891683108706105F011000B81"。這里的“11”表示基本參數(shù),發(fā)送的固定格式;“00”表示消息基準(zhǔn)值為0;“0B”表示對方號碼數(shù)字個數(shù)為11位,“81"表示非國際形式即沒有“”號。5使用NumberConversion函數(shù)將短信中心號碼轉(zhuǎn)換成原語形式,即將strPhoneNumber從轉(zhuǎn)換成“5129563107F3”。6將剛轉(zhuǎn)換完的strServerNumber添加到原語中,strSendTemp現(xiàn)在為:“0891683108706105F011000B815129563107
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鋰輝石合作協(xié)議書
- 2025年氣體檢測設(shè)備合作協(xié)議書
- 2025年印刷品、記錄媒介復(fù)制品合作協(xié)議書
- 2025年買賣個人房屋合同(4篇)
- 2025年臨時工聘用合同協(xié)議標(biāo)準(zhǔn)版本(三篇)
- 山西省2024七年級道德與法治上冊第二單元成長的時空第七課在集體中成長情境基礎(chǔ)小練新人教版
- 2025年臨時工解除合同樣本(2篇)
- 2025年人防門制作安裝工程施工合同模板(2篇)
- 2025年個人無息借款合同經(jīng)典版(2篇)
- 2025年二人合作經(jīng)營協(xié)議參考模板(三篇)
- 物流托運(yùn)單模板
- 【員工關(guān)系管理研究國內(nèi)外文獻(xiàn)綜述2800字】
- 六年級語文下冊閱讀及參考答案(12篇)
- 《發(fā)展?jié)h語(第二版)中級綜合(Ⅰ)》第7課+課件
- 第四章《數(shù)列》復(fù)習(xí)小結(jié)示范公開課教學(xué)PPT課件【高中數(shù)學(xué)人教A版】
- 蘇教版(蘇少版)九年級美術(shù)下冊全冊課件
- 2022年江蘇省鹽城市中考英語試題及參考答案
- 中國文化簡介英文版(ChineseCultureintroduction)課件
- 文化差異與跨文化交際課件(完整版)
- 工程經(jīng)濟(jì)學(xué)完整版課件全套ppt教程
- 鼻空腸營養(yǎng)的護(hù)理及注意事項ppt
評論
0/150
提交評論