畢業(yè)論文-基于ARM9的嵌入式智能家居網(wǎng)關(guān)的設(shè)計與實現(xiàn)_第1頁
畢業(yè)論文-基于ARM9的嵌入式智能家居網(wǎng)關(guān)的設(shè)計與實現(xiàn)_第2頁
畢業(yè)論文-基于ARM9的嵌入式智能家居網(wǎng)關(guān)的設(shè)計與實現(xiàn)_第3頁
畢業(yè)論文-基于ARM9的嵌入式智能家居網(wǎng)關(guān)的設(shè)計與實現(xiàn)_第4頁
畢業(yè)論文-基于ARM9的嵌入式智能家居網(wǎng)關(guān)的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩62頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGE基于ARM9的智能家居網(wǎng)關(guān)設(shè)計與實現(xiàn)摘要隨著芯片技術(shù)和計算機軟件技術(shù)的飛速發(fā)展、人們生活水平的不斷提高,家居智能化控制被越來越多的人關(guān)注,人們希望通過該技術(shù)能夠更加方便簡潔的對家居環(huán)境進行控制,由此智能家居便應運而生,本次設(shè)計便是根據(jù)智能家居的基本功能,通過對嵌入式ARM系統(tǒng)平臺搭建和服務器的實現(xiàn),設(shè)計并實現(xiàn)了智能家居網(wǎng)關(guān)的設(shè)計。本文主要研究基于ARM9內(nèi)核的S3C2440芯片的嵌入式智能家居網(wǎng)關(guān)的設(shè)計與實現(xiàn)。文章首先介紹了嵌入式智能家居的當前應用背景和發(fā)展情況,整體論述了系統(tǒng)的軟硬件開發(fā)平臺,主要詳細的介紹了系統(tǒng)軟硬件平臺的整體搭建過程,其中包括了交叉編譯環(huán)境的建立、Bootloader啟動引導程序的移植、linux-2.6.35內(nèi)核的移植以及簡易yaffs文件系統(tǒng)的制作;接著探討了Web服務程序Boa和嵌入式數(shù)據(jù)庫SQLite的移植;最后設(shè)計和實現(xiàn)了一個嵌入式智能家居服務器,主要通過編寫CGI程序來實現(xiàn)客戶端和服務器端的動態(tài)頁面交互。整個系統(tǒng)完成了家居環(huán)境的簡單信息檢測,遠程Web服務器的訪問,同時實現(xiàn)了通過Internet和本地對信息的檢測以及對設(shè)備的簡單控制功能。經(jīng)過測試表明,本系統(tǒng)具有良好的通用性、實用性和擴展性,可以應用到具體的嵌入式智能家居系統(tǒng)的開發(fā)中。關(guān)鍵詞:嵌入式智能家居ARM9Web服務器

TheARM9-basedImbeddedIntelligentHomeGatewayDesignandImplementedAbstractWithchiptechnologyandtherapiddevelopmentofcomputersoftwaretechnology,continuousimprovementofpeople'slivingstandard,intelligenthomecontrolareconcernedbymoreandmorepeople.Peoplewanttocontrolmoresimplyandconvenientlytothehomeenvironment,sothesmarthomehavecomeintobeing.Basedonthebasicfunctionsofsmarthome,throughtheplatformtobuildembeddedARMsystemsandserverimplementation,designandimplementationofintelligenthomegatewayisrealized.Inthispaper,theARM9-basedembeddedintelligenthomegatewayisdesignedandimplemented.Inthisarticle,firstly,theembeddedintelligenthomeapplicationbackgroundanddevelopmentofthecurrentsituationareintroduced,thewholeprocessofthesystemincludinghardwareandsoftwaredevelopmentplatformmainlydiscussed,andthehardwareandsoftwareplatformincludingtheestablishmentofcross-compilerenvironment,thetransplantationofthebootloaderandlinux-2.6.35kernel,themadeofthesimpleyaffsfilesystemareintroducedindetail;Seconendly,theBoaWebserverprogramexploresandembeddedSQLitedatabasemigrationisdebated;Finally,anembeddedintelligenthomeserverwhichmainlyachieveclientandserver-sidedynamicpagesinteractiveisdesignedandimplementedbywritingCGIprograms.Inthiswholesystem,asimplehomeenvironmentinformationdetectionandtheaccessofremoteWebserverarecompleted,asimplecontrolfunctionanddevicedetectionswhichisachievedbytheInternetandlocalaccessareallrealized.Aftertesting,thesystemshowsthegoodversatility,practicalityandscalabilityandcanbeappliedtospecificembeddedintelligenthomesystemdevelopment.Keywords:EmbeddedIntelligenthomeARM9Webserver

目錄1引言 11.1研究背景及現(xiàn)狀 11.2研究目的 11.3內(nèi)容大綱 22嵌入式系統(tǒng)平臺的搭建 32.1設(shè)計平臺簡介 32.2嵌入式開發(fā)環(huán)境的搭建 32.2.1交叉編譯環(huán)境的構(gòu)建 32.2.2配置NFS文件傳輸方式 42.3嵌入式系統(tǒng)平臺的建立 42.3.1BootLoader的移植 42.3.2Linux內(nèi)核的移植 52.3.3yaffs文件系統(tǒng)移植 82.4make工具簡介 92.5本章小結(jié) 103下位機Zigbee配置 123.1Zigbee簡介 123.2Zigbee協(xié)議棧簡介 123.3Zigbee協(xié)議的消息格式及幀格式 133.4節(jié)點簡介 133.5本章小結(jié) 154服務器的搭建 164.1Boa服務器的移植 164.1.1Boa服務器簡介 164.1.2Boa的移植 174.2HTML網(wǎng)頁制作 184.2.1HTML簡述 184.2.2HTML效果 204.3CGI交互程序的編寫 204.3.1CGI簡介 214.3.2CGI程序的接口規(guī)范 214.3.3CGI程序設(shè)計 234.4嵌入式SQLite數(shù)據(jù)庫 254.4.1SQLite數(shù)據(jù)庫簡介 254.4.2SQLite數(shù)據(jù)庫的接口(API)函數(shù) 264.4.3SQLite數(shù)據(jù)庫的移植 264.5本章小結(jié) 275上位機QtGui設(shè)計 285.1Qt/Embedded簡介 285.2Qt開發(fā)環(huán)境的搭建 295.3Qt程序設(shè)計 295.4QtCreator設(shè)計簡介 305.4.1QtCreator開發(fā)環(huán)境 305.4.2QtCreator工程創(chuàng)建過程簡介 305.4.2工程文件分析 315.5本章小結(jié) 336功能測試 346.1服務器測試 346.2Zigbee測試 356.3QtGui測試 356.4整體測試 356.5本章小結(jié) 367總結(jié) 37謝辭 38參考文獻 39附錄 40XXXX畢業(yè)設(shè)計PAGE11引言1.1研究背景及現(xiàn)狀隨著芯片技術(shù)和計算機系統(tǒng)的發(fā)展,如何更加簡潔方便的提高家居生活的質(zhì)量成為當今社會的熱門話題,相對應的家具智能化即智能家居的理念便應運而生。當下無線傳感器網(wǎng)絡(luò)技術(shù)的理論突破,及支持相關(guān)無線協(xié)議的芯片的成功研制,利用無線技術(shù)組建局域網(wǎng)將變的越來越容易。信息化的時代對傳統(tǒng)住宅的智能化、無線化、舒適性和安全性提出了新的挑戰(zhàn),隨著人們生活水平地提高,對家居環(huán)境的要求從以前單純的物理空間,到現(xiàn)在的延伸為一個安全、方便、舒適的居住環(huán)境。智能家居系統(tǒng)正是在這樣的情形下,成為新世紀的熱門話題。智能家居實際上就是一個先進的計算機系統(tǒng),通過各種有線無線通信技術(shù)、計算機技術(shù)、布線技術(shù)以及傳感技術(shù),將家庭內(nèi)部進行合理的規(guī)劃從而劃分為相關(guān)的子系統(tǒng),并組建為一個有機的整體,通過統(tǒng)一的管理,讓家居生活變得更加舒適、安全、高效。其一,智能家居系統(tǒng)可以實現(xiàn)主人采用更先進的方法來控制家電設(shè)備,比如通過手機、Internet網(wǎng)絡(luò)、語音識別等遠程控制家用電器;其二,家居系統(tǒng)內(nèi)部各個設(shè)備彼此可以通信,無需手動操作即可實現(xiàn)自動控制。嵌入式系統(tǒng)接入Internet也成為了嵌入式應用領(lǐng)域的熱點之一。將嵌入式Web服務器移植到目標嵌入式系統(tǒng)后接入Internet,從而使該嵌入式系統(tǒng)成為一個功能齊全的小型Web服務器,在遠程即可通過瀏覽器(比如IE)獲取該Web服務器發(fā)布的信息,進而實現(xiàn)遠程的實時監(jiān)控和維護。嵌入式Web服務器接入Intemet后,面臨著處理來自遠程客戶端的連接請求和傳輸大量的數(shù)據(jù)的任務,這就要求一方面嵌入式硬件的處理能力要更強;另一方面隨著傳輸數(shù)據(jù)的增多,并且數(shù)據(jù)類型的復雜化,在嵌入式系統(tǒng)中單純的以文件存儲數(shù)據(jù)的傳統(tǒng)存儲形式遠遠滿足不了需求,解決辦法是使用數(shù)據(jù)庫來存儲并且管理數(shù)據(jù)。在搭建嵌入式網(wǎng)關(guān)時使用數(shù)據(jù)庫將極大的提高系統(tǒng)的整體性能,縮短系統(tǒng)的開發(fā)周期,同時通過數(shù)據(jù)庫自帶的安全性檢查可以提高系統(tǒng)的整體安全性。正是基于以上背景,本論文搭建了ARM9+嵌入式Linux的嵌入式軟硬件平臺,在此軟硬件平臺之上實現(xiàn)了對Web服務器Boa和數(shù)據(jù)庫Sqlite的移植,采用C語言和Qt設(shè)計了一個從下位機獲取相關(guān)數(shù)據(jù)并進行處理和顯示的平臺。1.2研究目的本論文主要是通過對Linux內(nèi)核的移植為服務器的實現(xiàn)搭建基礎(chǔ)平臺,進而完成智能家居服務器網(wǎng)關(guān)的實現(xiàn)。本論文在智能家居局嵌入式網(wǎng)關(guān)的經(jīng)典架構(gòu)的基礎(chǔ)上根據(jù)本課題的特點做出了適當修改以適應本次設(shè)計的需求從而分成下位機Zigbee串口通信模塊、上位機Gui模塊、上位機Boa服務器的搭建、服務器交互html模塊等,各個模塊采用C、Html、Qt等語言編程,并編譯連接生成目標平臺的二進制的可執(zhí)行文件,然后燒錄至目標板NANDflash,配置目標板的啟動加載文檔以實現(xiàn)程序的開機啟動從而使其脫離開發(fā)人員的管理仍可以正常工作。1.3內(nèi)容大綱本文共分為七章,第一章為引言,包括研究目的,研究背景及現(xiàn)狀等;第二章為嵌入式系統(tǒng)平臺的搭建,主要包括交叉編譯環(huán)境的構(gòu)建,u-boot、linux內(nèi)核的移植和yaffs文件系統(tǒng)的制作;第三章主要闡述了Zigbee下位機的設(shè)計思路;第四章主要為嵌入式網(wǎng)關(guān)服務器的整體搭建;第五章為QtGui的整體設(shè)計。

2嵌入式系統(tǒng)平臺的搭建2.1設(shè)計平臺簡介在電子硬件設(shè)計技術(shù)領(lǐng)域,ARM是AdvancedRISCMachines的縮寫,是嵌入式微處理器行業(yè)的一家知名企業(yè),該企業(yè)設(shè)計了大量廉價、高性能、低功耗的RISC處理器相關(guān)技術(shù)及軟件。本論文的硬件平臺中央處理器(CPU)為三星公司基于ARM920T內(nèi)核開發(fā)的S3C2440。S3C2440適用于POS機、手持PDA設(shè)備、數(shù)字多媒體設(shè)備等,具有低價位、低功耗、高性能等優(yōu)點。平臺主要由微處理器、存儲模塊、控制模塊、以太網(wǎng)接口模塊、USB接口模塊、液晶顯示模塊、仿真調(diào)試模塊組成。下面重點介紹與嵌入式Web服務器應用相關(guān)的幾個模塊:微處理器S3C2440、存儲模塊、以太網(wǎng)接口模塊。S3C2440采用了ARM公司設(shè)計的ARM92OT內(nèi)核。S3C2440既支持NANDFlash啟動,又支持NORFlash啟動,可以通過OMO引腳進行選擇,當OMO為低電平時,系統(tǒng)將從NANDFlash啟動系統(tǒng);當OMO為高電平或者是處于懸空狀態(tài)時,系統(tǒng)從將NORFlash啟動[1]。本此設(shè)計的網(wǎng)絡(luò)控制器使用的是DAVICOM公司的DM9000芯片,該控制器攜帶有有標準的10M/100M以太網(wǎng)自適應,16K的大容量FIFO,4路的多功能輸入輸出總線,采用全雙工工作模式等。本次設(shè)計的硬件平臺使用了16位總線控制的DM9000以太網(wǎng)控制器芯片,數(shù)據(jù)總線DATA0~DATA15分別與DM9000的數(shù)據(jù)總線SD0~SD15連接,地址線SA4~SA4進行了相應的連接,片選線nGCG3與芯片的AEN相連。DM9000芯片的工作基址為0X300。2.2嵌入式開發(fā)環(huán)境的搭建由于嵌入式系統(tǒng)資源的相對缺乏從而不能在本機上(目標機)直接進行開發(fā)調(diào)試,因此嵌入式開發(fā)形成了獨特的交叉開發(fā)調(diào)試方式。即完成軟件的編寫工作以后,先在宿主機上采用適合目標機的編譯器對軟件進行編譯,然后將編譯后的二進制可執(zhí)行程序下載到目標機上相應的交叉調(diào)試。2.2.1交叉編譯環(huán)境的構(gòu)建本次設(shè)計采用的是arm-linux-gcc交叉編譯工具的4.3.2版本,1、下載arm-linux-gcc-4.3.2.tar.gz到虛擬機的用戶目錄下并進入該目錄,然后執(zhí)行下列命令解壓編譯鏈到目標目錄下#mkdir/usr/local/arm#tarzxvfarm-linux-gcc-4.3.2.tar.gz/usr/local/arm2、完成后會在/usr/local/arm下生成4.3.2目錄,然后執(zhí)行一下命令以配置當前環(huán)境變量#exportPATH=$PATH:/usr/local/arm/4.3.2/bin3、執(zhí)行下列命令查看交叉編譯環(huán)境是否成功搭建#whicharm-linux-gcc2.2.2配置NFS文件傳輸方式NFS(NetworkFileSystem)最初由SUN公司開發(fā),目的就是讓不同體系結(jié)構(gòu)的硬件,不同的操作系統(tǒng)系統(tǒng)通過網(wǎng)絡(luò)可以彼此之間共享文件。在本次設(shè)計中,NFS服務器可以讓目標機通過網(wǎng)絡(luò)將宿主機所共享的文件掛載在本地目錄上,在宿主機看來,訪問共享的文件就相當于訪問自己的磁盤分區(qū)一樣,十分方便快捷[3]。針對宿主機的環(huán)境,具體的配置如下:安裝NFS服務器,執(zhí)行#apt-getinstallnfs-kernel-servernfs-common配置NFS服務器的工作位置,執(zhí)行#vi/etc/exports在文件尾加上/*(rw,sync,no_root_squash)重啟服務生效,執(zhí)行#servicenfs-kernel-serverrestart2.3嵌入式系統(tǒng)平臺的建立平臺的搭建分為三部分分別是BootLoader的移植、Linux內(nèi)核的移植和yaffs文件系統(tǒng)的移植。2.3.1BootLoader的移植BootLoader在嵌入式系統(tǒng)中的作用相當于PC機中BIOS啟動引導設(shè)備,其主要作用是為系統(tǒng)的啟動做相關(guān)的引導和加載準備。CPU上電后運行的第一段代碼是從存儲設(shè)備的0x0地址開始運行的也就是BootLoader,它首先會對嵌入式平臺的硬件資源進行相對簡單的初始化,并設(shè)置好函數(shù)堆棧指針,然后加載系統(tǒng)內(nèi)核到內(nèi)存中,最后設(shè)置PC值跳轉(zhuǎn)到內(nèi)核的內(nèi)存入口地址,將系統(tǒng)的控制權(quán)交給操作系統(tǒng)的內(nèi)核函數(shù)。在嵌入式領(lǐng)域中,BootLoader是依賴于所處硬件環(huán)境的,對于不同的處理器體系結(jié)構(gòu)和外圍資源來說決定著將使用不同的BootLoader。在本次設(shè)計采用的ARM9體系的處理器中,系統(tǒng)上電后執(zhí)行的第一條指令在內(nèi)存中的地址是0x0,在這個地址里應該存放的是系統(tǒng)的引導程序,以使得系統(tǒng)在上電啟動的后,CPU首先執(zhí)行的就是Bootloader程序。BootLoader一般包括兩種工作模式:命令和加載模式[2]。嵌入式系統(tǒng)工作在正常的時候都是采用的加載模式,BootLoader把操作系統(tǒng)內(nèi)核由系統(tǒng)的NANDFlash存儲器中直接拷貝加載到RAM中并運行。這是由于RAM存儲器的存取速度要比NANDFlash存儲器快的多,而且NANDFlash不支持內(nèi)存的隨機存取,采用這種工作方式會大大提高代碼的執(zhí)行效率,提高了系統(tǒng)的實時性。在第一次燒錄BootLoader、系統(tǒng)內(nèi)核和根文件系統(tǒng)以及其他應用軟件的時候,采用的應該是命令模式。在該模式下,從宿主機上下載的文件將被BootLoader保存到目標機的RAM中,然后再被燒寫到NANDFlash的對應地址中。開發(fā)完成后,以后也會采用命令模式對系統(tǒng)的底層軟件進行更新。這兩種工作模式,只是在嵌入式系統(tǒng)的開發(fā)初期中有區(qū)別。系統(tǒng)開發(fā)完成后,從用戶的角度來看,BootLoader是工作在加載模式的,只起到加載系統(tǒng)的作用。本次設(shè)計采用對Linux支持完善的開源的啟動加載程序U-boot,其具有強大的代碼可移植性和良好的運行效率。U-boot的源文件由上千個文件組成,其主要文件結(jié)構(gòu)和功能如下:board:開發(fā)板相關(guān)的文件目錄,根據(jù)廠商進行分類,如當前平臺屬于三星則其平臺相關(guān)文件在board/samsung/下。cpu:體系結(jié)構(gòu)相關(guān)的文件目錄,按架構(gòu)進行分類,當前平臺采用S3C2440則其相關(guān)文件在cpu/s3c2440下,包括第一階段啟動代碼start.S。common:包含所有的U-boot下載模式下各種命令的實現(xiàn)源碼,通常每一個.c都對應著一條命令的實現(xiàn)。include:包含編譯過程中需要的頭文件和開發(fā)板的配置信息。doc:開發(fā)使用文檔,主要介紹不同平臺的配置編譯方法。drivers:設(shè)備的驅(qū)動文件,如SD卡,網(wǎng)卡,顯示屏等。fs:所支持的文件系統(tǒng),如fat等,用于訪問帶文件系統(tǒng)的存儲設(shè)備tools:工具軟件,如mkimage用于制作內(nèi)核鏡像,scripts用于生成指定的config.mk配置文件,還有支持GDB的調(diào)試工具等移植步驟如下:將下載的u-boot.tar.bz2拷貝到虛擬機中,解壓縮并進入目錄中#tarjxvfu-boot.tar.bz2#cdu-boot2、自動配置當前平臺環(huán)境,執(zhí)行#makes3c2440_config3、編譯#make完成后會在當前目錄下生成u-boot.bin二進制鏡像文件,經(jīng)該文件燒寫到NANDFlash的0x0地址處即可完成u-boot的全部移植工作。2.3.2Linux內(nèi)核的移植嵌入式硬件系統(tǒng)為嵌入式軟件系統(tǒng)運行提供了可供其運行的物理平臺,是整個嵌入式設(shè)備的基礎(chǔ),而嵌入式系統(tǒng)內(nèi)核則是整個嵌入式系統(tǒng)平臺的核心部分。因此嵌入式操作系統(tǒng)與嵌入式硬件設(shè)備,特別是處理器及其外部設(shè)備是緊緊相關(guān)的。對不同的硬件平臺上運行的嵌入式操作系統(tǒng)內(nèi)核通常是不相關(guān)的,必須依據(jù)具體的硬件設(shè)備平臺進行相應的配置和編譯。由于Linux操作系統(tǒng)的內(nèi)核源代碼全部使用C語言編寫,使得其具有良好的可移植性,只需要一些簡單的修改就能移植到不同的處理器平臺上。同時Linux是一款符合GNU標準的開源操作系統(tǒng),用戶可以免費下載和使用,并能夠根據(jù)需要對其進行定制[4]。因此Linux操作系統(tǒng)成為了嵌入式系統(tǒng)開發(fā)首選的操作系統(tǒng)。Linux內(nèi)核的源文件的文件數(shù)目多達上萬個,共有十七個子目錄,下面列舉其中的主要文件目錄:arch:與處理器體系結(jié)構(gòu)相關(guān)的代碼,對應于每個支持的體系結(jié)構(gòu),都有一個對應的子目錄,如i386、arm等,相應的目錄下有處理器相關(guān)的硬件匯編啟動代碼。driveres:存放設(shè)備驅(qū)動代碼的目錄,如block塊設(shè)備驅(qū)動、char字符設(shè)備驅(qū)動、mtd存儲類設(shè)備驅(qū)動等。fs:存放文件系統(tǒng)對應的代碼,如cramfs、yaffs、jffs2等。include:包含編譯內(nèi)核所需的絕大部分頭文件和配置信息。lib:于處理器體系結(jié)構(gòu)無關(guān)的內(nèi)核庫代碼,對應的與體系結(jié)構(gòu)相關(guān)的內(nèi)核庫代碼存放在arch/arm/lib下init:內(nèi)核初始化代碼,其中的main.c中的start_kernel函數(shù)式系統(tǒng)引導起來后運行的第一個函數(shù),是內(nèi)核開始工作的起點。ipc:提供進程間通信的相關(guān)代碼。mm:存放與處理器體系結(jié)構(gòu)無關(guān)的內(nèi)存管理代碼,對應的與處理器體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼放于arch/arm/mm下。kernel:內(nèi)核管理的核心代碼。net:存放網(wǎng)絡(luò)相關(guān)的不封代碼,其每個子目錄都對應于網(wǎng)絡(luò)的一個方面。scripts:存放腳本文件,如配置內(nèi)核時用到的makemenuconfig命令等。Documentation:內(nèi)核的相關(guān)文檔,如版本說明,結(jié)構(gòu)說明等Linux內(nèi)核2.6版本對S3C2440處理器的支持十分完善,在S3C2440處理器上移植Linux只需要要較少的修改。本論文采用Linux~2.6.35內(nèi)核進行移植,并且采用S3C2440的默認配置文件,步驟如下:下載linux-2.6.35.tar.gz到用戶目錄下并解壓,執(zhí)行#tarzxvflinux-2.6.35.tar.gz#cdlinux-2.6.35配置內(nèi)核的編譯環(huán)境以適應嵌入式硬件平臺,執(zhí)行#viMakefile修改ARCH=armCROSS_COMPILE=arm-linux-將S3C2440的默認配置文件拷貝到當前目錄,并配置內(nèi)核加載該配置文件,執(zhí)行#cparch/arm/configs/s3c2440_defconfig./#makemenuconfig如圖2.1所示圖2.1內(nèi)核配置選項選擇LoadanAlternateConfigurationfile選項載入配置文件,如圖2.2圖2.2加載內(nèi)核配置文件然后選擇Bootoptions選項,配置內(nèi)核的啟動參數(shù),如圖2.3和圖2.4圖2.3設(shè)置啟動參數(shù)選項圖2.4配置內(nèi)核的啟動參數(shù)值完成后保存退出,執(zhí)行#makezImage在arch/arm/boot下生成目標內(nèi)核鏡像文件zImage,然后通過USB下載線將內(nèi)核燒進開發(fā)板,重新啟動開發(fā)板后將能夠看到內(nèi)核的啟動畫面。2.3.3yaffs文件系統(tǒng)移植yaffs(YetAnotherFlashFileSystem)文件系統(tǒng)是針對于NANDFlash專門設(shè)計得出的嵌入式文件系統(tǒng),目前共有yaffs和yaffs2兩個不同的版本,它們的區(qū)別在于yaffs2能夠支持容量更大的NANDFlash芯片。yaffs文件系統(tǒng)在某些方面類似于JFFS文件系統(tǒng),但不同的是JFFS文件系統(tǒng)的設(shè)計目標是主要針對的是NORFlash的應用場合,但是NORFlash和NANDFlash在本質(zhì)上有著很大的區(qū)別,即NANDFlash不支持內(nèi)存的隨機讀取,所以盡管JFFS1文件系統(tǒng)也可以被應用到NANDFlash,但是由于其對內(nèi)存的操作和啟動方式方面針對于NORFlash的特性做了一些優(yōu)化,所以對NANDFlash來說通常并不是好的方案,又因為本次設(shè)計涉及到Qt的動態(tài)連接庫,因此本次設(shè)計采用帶Qt庫的yaffs文件系統(tǒng)[5]。將yaffs文件系統(tǒng)的源碼拷貝至某一目錄下,并進入該目錄,執(zhí)行#tarzxvfrootfs_qt210_QT4.7.0_20121210.tar.gz#mvrootfs_qt210_QT4.7.0_20121210rootfs安裝制作工具busybox,拷貝busybox-1.13.3.tar.gz到當前目錄,執(zhí)行#tarzxvfbusybox-1.13.3.tar.gz#cdbusybox-1.13.3#viMakefile修改CROSS_COMPILE

?=arm-linux-ARCH?=arm3、編譯busybox,執(zhí)行#make

CONFIG_PREFIX=rootfs

install#cpbin/mkyaffs2image../拷貝/etc下相應文件到../rootfs/etc/制作yaffs鏡像文件#cd../#./mkyaffs2imagerootfsrootfs.yaffs在當前目錄下生成目標內(nèi)核鏡像文件rootfs.yaffs,然后通過USB下載線將文件燒進開發(fā)板,重新啟動開發(fā)板后通過串口終端可以看到命令提示符,證明燒錄成功,如下圖所示。圖2.3文件系統(tǒng)成功移植效果圖2.4make工具簡介大型工程中的源文件數(shù)量龐大,make工具提供了方便的管理和編譯這些文件的方案,按其類型、功能和模塊的不同分別放在若干個子目錄中,在makefile定義通過定義出一系列的規(guī)則來進行指定,哪些文件是需要被先編譯的,哪些文件是需要被后編譯的,而哪些文件則是需要重新被編譯,而那些文件則需要被忽略,而且能夠進行某些更為復雜的操作[6]。makefile所實現(xiàn)的好處是能夠?qū)崿F(xiàn)自動化編譯,一旦寫好makefile文件,只需要執(zhí)行make命令,整個的工程將能夠?qū)崿F(xiàn)自動編譯,極大的提高了大型軟件開發(fā)工程的效率。make命令是一個工具,是被用來解釋makefile文件中所指定的命令并執(zhí)行,一般來說,集成開發(fā)環(huán)境(IDE)都包含有這個命令,比如:Delphi中的make,VisualC++下的nmake,Linux上GNU工具下的make。由此可見,make工具成為了一種在工程管理方面的有效編譯方法。make工具最為主要的功能就是通過解析makefile文件來描述各源程序之間的依賴關(guān)系并能夠自動的維護和選擇性編譯。而makefile文件則需要按照某種特定語法規(guī)則進行編寫,文件中必須要說明如何編譯具有相關(guān)性的源文件并最終連接生成可執(zhí)行文件,并要求定義各源文件間依賴的關(guān)系。makefile文件的基本規(guī)則如下:target...:prerequisites...command目標文件:所有依賴文件執(zhí)行指令...target也就是目標文件,可以是工程文件,也可以是可執(zhí)行的單個文件。也可以是一個標簽。prerequisites是要生成目標文件所需要的所有文件或是目標。而command也就是make需要執(zhí)行的命令部分。這是一個簡單的文件依賴關(guān)系,也就是說,target這一個或多個目標文件依賴于prerequisites列表中的所有文件,其生成的規(guī)則被定義在command中。也就是說只要prerequisites中有一個或以上的文件比目標文件的時間標簽要新的話,command所定義的命令就會被執(zhí)行(注:每個command必須要以Tab鍵開始,否者編譯器將無法識別該command,能夠大量的減少重復編譯,提高了工程的管理和編譯效率[7]。2.5本章小結(jié)本章主要論述了實現(xiàn)PC交叉開發(fā)和嵌入式底層平臺的搭建工作,其中包括了宿主機GNU交叉編譯鏈的安裝、NFS文件共享和目的主機U-boot的編譯移植、Linux內(nèi)核的移植、yaffs文件系統(tǒng)的制作等,為嵌入式服務器的搭建建立起底層的平臺支持,最后介紹了make工具的用法和makefile編寫文檔基本的語法規(guī)則,方便了大型工程的管理編譯或有大量文件需要被編譯的情況。

3下位機Zigbee配置3.1Zigbee簡介ZigBee是一種低速率的適用于短距離傳輸?shù)臒o線網(wǎng)絡(luò)協(xié)議。ZigBee協(xié)議從下到上分為物理層、媒體訪問控制層、傳輸層、網(wǎng)絡(luò)層、應用層等[8]。其中物理層和媒體訪問控制層均遵循IEEE802.15.4標準的規(guī)定。ZigBee網(wǎng)絡(luò)的主要特點是功耗低、成本低、速率低、支持大量節(jié)點、支持多種網(wǎng)絡(luò)拓撲結(jié)構(gòu)、復雜度低、快速、安全、可靠。ZigBee網(wǎng)絡(luò)設(shè)備可分為協(xié)調(diào)器、路由器、傳感器節(jié)點等。Zigbee作為一種短距離無線通信技術(shù),由于其網(wǎng)絡(luò)可以便捷的為用戶提供無線數(shù)據(jù)傳輸功能,因此在物聯(lián)網(wǎng)領(lǐng)域具有非常強的可應用性。以美國TI公司CC2430芯片為代表的ZigbeeSOC解決方案在國內(nèi)高校企業(yè)掀起了一股Zigbee技術(shù)應用的熱潮。因為CC2430集成了51單片機核,用C51語言編寫程序,所以相比于眾多的Zigbee芯片,CC2430頗受青睞。開發(fā)套件包括由專業(yè)人士精心設(shè)計的Zigbee產(chǎn)品開發(fā)模板、完整的原理圖、協(xié)議棧及例程源碼。Zigbee的開發(fā)基于Z-Stack協(xié)議棧,開發(fā)軟件使用IAREmbeddedWorkbench,成都無線龍公司的Zigbee開發(fā)套件可與IARforMCS-51集成開發(fā)環(huán)境無縫連接,操作方便、連接方便、簡單易學,是學習開發(fā)Zigbee終端最好最實用的開發(fā)工具。3.2Zigbee協(xié)議棧簡介如圖3.1所示,Zigbee的協(xié)議棧的各層與802.15.4MAC層是通過服務接入點實現(xiàn)通信的,服務接入點是某一個特定介質(zhì)層所提供服務的與其上層的通信接口,Zigbee協(xié)議棧的部分層有兩個接口分別是數(shù)據(jù)和管理實體接口。數(shù)據(jù)接口的目標是為其上層提供所需要的數(shù)據(jù)服務,管理實體接口的目標是向上層提供訪問內(nèi)部參、置信息和數(shù)據(jù)管理的服務。圖3.1Zigbee堆棧結(jié)構(gòu)3.3Zigbee協(xié)議的消息格式及幀格式Zigbee協(xié)議的消息格式組成及幀格式類型描述如下:1、消息格式Zigbee的消息是由127個字節(jié)組成的,它主要包括以下幾個部分:MAC報頭:該報頭包含當前被傳輸消息的源物理地址及目的地址.若消息被路由轉(zhuǎn)發(fā),則該地址有可能不是實際地址,產(chǎn)生及使用該報頭對于應用代碼是不可見的。NWK報頭:該報頭中包含了消息的實際源地址及最終的目的地址,該報頭的產(chǎn)生以及使用對應用代碼來說是不可見的。APS報頭:該報頭中包含了當前的配置ID,簇ID以及當前消息的目的地址,同樣的,報頭的產(chǎn)生及使用過程是不可見的。有效載荷:該域中包含了需要被應用層處理的Zigbee協(xié)議幀。2、ZigBee協(xié)議幀格式Zigbee協(xié)議共定義了兩種幀格式分別是KVP及MSG。KVP是ZigBee協(xié)議規(guī)范定義的特殊的數(shù)據(jù)傳輸機制,通過該規(guī)定來將數(shù)據(jù)傳輸格式和內(nèi)容標準化,主要用于傳輸較簡單的變量值格式。MSG是ZigBee協(xié)議規(guī)范中定義的特殊的數(shù)據(jù)傳輸機制,其在數(shù)據(jù)傳輸所采用的格式和內(nèi)容上并不作任何的特殊規(guī)定,主要用于傳輸專用的例如數(shù)據(jù)流和文件數(shù)據(jù)等數(shù)據(jù)量相對較大的數(shù)據(jù)。KVP幀專用于相對較規(guī)范的信息傳輸格式,采用鍵值對的數(shù)據(jù)形式,按某種特殊規(guī)定的數(shù)據(jù)格式進行數(shù)據(jù)傳輸,通常用來傳輸一個或幾個簡單的屬性變量值;MSG幀沒有具體數(shù)據(jù)格式上的規(guī)定,通常用于復雜信息的傳輸。KVP、MSG是通訊中的常用的兩種數(shù)據(jù)格式。如果將幀比作一封電子郵件,那么目的郵箱和源郵箱等信息都存于幀頭、幀尾,里面的信息內(nèi)容就是特定的數(shù)據(jù)格式KVP或MSG。根據(jù)具體的配置文件(Porfile),KVP一般用于簡單屬性數(shù)據(jù),MSG用于較復雜的,數(shù)據(jù)量較大信息。3.4節(jié)點簡介本次設(shè)計中所采用的Zigbee芯片是Chipcon

推出的CC2430,是世界首款完全符合2.4GHz的

IEEE制定的802.15.4標準的一款射頻收發(fā)器。包括眾多新功能,是一款完全適用于Zigbee芯片產(chǎn)品的RF器件。它基于是Chipcon的SmartRF

03技術(shù),以0.18um

的CMOS工藝制成的僅僅需極少的外部器件,性能相對更為穩(wěn)定且功耗更低。CC2430的可選擇和敏感指數(shù)均超過了IEEE制定的802.15.4標準的要求,可以確保短距離通信過程的有效和可靠性。利用該芯片實現(xiàn)的通信設(shè)備能夠支持的數(shù)據(jù)傳輸率高達250kbps可以實現(xiàn)快速組網(wǎng)技術(shù)。CC2430芯片內(nèi)置了模數(shù)轉(zhuǎn)換模塊,這就極大地方便了實現(xiàn)溫濕度、光強的模擬信號的采集與處理工作。對協(xié)議棧的main函數(shù)部分修改部分,實現(xiàn)對部分寄存器的讀寫操作即可實現(xiàn)外部信息的采集,然后調(diào)用發(fā)送和串口操作函數(shù)即可實現(xiàn)信息的傳輸[9]。1、溫度傳感器簡介采用DS18B20芯片,DS18B20數(shù)字溫度傳感器接線方便,封裝成后可應用于多種場合,其具有獨特的串行數(shù)據(jù)接口,只需要一條數(shù)據(jù)線線通信實現(xiàn)數(shù)據(jù)的傳輸,簡化了分布式溫度傳感器的應用范圍,無需外部其他元件,可以使用用數(shù)據(jù)總線供電,電壓有效范圍為3.0V至5.5V,測量溫度范圍為-55°C至+125℃。范圍內(nèi)精度能夠達到±0.5°C描述該DS18B20的數(shù)字溫度計提供9至12位(可編程設(shè)備溫度讀數(shù)。信息被發(fā)送到/從DS18B20通過一條數(shù)據(jù)線接口,所以中央微處理器與DS18B20只需有一條數(shù)據(jù)線連接。不需要外接電源,因為每一個DS18B20都包含一個獨特的序號,多個DS18B20芯片可以同時存在于一條數(shù)據(jù)總線。這使得多個溫度傳感器能夠放置在許多不同的地方。2、光敏傳感器簡介光敏傳感器的工作原理主要是利用光敏元件將光信號轉(zhuǎn)換為電信號,其最為0敏感的波長在可見光波長附近,還包括紅外線和紫外線。光敏傳感器不僅僅局限于對光的探測,還可以作為特定的探測元件組成其他特殊傳感器,對許多非電量進行有效的檢測,只要通過將這些非電量轉(zhuǎn)換為光信號并采用光敏傳感器監(jiān)測的機制即可得到其數(shù)據(jù)。光敏傳感器中最為簡單常用的電子器件就是光敏電阻,它能感應出光線的明暗變化,輸出微弱的電流,通過簡單的電子線路放大的處理便能夠得到光強信號值。3、紅外線傳感器簡介一般的生命體會釋放紅外線,紅外線傳感器通過對周圍紅外線強度的探測,可以得到紅外線強度值,通過數(shù)據(jù)管教上傳數(shù)據(jù)值。4、可燃氣體傳感器可燃氣體傳感器是能夠?qū)我换蚨喾N可燃氣體濃度產(chǎn)生響應的探測器??扇細怏w傳感器包括催化型、紅外光學型。催化型的可燃氣體傳感器是采用相對難熔對金屬鉑絲加熱后其電阻的波動來測定可燃氣體的濃度。當可燃氣體進入該型探測器有效范圍時時,鉑絲的表面會產(chǎn)生氧化反應(無焰燃燒),其反應所產(chǎn)生的熱量會使鉑絲的表面溫度變換,而鉑絲的電阻率會隨著溫度產(chǎn)生變化,從而得到環(huán)境數(shù)據(jù)。紅外光學型可燃氣體傳感器則是利用紅外線傳感器通過對紅外線光源的吸收率來檢測環(huán)境內(nèi)的碳氫類可燃氣體。效果如圖3.2所示:圖3.2節(jié)點效果圖3.5本章小結(jié)本章主要介紹了基于Zigbee的下位機通過溫度、光敏、紅外、可燃氣體等傳感器數(shù)據(jù)采集模塊,實現(xiàn)了對環(huán)境數(shù)據(jù)的基本采集、發(fā)送和接收功能,為上位機的數(shù)據(jù)處理模塊提供底層支持。

4服務器的搭建4.1Boa服務器的移植4.1.1Boa服務器簡介在Linux系統(tǒng)中最常用的支持http協(xié)議的服務程序有三個:Boa、httpd和Tttpd。其中httpd功能最弱,只能夠支持靜態(tài)頁面,不支持認證,不支持cgi,Thttpd和Boa所提供的功能基本一樣,都支持認證、cgi等。但是Thttpd在運行過程中所占用的資源要遠遠大于Boa服務器??梢夿oa更適合作為嵌入式領(lǐng)域的web服務器。所以本次設(shè)計選擇Boa服務器。Boa是1991年由PaulPhillips開發(fā)的一個運行于類unix計算機系統(tǒng)的高性能網(wǎng)絡(luò)服務器。Boa的設(shè)計目標是速度和安全性,它的安全性體現(xiàn)于服務器不會被未通過認證的用戶訪問,并且能對信息進行加密處理。Boa服務器可以處理來自客戶端瀏覽器的數(shù)據(jù)請求方式包括post方式和get方式,并且支持cgi后臺服務程序[10]。Boa服務程序的執(zhí)行流程如圖4.1所示。圖4.1Boa服務器流程圖傳統(tǒng)的web服務器會為每一次訪問都單獨創(chuàng)建一個進程,十分耗費系統(tǒng)資源。而Boa是一個單任務的http服務器。這也就是說,Boa既不為每一個連接單獨創(chuàng)建新的進程,又不復制自身進程,只有在完成一個用戶的請求之后才會響應另一個用戶的請求,因此它無法并發(fā)響應多個連接請求,但是在資源相對緊張的嵌入式設(shè)備中,Boa服務器的這一特點卻十分符合嵌入式對應用程序的要求。又Boa是通過建立http請求列表然后順序的方式來處理多路http請求的,它只會為cgi程序創(chuàng)建出新的進程,這樣就能夠在最大程度上節(jié)約系統(tǒng)資源。除此之外,Boa服務器還能夠自動的生成目錄和自解壓文件。Boa服務器在處理http請求過程中,具有較高的處理速度和效率。因此Boa服務器在嵌入式領(lǐng)域具有相當廣泛的應用。4.1.2Boa的移植Boa服務器的移植工作,主要完成了對Boa程序的移植和Boa配置文件的修改。其具體移植步驟如下:1、下載Boa源碼登錄網(wǎng)站,下載源碼文件名為boa-0.94.13-src.tar.gz的源碼包。并將下載到的文件放入用戶目錄中并解壓,然后執(zhí)行如下命令:#tarzxvfboa-0.94.13-src.tar完成后,將會生成一個名為boa-0.94.13-src的文件目錄。將該目錄名修改為boa。#mvboa-0.94.13-srcboa2、修改Boa服務器的根目錄Boa服務器程序可以對通過SERVER_ROOT的定義來制定Boa服務器的文件根目錄。在本次設(shè)計當中,將boa/sre/defines.h文件中的“#defineSERVER_ROOT/ete/boa”語句,修改為“#defineSERVER_ROOT/usr/bin”。即把服務器的根目錄修改為嵌入式平臺的/usr/bin目錄下。3、生成Makefile文件運行boa/src/configure,執(zhí)行以下命令:#cdboa/src#./configure執(zhí)行成功后即可生成Makefile文件4、修改生成Makefile文件由于本此設(shè)計使用的交叉編譯工具為arm-linux-gcc,必須要對Makefile文件作如下修改:CC=arm-11nux-gccCPP=arm-11nux-g++-E5、編譯進入boa/src目錄執(zhí)行以下命令:#make執(zhí)行完成功后,將在boa/src目錄下產(chǎn)生編譯后的二進制可執(zhí)行文件boa。去掉其調(diào)試信息:#arm-1inux-stripboa6、將編譯好的boa文件放入yaffs根文件系統(tǒng)的/bin目錄下#cpboa~/rootfs/bin/7、Boa服務器的配置以上幾個步驟就可以完成Boa服務器程序的移植,為了保證服務器的正常運行還需要對Boa進行配置。配置主要就是修改boa目錄下已有的一個示例配置文件boa.conf,可以在其基礎(chǔ)上進行簡單修改即可。主要內(nèi)容如下:Port80 //設(shè)置Boa程序的監(jiān)聽端口為80User0 //設(shè)置運行Boa的用戶名,0為所有用戶都可以運行Group0 //設(shè)置運行Boa的用戶所在的組,0為所有用戶組ErrorLog/var/log/boa/error_log //錯誤日志DocumentRoot/var/log/boa/log //普通日志DocumentRoot/var/www //定義HTML文檔的目錄DirectoryIndexindex.html //站點的首頁文件名KeepAliveMax1000 //設(shè)置最多響應1000個連接請求KeepAliveTimeout15 //設(shè)置15秒后未向服務器發(fā)送請求為超時CGIPath/bin:/usr/bin:/usr/local/bin //設(shè)置服務器的CGI程序存放目錄ScriptAlias/cgi-bin//var/www/cgi-bin //相當于建立軟連接8、建立相應的文件目錄在嵌入式文件系統(tǒng)中創(chuàng)建相關(guān)的目錄如下,日志文件所處的目錄var/log/boa,HTML文檔所處的位置/var/www,CGI腳本程序所在目錄/var/www/cgi-bin,目錄全部設(shè)置完畢后,將靜態(tài)頁面文件主頁index.html拷貝放到/var/www目錄下。9、修改文件系統(tǒng)為了讓系統(tǒng)啟動時能夠自動啟動嵌入式Boa服務器,需要通過修改系統(tǒng)的啟動腳本rootfs/etc/init.d/rcS實現(xiàn),在該文件末尾中加入一行內(nèi)容如下:/usr/bin/boa&完成后,重新燒錄文件系統(tǒng),重啟開發(fā)板,即完成Boa程序的移植。4.2HTML網(wǎng)頁制作4.2.1HTML簡述超級文本標記語言(英文縮寫:HTML)是標準通用標記語言下的應用、規(guī)范、標準,它通過某些特定的標記符來標記要顯示的網(wǎng)頁中的各個部分。網(wǎng)頁文件本身是一種文本文件,可以通過在該文本文件中添加某些特定的標記符,控制瀏覽器顯示的內(nèi)容(例如:文字效果,畫面布局,圖片樣式等)。瀏覽器凈按順序讀取和分析網(wǎng)頁文件,然后根據(jù)對標記符的解釋,顯示其標記對應的內(nèi)容,但對出錯的標記符并不會做出錯處理,且不停止其解釋執(zhí)行過程,編制者只能通過顯示效果來分析出錯原因和出錯位置。但需要注意的是,對于不同的瀏覽器,由于其對同一標記符可能會存在不完全相同的解釋方式,因而會有不同的顯示效果。一個網(wǎng)頁對應一個HTML文件,超文本標記語言文件以.htm(磁盤操作系統(tǒng)DOS限制的英語縮寫為擴展名)或.html(英語縮寫為擴展名)。能夠使用任何可以生成TXT類型源文件的文本編輯器來設(shè)計超文本標記語言文件,只需修改文件后綴即可。標準的超文本標記語言文件都會具有一個基本的結(jié)構(gòu),大部分標記一般都是成對出現(xiàn)(部分特殊標記除外例如:<br/>),包括超文本標記語言文件的開頭標志與結(jié)尾標志和超文本標記語言的頭部與實體兩大部分。用三個雙標記符來確認頁面的整體結(jié)構(gòu)。標記符<HTML>;說明該文件是采用用超文本標記語言(本標簽的中文全稱)來編寫的。它是文件的開頭部分,而</HTML>;則是該文件的結(jié)尾,它們分別是超文本標記語言文件的開始標記符和結(jié)尾標記符。標記符<head></head>,這兩個標記符分別標示了超文本標記語言頭部信息的開始和結(jié)束。頭部中所包含的標記分別有頁面的標題、文字編碼和文件格式等內(nèi)容,它本身并不作為顯示的內(nèi)容,但會影響網(wǎng)頁顯示的效果。頭部中最常用的標記符是title標記符和meta標記符,其中的title標記符用于定義該網(wǎng)頁的標題,它的內(nèi)容顯示在瀏覽器網(wǎng)頁窗口的標題欄中,網(wǎng)頁標題可被瀏覽器用作書簽或收藏清單。設(shè)置文檔標題和其它在網(wǎng)頁中不顯示的信息,比如direction方向、語言編碼格式LanguageCode等。標記符<body></body>,網(wǎng)頁中顯示的實際內(nèi)容全部包含在這兩個正文標記符間,正文標記符又被稱之為實體標記符。HTML網(wǎng)頁文檔的標準格式一般如下:<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/><title>標題</title></head><body><p><h1>正文</h1></p></body></html>其中<html></html>之間為網(wǎng)頁的全部內(nèi)容,<head></head>之間為網(wǎng)頁的頭信息,指定了網(wǎng)頁的格式,文本編碼格式等,<body></body>間為網(wǎng)頁的可顯示部分。4.2.2HTML效果本次設(shè)計的簡單網(wǎng)頁效果圖如下:圖4.2html登陸頁圖4.3html選項頁圖4.4htmlLED控制頁4.3CGI交互程序的編寫4.3.1CGI簡介CGI的全稱是公共網(wǎng)關(guān)接口,是HTTP服務器與發(fā)送請求機器上的程序進行信息交互的工具,其程序是運行與服務器上的。在物理上,CGI是一段可執(zhí)行的二進制程序,它運行于服務器之上,是服務器提供給客戶端瀏覽器交互的接口。CGI程序用來解釋處理來自用戶表單的輸入信息,并同時在服務器產(chǎn)生響應,將所請求信息的反饋結(jié)果發(fā)送給客戶端瀏覽器[11]。CGI程序是得服務器的網(wǎng)頁具有較強的交互功能。CGI程序的處理過程如下:用戶通過Internet把請求信息送至服務器。

2、服務器接收用戶的請求并交給相應的CGI程序處理。應用程序執(zhí)行所需要的操作,通常是基于瀏覽者輸人的內(nèi)容。CGI應用程序把結(jié)果格式化為網(wǎng)絡(luò)服務器和瀏覽器能夠理解的文檔(通常是HTML網(wǎng)頁)。

5、CGI程序把處理結(jié)果傳送給服務器。

6、服務器把結(jié)果回返給用戶。CGI可以用任何一種語言編寫,只要這種語言具有標準的輸入、輸出和環(huán)境變量。對于初學者來說,最好選用易于歸檔和能有效表示大量數(shù)據(jù)結(jié)構(gòu)的語言,例如UNIX環(huán)境中Perl(PracticalExtractionandReportLanguage)、BourneShel、Tcl(ToolCommandLanguage),由于C語言有較強的平臺無關(guān)性,所以也是編寫CGI程序的首選。Windows環(huán)境中C和C++。由于Internet上絕大部分服務器使用的是類UNIX操作系統(tǒng),且?guī)缀跛械念怳NIX操作系統(tǒng)都支持ANSIC標準,因而實際應用中大部分是用C編寫的。

C由于其良好的跨平臺、易于修改、效率高等特性被選為本次設(shè)計的CGI編寫語言。4.3.2CGI程序的接口規(guī)范CGI接口協(xié)議規(guī)范包括標準輸入(STDIN)、環(huán)境變量和標準輸出(STDOUT)。(1)標準輸入當用戶才用POST的方式提交數(shù)據(jù)是,CGI程序?qū)⒛軌蛲ㄟ^標準輸入從Web服務器中獲取用戶的輸入信息。CGI程序可以通過如下的兩種方式獲取到用戶的輸入信息:URL的直接傳遞②表單中的數(shù)據(jù)傳遞(2)環(huán)境變量在客戶端瀏覽器和Web服務器之間的數(shù)據(jù)交互過程中,CGI程序?qū)⒛軌蛲ㄟ^對環(huán)境變量的解析來獲取Web服務器所傳遞過來的用戶數(shù)據(jù)。環(huán)境變量是服務器和CGI程序間的一種數(shù)據(jù)傳遞的途徑,CGI程序中主要的涉及到的環(huán)境變量如下:REQUEST-METHOD:數(shù)據(jù)發(fā)送方式SERVER-NAME:運行CGI程序的主機名。SERVER-INTERFACE:Web服務器的類型。SERVER-PROTOCOL:通信采用的協(xié)議,應為HTTP/1.0。SERVER-PORT:綁定的TCP協(xié)議端口,一般說來Web端口均為80。HTTP-ACCEPT:HTTP定義的瀏覽器所能夠識別的數(shù)據(jù)格式。HTTP-REFERER:發(fā)送表單的文件的URL。HTTP-USER-AGENT:發(fā)送表單數(shù)據(jù)的瀏覽器相關(guān)信息。GETWAY-INTERFACE:CGI程序所采用的版本,在UNIX系統(tǒng)下為CGI/1.1。PATH-TRANSLATED:PATH-INFO參數(shù)中所包含的路徑名。PATH-INFO:瀏覽器采用GET方式發(fā)送數(shù)據(jù)過程的附加路徑。SCRIPT-NAME:實際CGI程序的絕對路徑名。QUERY-STRING:表單中用戶輸入的數(shù)據(jù),即URL中間號后分割的內(nèi)容。REMOTE-HOST:發(fā)送執(zhí)行程序的主機名。REMOTE-ADDR:執(zhí)行程序機器的IP地址。REMOTE-USER:發(fā)送程序的用戶名。CONTENT-TYPE:采用的數(shù)據(jù)類型。CONTENT-LENGTH:POST方式用戶輸入數(shù)據(jù)的字節(jié)數(shù)。下面詳細介紹一下編寫CGI程序時,經(jīng)常用的四個變量。1、REQUEST-METHOD該變量定義了CGI程序接收Web服務器數(shù)據(jù)的方式,分為GET方式和POST方式兩種。GET方式是把數(shù)據(jù)插入URL中發(fā)送的。而POST方式則是直接從服務器標準輸入中讀取并發(fā)送數(shù)據(jù),POST方式比GET方式能夠更加安全的傳輸數(shù)據(jù)到服務器的CGI程序。QUERY-STRING當客戶端瀏覽器采用的是GET方式發(fā)送數(shù)據(jù)時,環(huán)境變量QUERY-STRING值表示的是CGI程序中URL的“?”所對應的的后邊的參數(shù),如?vl=al&v2=a2。如果使用POST方式,該值將為空。3、CONTENT-TYPE表示的用戶給服務器傳遞的消息的數(shù)據(jù)類型。當客戶端瀏覽器采用的是POST的方式遞交表單內(nèi)容時,這個值將是服務器調(diào)用CGI程序過程所傳送MIME類型的數(shù)據(jù)。當客戶端瀏覽器采用的是GET方式時,該變量的將值為空。4、CONTENT-LENGTH當客戶端瀏覽器采用的是POST方式時,變量值表示的是傳遞給標準輸入的數(shù)據(jù)長度。當客戶端瀏覽器采用的是GET方式,其值將為空。(3)標準輸出CGI程序通過標準輸出給Web服務器傳輸某些數(shù)據(jù)信息。CGI的標準輸入也就是服務器的標準輸出,而相對應的CGI的標準輸出就是服務器程序的標準輸入。CGI傳遞給Web服務器的數(shù)據(jù)格式包含有多個頭部信息和一個數(shù)據(jù)信息,兩者之間必須用空行相隔。CGI的標準輸出中必須要帶有至少一個頭部信息,而數(shù)據(jù)體則無要求。如果帶有數(shù)據(jù)體,那么就必須要設(shè)置環(huán)境變量中的CONTENT-TYPE,即MIME類型。MIME類型信息通過標準輸入輸出傳遞給Web服務器后,Web服務器再把該數(shù)據(jù)全部返回給客戶端瀏覽器,客戶端瀏覽器就會通過解析從服務器接受到的文本信息做出相應的顯示。在HTML的源碼中能夠使用任何的HTML標記符,如超鏈接、圖像、表單以及調(diào)用其他CGI程序等。4.3.3CGI程序設(shè)計通過CGI程序?qū)崿F(xiàn)服務器與客戶端瀏覽器之間的動態(tài)數(shù)據(jù)交互,其執(zhí)行過程主要步驟詳解:(l)獲取用戶通過瀏覽器的提交數(shù)據(jù)如果客戶端采用數(shù)據(jù)傳遞方式的是GET方式,數(shù)據(jù)將被保存在系統(tǒng)環(huán)境變量的QUERY_STRING中,CGI程序中就可以通過調(diào)用函數(shù)getevn(“QUERY_STRING”)來或得到相應的數(shù)據(jù)。如果客戶端瀏覽器的數(shù)據(jù)提交的方式采用的是POST方式,那么發(fā)送的數(shù)據(jù)就沒有結(jié)束標識,因此CGI程序就必須先要從系統(tǒng)對應的環(huán)境變量CONTENT_LENGTH中獲取數(shù)據(jù)的長度,然后再從系統(tǒng)的標準輸入中讀取對應該長度的字符串,即可獲取到用戶所提交的數(shù)據(jù)信息。為了避免隱系統(tǒng)環(huán)境變量中CONTENT_LENGTH異常而引起CGI程序出現(xiàn)錯誤,解決方法就是通過在CGI編程中采用判斷getevn函數(shù)返回值的辦法檢測信息是否具有合法性,函數(shù)的一般調(diào)用格式如下:if(getevn(CONTENT_LENGTH)!=NULL)length=atoi(getenv(CONTENT_LENGTH))第一次調(diào)用getevn()函數(shù)通過其返回值了判斷環(huán)境變量CONTENT_LENGTH是否存在,第二次的函數(shù)調(diào)用才是真正讀取該環(huán)境變量值。如果函數(shù)返回值為NULL說明該環(huán)境變量不存在,CGI程序?qū)⒉粫x取該環(huán)境變量值,避免了因調(diào)用出錯而引發(fā)的程序段錯誤。(2)提取并解析用戶數(shù)據(jù)如果客戶端瀏覽器是通過POST方式向服務器提交用戶表單數(shù)據(jù)的,那么表單數(shù)據(jù)一定是采用特定編碼格式進行編碼的,這種編碼格式稱為URL編碼。其編碼格式的主要是對表單域的名字和其對應值進行轉(zhuǎn)義。即表單信息將按照在用戶表單中出現(xiàn)的先后順序,其中的空格將被替換為加號;除字母或者數(shù)字的其他字符以十六進制的ASCII碼形式表示,格式為%HH;換行符<br>標簽被替換為%0D%0A;數(shù)據(jù)域中的變量名和其對應值使用等號(=)符相對應。變量名及其值是通過字符&分割的。當用戶填寫完表單,并點擊“提交”按鈕后,將向服務器提交HTTP請求,Content字段中所包含的信息就成為經(jīng)過URL編碼的編碼信息,其格式如下:namel=valuel&name2=value2&name3=value3&name4=value4&…name是表單中定義的INPUT、SELECT或TEXTAREA等HTML表單域?qū)淖兞棵瑅alue則是對應表單域的用戶輸入或選擇值。因為其為編碼數(shù)據(jù)所以CGI程序在使用這些數(shù)據(jù)前,首先要對其進行解碼操作。即把這些數(shù)據(jù)流分解為一組組的變量名和其對應的值,并還原為用戶在瀏覽器網(wǎng)頁上的輸入形式[12],其流程如圖4.5所示。圖4.5URL解碼流程圖(3)向用戶返回結(jié)果CGI程序處理后的結(jié)果數(shù)據(jù),通過標準輸出傳給Web服務器。Web服務器根據(jù)頭信息的內(nèi)容,對CGI程序傳送過來的結(jié)果數(shù)據(jù)可用printf()、puts等標準I/O函數(shù)來產(chǎn)生HTML源碼,再通過HTTP封裝把執(zhí)行的結(jié)果返回給客戶端。4.4嵌入式SQLite數(shù)據(jù)庫4.4.1SQLite數(shù)據(jù)庫簡介SQLite數(shù)據(jù)庫跟一般的關(guān)系數(shù)據(jù)庫具有很大的不同之處,它具有以下幾個特點:(1)可以嵌入到應用程序當中,不需要配置可以直接使用;(2)不需要獨立的數(shù)據(jù)引擎,對數(shù)據(jù)庫的存取操作由應用程序可以直接采用調(diào)用相應的API實現(xiàn);(3)使用及其精簡的代碼編寫而成,只需要很少的內(nèi)存空間即可運行。SQLite數(shù)據(jù)庫所具有的這些特點,讓其較為適合在資源有限的嵌入式設(shè)備中運行,其運行速度更快,效果較為理想。SQLite是由D.RichardHip全部采用C語言開發(fā)出的一個完全開源的嵌入式數(shù)據(jù)庫系統(tǒng)。SQLite數(shù)據(jù)庫只與文件系統(tǒng)有關(guān),因此它對操作系統(tǒng)內(nèi)核上并無太大的限制,并且支持目前常用的計算機編程語言。SQLite數(shù)據(jù)庫實現(xiàn)了SQL92的標準,其中共包括表、索引、事務、視圖、觸發(fā)器和一系列用戶接口API等[13]。SQLite的主要特征如下:1、靈活性SQLite數(shù)據(jù)庫在使用前不需要任何的配置,程序編譯完成后就可以直接運行。SQLite數(shù)據(jù)庫程序的打開和關(guān)閉不需要創(chuàng)建新的單獨的進程來運行,涉及的用戶權(quán)限不需要由管理員記性專門的創(chuàng)建分配,在系統(tǒng)崩潰或掉電重啟后能夠自行恢復。2、精簡性SQLite數(shù)據(jù)庫的規(guī)模非常小。而且由于其在磁盤上移動的信息量很少,也大大的加快了數(shù)據(jù)訪問速度。SQLite數(shù)據(jù)庫經(jīng)過精簡編譯之后,在不減少其基本功能的前提下,整個運行的靜態(tài)庫文件大小將小于225KB。如果在編譯時去掉不需要的功能函數(shù),則可以被縮減到17OKB以內(nèi)。3、無服務器目前其他的非嵌入式系統(tǒng)上的數(shù)據(jù)庫軟件都需要預先安裝一個數(shù)據(jù)庫引擎,并作為一個單獨的服務器進程執(zhí)行。應用程序要通過發(fā)送請求到該服務器的方式進行數(shù)據(jù)庫查詢和其他操作,這需要通過采用進程間通信的機制(如命名管道、共享內(nèi)存、信息鏈表等)的方式來實現(xiàn),這就額外的增加了系統(tǒng)開銷。而對SQLite數(shù)據(jù)庫來說,其應用程序如果要訪問某些數(shù)據(jù),可以直接通過對磁盤上的數(shù)據(jù)庫文件進行讀寫操作來實現(xiàn)。4.4.2SQLite數(shù)據(jù)庫的接口(API)函數(shù)SQLite數(shù)據(jù)庫共定義了83個API接口函數(shù)和一些數(shù)據(jù)結(jié)構(gòu)的預定義。在對SQLite服務器的應用中,最為簡單的數(shù)據(jù)庫存取操作只需要通過四個函數(shù)就能夠?qū)崿F(xiàn),它們分別是:打開數(shù)據(jù)庫函數(shù)sqlite3_open()、關(guān)閉數(shù)據(jù)庫函數(shù)sqlite3_close()和SQL語句執(zhí)行函數(shù)sqlite3_exec()以及查詢操作函數(shù)sqlite3_gettable()。(1)打開數(shù)據(jù)庫intsqlite3_open(constchar*filename,intmode,sqlite3**p_sqlite)應用程序統(tǒng)調(diào)用該函數(shù)可以實現(xiàn)打開一個數(shù)據(jù)庫操作,如果該數(shù)據(jù)庫文件不存在將會以該文件名自動創(chuàng)建一個新的數(shù)據(jù)庫文件。參數(shù)filename即為數(shù)據(jù)庫的文件名。參數(shù)mode指定了當前數(shù)據(jù)庫的讀寫模式,例如設(shè)置為0666表示為可讀寫,0444為只讀,0222為只寫。參數(shù)sqlite3**p_sqlite是一個結(jié)構(gòu)體的指針,為打開的數(shù)據(jù)庫句柄。(2)關(guān)閉數(shù)據(jù)庫intsqlite3_close(sqlite3*p_sqlite)應用程序統(tǒng)調(diào)用該函數(shù),參數(shù)為所打開數(shù)據(jù)庫時的句柄,關(guān)閉給數(shù)據(jù)庫。(3)執(zhí)行SQL語句intsqlite3_exec(sqlite3*p_sqlite,constchar**sql,sqlite3_callback,void*parg,char**errmsg)應用程序統(tǒng)調(diào)用此函數(shù)可以實現(xiàn)執(zhí)行一條或者多條SQL語句的操作,每條SQL語句之間使用分號分隔開。該函數(shù)在執(zhí)行SQL語句的時候可以通過指定參數(shù)sqlite3_callback為回調(diào)函數(shù),實現(xiàn)對SQL語句執(zhí)行返回值的處理。如果該函數(shù)的返回值為0,就表示所有的SQL語句都被成功執(zhí)行完畢。返回值為其他時,則說明SQL語句沒有被成功執(zhí)行,可以通過字符串指針errmsg查看錯誤信息。(4)查詢數(shù)據(jù)intsqlite3_gettable(sqlite3*p_sqlite,constchar*sql,char***result,int*nrow,int*column,char**errmsg)這個函數(shù)被專門被用來對數(shù)據(jù)庫執(zhí)行查詢語句。result是一個二維數(shù)組,用于存放查詢所得的數(shù)據(jù)的結(jié)果。二維數(shù)組內(nèi)存放的內(nèi)容先是列名,然后是各項的數(shù)據(jù)值。而nrown和column分別被用來存儲執(zhí)行查詢語句的返回結(jié)果集的行數(shù)和列數(shù)。如果沒有查到結(jié)果,其值為0。4.4.3SQLite數(shù)據(jù)庫的移植SQLite數(shù)據(jù)庫的移植過程如下:1、下載源碼包登錄到/download.html上,下載其中源文件的文件名為sqlite3-3.7.17的源碼包。完成后將下載到的源碼解壓,要在生成的Sqlite目錄外新建出一個目錄,并命名為Sqlite3-arm-linux。2、修改makefile文件通過修改makefile文件讓SQLite數(shù)據(jù)庫能在嵌入式系統(tǒng)上正確運行。首先把根目錄下的Makefile.Linux-gcc文件拷貝出一份并重命名為Makefile,然后修改Makefile文件中:TOP=./sqlite;TCC=arm-1inux-gcc-O6;AR=arm-11nux-arcr;RANLIB=arm-linux-ranlib;MKSHIB=arm-1inux-gee-shared。TLIBS=ldl。#TCL_FLAGS=-I/home/drh/tcltk/8.41inux#LIBTCL=/home/drh/tcltk/8.41inux/libte18.4g.a-lm-ldl3、修改main.mk文件在LIBOBJ選項中刪除tclsqlite3.o選項。在編譯生成數(shù)據(jù)庫候?qū)⒉粫幾gSQLite的Tcl語言綁定選項。4、編譯使用make命令工具執(zhí)行編譯完畢后,將會在/1ibs目錄下生成文件如下Sqlite3、libsqlite3.so.0.8.6和libsqlite3.a。將后兩個庫文件拷貝到嵌入式文件系統(tǒng)上的/lib和/usr/lib目錄下,Sqlite3文件拷貝到/bin目錄下,便可以正常運行和使用SQLite數(shù)據(jù)庫。4.5本章小結(jié)本章主要介紹了嵌入式服務器的搭建過程,主要涉及到Boa服務器的移植、HTML網(wǎng)頁文檔的編寫、交互程序CGI的設(shè)計和SQLite數(shù)據(jù)庫的移植。為后續(xù)的程序設(shè)計提供了整體的運行和測試環(huán)境。

5上位機QtGui設(shè)計5.1Qt/Embedded簡介GUI是圖形用戶接口,一般被用來設(shè)計PC機上人機交互界面。而對于嵌入式GUI來說,由于嵌入式設(shè)備對資源的嚴格要求,不同的嵌入式軟硬件環(huán)境就需要定制相應的嵌入式系統(tǒng),那么對于GUI的要求也就會產(chǎn)生區(qū)別,因此嵌入式相關(guān)的GUI也必須要是可以進行配置和定制的。由于嵌入式的硬件資源對系統(tǒng)和應用程序限制,要求嵌入式GUI必須要具有輕量、高效、耗費資源少、可靠等特點。由于本次設(shè)計采用的操作系統(tǒng)其源碼公開,有很好的移植性和裁剪性而且具有很高的靈活性的優(yōu)點,因此在嵌入式行業(yè)的GUI開發(fā)通常選擇在Linux下用GNU工具進行開發(fā)。Qt/Embedded下的Qt庫相關(guān)開發(fā)商目前正在進行的全面面向嵌入式系統(tǒng)的Qt版本。它是專門對去嵌入式系統(tǒng)設(shè)計圖形用戶界面而開發(fā)的工具包,其中包括一個完整的窗口系統(tǒng)。其特點是可移植性好,設(shè)計者能夠輕易的向其中加入各種顯示模塊和硬件設(shè)備掃描模塊,許多的基于Qt的XWindow均可以通過簡單的編譯移植到嵌入式系統(tǒng)上。Qt/Embedded還為開發(fā)者提供了相當豐富的API接口調(diào)用功能,并公開了其源代碼。Qt/Embedded提供了豐富的窗口組件,還支持窗口部件的自定義,因此它可以向用戶提供一個簡易并且優(yōu)異的圖形界面,同時其豐富的窗口對象的實現(xiàn)也增大了其軟件的體積,因此Qt/Embedded常用在對系統(tǒng)資源的要求不十分苛刻的環(huán)境中。圖5.1QtCreator的組成由于Qt的可移植性的特點,本次設(shè)計采用PC下的Win系統(tǒng)開發(fā),Linux系統(tǒng)編譯的交叉開發(fā)方式。5.2Qt開發(fā)環(huán)境的搭建首先安裝PC版的QtCreator,然后將下載好的QtEmbedded-4.7.0-arm.tar.gz拷貝到虛擬機中,執(zhí)行如下步驟:創(chuàng)建相應目錄,并將文件解壓到該目錄,執(zhí)行#mkdir/usr/local/Trolltech#tarzxvfQtEmbedded-4.7.0-arm.tar.gz修改環(huán)境變量,執(zhí)行如下命令:#exportPATH=/usr/local/Trolltech/QtEmbedded-4.7.0-arm/bin:$PATH3、確認安裝是否成功,執(zhí)行#whichqmake執(zhí)行完畢后,若打印相關(guān)信息則說明安裝成功。4、配置開發(fā)板Qt環(huán)境,拷貝/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib下的所有文件到y(tǒng)affs文件系統(tǒng)的對應目錄下,#cp/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib \./rootfs/usr/local/Trolltech/QtEmbedded-4.7.0-arm/-R執(zhí)行成功后重新制作文件系統(tǒng)鏡像并燒至開發(fā)板NAND中即可完成Qt應用環(huán)境的搭建工作。5.3Qt程序設(shè)計本次設(shè)計的Qt程序流程圖如圖5.2所示:圖5.2程序流程圖1、Qt中生命一個QWidget類對象,并調(diào)用顯示函數(shù)show(),即可完成對屏幕的顯示初始化工作。2、在Linux系統(tǒng)中所有的設(shè)備均被鏈接為/dev目錄下的文件,因此對串口的操作就變?yōu)閷υ撐募淖x寫操作,調(diào)用系統(tǒng)調(diào)用open()、write()、read()即可完成串口的今本操作。3、當從串口中讀出數(shù)據(jù)后,調(diào)用數(shù)據(jù)口接口函數(shù)將內(nèi)容寫入數(shù)據(jù)庫,同事更新顯示設(shè)備。4、繼續(xù)掃描串口。5.4QtCreator設(shè)計簡介5.4.1QtCreator開發(fā)環(huán)境QtCreator是Qt的集成開發(fā)環(huán)境(IDE),QtCreator包括項目生成向?qū)А⒏呒壍腃++代碼編輯器、瀏覽文件及類的工具、集成了QtDesigner、QtAssistant、QtLinguist、圖形化的GDB調(diào)試前端,集成qmake構(gòu)建工具等,主要是為了幫助新

Qt

用戶更快速入門并運行項目,并且以圖形界面的方式開發(fā)Qt程序,極大的方便了程序開發(fā)人員、提高了程序開發(fā)的效率。QtCreator的Windows下軟件環(huán)境如圖5.3所示:圖5.3Qt可視化環(huán)境5.4.2QtCreator工程創(chuàng)建過程簡介1、選擇文件->新建文件或工程,彈出如下圖所示對話框圖5.4創(chuàng)建Qt工程選擇默認選項,點擊choose,輸入工程名,點擊下一步彈出如下對話框圖5.5選擇對話框基類基類選擇QWidget,點擊下一步選擇結(jié)束,這樣就建立好了一個Gui模板。5.4.2工程文件分析ProjectN:工程文件,包含工程的配置信息,如下圖所示圖5.6工程配置文件源碼分析:Qt +=coregui,添加Qt窗口基本模塊TARGET=untitled,目標文件名SOURCES+=main.cppwidget.cpp,源文件列表,包含工程涉及到的所有源文件HEADS+=widget.h,頭問價列表,包含涉及到的所有頭文件FORMS+=widget.ui,designer設(shè)計器的Xml文件widget.ui:designer設(shè)計器文件,語法格式遵循Xml,designer如下圖所示圖5.7designer設(shè)計器widget.h:自定義窗口類的頭文件widget.cpp:自定義窗口類的實現(xiàn)文檔main.cpp:定義程序入口函數(shù),源碼如下圖5.8main.cpp源碼源碼分析:第一、二行:頭文件包含,QApplication內(nèi)主要聲明了Qt程序的控制流函數(shù)、widget.h為用戶自定義的窗口類頭文件。第四行:程序的入口函數(shù)第五行:創(chuàng)建一個QApplication對象并將用戶在控制臺輸入的參數(shù)傳遞給該應用程序?qū)ο?。QApplication對象管理QtGui應用程序的控制流程和主要的設(shè)置選項。使用Qt設(shè)計的任何Gui應用程序,都必須包含一個QApplication對象。而對于非Gui的Qt應用程序,可以不依賴于QtGui庫的QCoreApplication。第七行:創(chuàng)建一個自定義的Widget窗口類對象。第八行:顯示該窗口第十行:將程序的控制流權(quán)限交給QtApplication。這是一個Qt的Gui應用程序的最小架構(gòu),幾乎所有的基于QtDesigner開發(fā)的QtGui都是在此基礎(chǔ)上創(chuàng)建出來的。5.5本章小結(jié)本章主要做了Qt的簡介,闡述了本次設(shè)計過程中Qt程序的設(shè)計流程,對以個基礎(chǔ)的Qt圖形化應用程序源碼做了簡單的分析

6功能測試6.1服務器測試1、將編寫好的HTML(超文本文檔)拷貝至/var/www下,執(zhí)行如下命令:#cp*.html~/rootfs/var/www/2、進入CGI程序目錄,編寫makefile文檔,內(nèi)容格式如下:src+=name1.csrc+=name2.c...obj=$(src:%.c=%.cgi)CC=ar

溫馨提示

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

評論

0/150

提交評論