基于ARMcortex-A8內(nèi)核的嵌入式智能家畢業(yè)論文_第1頁(yè)
基于ARMcortex-A8內(nèi)核的嵌入式智能家畢業(yè)論文_第2頁(yè)
基于ARMcortex-A8內(nèi)核的嵌入式智能家畢業(yè)論文_第3頁(yè)
基于ARMcortex-A8內(nèi)核的嵌入式智能家畢業(yè)論文_第4頁(yè)
基于ARMcortex-A8內(nèi)核的嵌入式智能家畢業(yè)論文_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、青島農(nóng)業(yè)大學(xué)畢 業(yè) 論 文(設(shè)計(jì)) 題 目: 基于ARMcortex-A8內(nèi)核的嵌入式智能家 居系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā) 姓 名: 學(xué) 院: 理學(xué)與信息科學(xué)學(xué)院 專 業(yè): 通信工程 班 級(jí): 2010級(jí)2班 學(xué) 號(hào): 指導(dǎo)教師: 劉金梅 2014年6月1日畢業(yè)論文(設(shè)計(jì))誠(chéng)信聲明本人聲明:所呈交的畢業(yè)論文(設(shè)計(jì))是在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果,論文中引用他人的文獻(xiàn)、數(shù)據(jù)、圖表、資料均已作明確標(biāo)注,論文中的結(jié)論和成果為本人獨(dú)立完成,真實(shí)可靠,不包含他人成果及已獲得青島農(nóng)業(yè)大學(xué)或其他教育機(jī)構(gòu)的學(xué)位或證書(shū)使用過(guò)的材料。與我一同工作的同志對(duì)本研究所做的任何貢獻(xiàn)均已在論文中作了明確的說(shuō)明并表示了謝

2、意。論文(設(shè)計(jì))作者簽名: 日期: 年 月 日 畢業(yè)論文(設(shè)計(jì))版權(quán)使用授權(quán)書(shū) 本畢業(yè)論文(設(shè)計(jì))作者同意學(xué)校保留并向國(guó)家有關(guān)部門或機(jī)構(gòu)送交論文(設(shè)計(jì))的復(fù)印件和電子版,允許論文(設(shè)計(jì))被查閱和借閱。本人授權(quán)青島農(nóng)業(yè)大學(xué)可以將本畢業(yè)論文(設(shè)計(jì))全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫(kù)進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本畢業(yè)論文(設(shè)計(jì))。本人離校后發(fā)表或使用該畢業(yè)論文(設(shè)計(jì))或與該論文(設(shè)計(jì))直接相關(guān)的學(xué)術(shù)論文或成果時(shí),單位署名為青島農(nóng)業(yè)大學(xué)。論文(設(shè)計(jì))作者簽名: 日期: 年 月 日指 導(dǎo) 教 師 簽 名: 日期: 年 月 日基于ARMcortex-A8內(nèi)核的嵌入式智能家居系統(tǒng)的設(shè)計(jì)與

3、開(kāi)發(fā)摘要:隨著“物聯(lián)網(wǎng)”的發(fā)展,智能家居近年來(lái)成為家電企業(yè)研究的熱點(diǎn)。本設(shè)計(jì)基于S5PV210芯片,采用嵌入式系統(tǒng)開(kāi)發(fā)的方式,利用Zigbee組網(wǎng)技術(shù),模擬了一套簡(jiǎn)單的智能家居系統(tǒng)。本系統(tǒng)利用Zigebee組網(wǎng)技術(shù),實(shí)現(xiàn)對(duì)水、聲、火焰、震動(dòng)的遠(yuǎn)程監(jiān)控,并且通過(guò)協(xié)調(diào)器與開(kāi)發(fā)板實(shí)現(xiàn)交互,同時(shí)可以通過(guò)PC機(jī)實(shí)現(xiàn)對(duì)開(kāi)發(fā)板的登陸。系統(tǒng)采用ARMcortex-A8內(nèi)核,運(yùn)算速度快,功耗低,體積小,能夠兼容多種復(fù)雜的外設(shè)。Zigbee模塊適用小型系統(tǒng),支持組網(wǎng)無(wú)限擴(kuò)展的模式。經(jīng)測(cè)試,系統(tǒng)實(shí)現(xiàn)了預(yù)計(jì)功能。關(guān)鍵詞:智能家居;嵌入式開(kāi)發(fā);Zigbee;傳感器;S5PV210The Design and Devel

4、opment of IntelligentHome System Based on ARMcortex-A8 KernelAbstract:With the development of Internet of things,intelligenthomebecomes a hot research field forhousehold electrical applianceenterprisesin recent years.This project is based on S5PV210chip. The embedded system developmentmethod is adop

5、ted and Zigbee networking technology is used to simulatea simple set ofintelligenthome system.Zigebee network technology is used to monitor water, sound, flame, shock remotely. User can communicate with development board by the coordinator or log in development board by PC machine. The ARMcortex-A8

6、is adopted as kernel in the system. The system has advantages such as fast operation, low power consumption, small size and can be compatible with a variety of complex peripherals. The Zigbee is a perfect choice for small system, which supports unlimited expansion mode network. By testing, the syste

7、m has realized expected functions.Keywords:intelligenthome;embedded development;Zigbee;sensor;S5PV210目錄前言11 系統(tǒng)整體分析與方案論證21.1 項(xiàng)目方案分析21.1.1項(xiàng)目需求分析21.1.2項(xiàng)目初步方案設(shè)計(jì)21.2 方案論證及器件選型31.2.1 最初方案論證及方案定型31.2.2 項(xiàng)目器件選型32 系統(tǒng)技術(shù)介紹52.1 ZigBee技術(shù)介紹52.1.1 ZigBee技術(shù)簡(jiǎn)介52.1.2 ZigBee技術(shù)特點(diǎn)52.1.3 ZigBee應(yīng)用實(shí)例62.2嵌入式LINUX系統(tǒng)介紹72.2.1 嵌

8、入式技術(shù)介紹72.2.2 嵌入式特點(diǎn)72.2.3 嵌入式應(yīng)用及發(fā)展前景83 系統(tǒng)詳細(xì)設(shè)計(jì)93.1 Zigbee系統(tǒng)軟硬件設(shè)計(jì)93.2 linux嵌入式系統(tǒng)搭建133.2.1 emilib 數(shù)據(jù)通信模塊介紹133.2.2 環(huán)境部署以及eh_server153.2.1 QT登錄界面的制作和移植183.2.1 QT登錄界面的制作和移植214 總結(jié)24參考文獻(xiàn)25致謝26前言21世紀(jì)經(jīng)濟(jì)快速發(fā)展,計(jì)算機(jī)技術(shù)更是取得了驚人的發(fā)展速度,科學(xué)技術(shù)也越來(lái)越多地影響著人們的生活,人們對(duì)自己的衣、食、住、行,提出了更高的要求。智能化無(wú)疑是出現(xiàn)頻率最高的詞匯,如智能手機(jī)、智能汽車、智能交通等等,無(wú)一不體現(xiàn)出人們對(duì)智

9、能化生活的迫切向往。于是,“智能家居”這樣一個(gè)更加貼切人們生活的詞匯被提及出來(lái)?!爸悄芗揖印弊钤缡窃诿绹?guó)康捏狄克州被提出。CityPlace-Building的建成拉開(kāi)了人們對(duì)智能家居項(xiàng)目投入的序幕。近年來(lái)隨著“物聯(lián)網(wǎng)”的發(fā)展,無(wú)論是物聯(lián)網(wǎng)技術(shù)的成熟,還是智能移動(dòng)終端的普及,都使得智能家居獲得了長(zhǎng)足的發(fā)展,智能家居行業(yè)也達(dá)到了以前從未有過(guò)的高度。技術(shù)的成熟、成本的降低、功能的豐富人性化,都使智能家居從原來(lái)的高處不勝寒完成了到“飛入百姓家”的跨越。同時(shí)因?yàn)樾酒渤?、更快、更低耗的方向發(fā)展,于是越來(lái)越多的智能芯片被嵌入到曉得電子商品中,并且添加更多、更好的外設(shè)變成了可能。智能家居系統(tǒng)無(wú)疑變成

10、了最大的受益者之一。本次畢業(yè)設(shè)計(jì)應(yīng)用了三星公司生產(chǎn)的S5PV210芯片,其內(nèi)核cortex-A8 是ARM家族中最高級(jí)系列中的芯片,開(kāi)發(fā)板搭載了十分豐富的外設(shè)資源供開(kāi)發(fā)者使用,并且接口資源豐富。使用串口與Zigbee連接,實(shí)現(xiàn)了信息的交互和控制。通過(guò)Zigbee組網(wǎng)技術(shù),多個(gè)節(jié)點(diǎn)包括火焰節(jié)點(diǎn)、震動(dòng)節(jié)點(diǎn)、濕度節(jié)點(diǎn)、煙霧節(jié)點(diǎn)也可以觸發(fā)警報(bào),發(fā)送到協(xié)調(diào)器,最后反映到開(kāi)發(fā)板中,并在已經(jīng)移植好的QT界面中得以體現(xiàn)。同時(shí)用戶可以通過(guò)PC的應(yīng)用進(jìn)程登陸系統(tǒng),獲取信息并控制繼電器來(lái)實(shí)現(xiàn)遠(yuǎn)程對(duì)家電的控制,雖然離現(xiàn)實(shí)的成熟的智能家居系統(tǒng)無(wú)論是功能上,還是制作上都存在一定差距,但是初步體現(xiàn)出智能家居的思想,達(dá)到展示

11、的效果,并且體現(xiàn)一定的實(shí)用價(jià)值。1 系統(tǒng)整體分析與方案論證1.1 項(xiàng)目方案分析1.1.1項(xiàng)目需求分析結(jié)合現(xiàn)實(shí)生活中的實(shí)際需要,以及現(xiàn)在人們對(duì)智能家居的理解,確定了一下該智能家居項(xiàng)目應(yīng)該實(shí)現(xiàn)的功能,最終定下功能目標(biāo)主要分為四大部分:一、能過(guò)利用Zigbee組網(wǎng)對(duì)家庭內(nèi)的震動(dòng)、聲音、火焰、煙霧進(jìn)行監(jiān)控。二、在開(kāi)發(fā)板中移植QT程序?qū)崿F(xiàn)良好的人機(jī)交互界面。三、能夠?qū)崿F(xiàn)Zigbee協(xié)調(diào)器與開(kāi)發(fā)板之間的交互控制。四、用戶可以通過(guò)GPRS模塊接受來(lái)自開(kāi)發(fā)板匯集的信息,并且實(shí)現(xiàn)反向控制。1.1.2項(xiàng)目初步方案設(shè)計(jì)結(jié)合最初設(shè)定的四大基本功能,以及現(xiàn)在所掌握的知識(shí)能力,初步的構(gòu)建一套設(shè)計(jì)方案如圖1-1所示。Zig

12、ebee協(xié)調(diào)器S5PV210火焰節(jié)點(diǎn)煙霧節(jié)點(diǎn)震動(dòng)節(jié)點(diǎn)聲音節(jié)點(diǎn) GPRS圖1-1 系統(tǒng)設(shè)計(jì)方案1.2 方案論證及器件選型1.2.1 最初方案論證及方案定型由于GPRS模塊后期需要交費(fèi),投入過(guò)大,所以舍棄了該方案。更改了最后用戶交互方式,改為PC機(jī)直接用網(wǎng)線連接,并且可以登錄QT界面,實(shí)現(xiàn)交互。S5PV210Zigbee協(xié)調(diào)器 ZigebeeZigbee節(jié)點(diǎn)同時(shí)為了演示智能家居項(xiàng)目的反控制效果,在Zigbee中加入了繼電器控制白熾燈的小模塊,協(xié)調(diào)器可以接受來(lái)自開(kāi)發(fā)板串口的命令,將遠(yuǎn)處的Zigbee一個(gè)IO管教拉高,通過(guò)繼電器控制白熾燈的開(kāi)關(guān),以此達(dá)到演示控制任意家用電器的功能。最后設(shè)計(jì)方案更改如圖

13、1-2。 繼電器PC機(jī) 白熾燈圖1-2 設(shè)計(jì)方案更改圖1.2.2 項(xiàng)目器件選型Zigbee 組網(wǎng)方面采用了CC2530,采用這款Zigbee的考慮主要是看中了其體積小,重量輕,且引出了全部的IO引腳能夠允許接入豐富的傳感器資源。CC2530使用的是頻率達(dá)到2.4G的全方位天線,地面無(wú)阻礙穩(wěn)定傳輸可以達(dá)到200多米,自動(dòng)重連距離達(dá)到了110米,完全能夠滿足家庭內(nèi)的組網(wǎng)。嵌入式開(kāi)發(fā)平臺(tái),是選用了S5PV210的板子,平臺(tái)內(nèi)核為ARM Cortex-A8高性能處理器,A系列也是現(xiàn)在ARM家族中的最高系列,同時(shí)也是基于ARMV7的體系結(jié)構(gòu),使用精簡(jiǎn)指令集。雖然嵌入式微處理器的體系架構(gòu)如今已經(jīng)非常豐富,

14、包括MCS5196、Intel80x86、MIPS、POWERPC、ARM,但是ARM以其運(yùn)算速度快,體積小,功耗低的特點(diǎn),已經(jīng)在如今的嵌入式移動(dòng)終端設(shè)備中大展拳腳,使它成為移動(dòng)終端設(shè)備中的寵兒。選用S5PV210的開(kāi)發(fā)板,也主要看中了其穩(wěn)定,以及外設(shè)資源豐富的特點(diǎn),更有利于人們?nèi)フJ(rèn)識(shí)了解,進(jìn)而開(kāi)發(fā)嵌入式項(xiàng)目。開(kāi)發(fā)板的溫度傳感器選用的是DS18B20,其體積小且精度高的特點(diǎn)是其常常被選用的原因。接線方便,只需一條IO線即可與未處理前相連,實(shí)現(xiàn)雙向通信。且封裝形式多樣能夠適應(yīng)各種環(huán)境。2 系統(tǒng)技術(shù)介紹2.1 ZigBee技術(shù)介紹2.1.1 ZigBee技術(shù)簡(jiǎn)介現(xiàn)在Zigbee技術(shù)以及成為應(yīng)對(duì)近距

15、離、低復(fù)雜度和低功耗、低成本的雙向通信的佼佼者。其應(yīng)用領(lǐng)域廣泛,特別是一些要求功耗低且對(duì)傳輸距離要求不長(zhǎng)的設(shè)備通信,Zigbee技術(shù)備受青睞。Zigbee這個(gè)名字其實(shí)是來(lái)源于蜜蜂一種用來(lái)傳遞信息的舞蹈,人們形象的將Zigbee的名字賦予了這項(xiàng)通信技術(shù)。之前這項(xiàng)通信技術(shù)也被稱作HomeRF Lite、RF- EasyLink或fireFly無(wú)線電技術(shù)。與CDMA和GSM技術(shù)一樣,Zigbee也是一種無(wú)線的數(shù)據(jù)傳輸技術(shù),雖然無(wú)法像前者一樣發(fā)送視頻數(shù)據(jù),但是其穩(wěn)定性高且成本低廉。ZigBee數(shù)傳模塊可以看做我們生活中的那些移動(dòng)公司建立的基站一樣。然后通過(guò)多個(gè)ZigBee實(shí)現(xiàn)傳輸距離的無(wú)限延長(zhǎng),達(dá)到理

16、想的傳輸距離1。2.1.2 ZigBee技術(shù)特點(diǎn)ZigBee說(shuō)到底是一種可以工作在三個(gè)頻段上的無(wú)線傳輸技術(shù),分別是全球通用的2.4GHz、歐洲支持的868MHz和能在美國(guó)使用的915 MHz3上, 分別能夠達(dá)到最高250kbit/s、20kbit/s和40kbit/s的傳輸速率。作為一種無(wú)線通信技術(shù),ZigBee具有如下優(yōu)點(diǎn)2:(1) 低功耗:Zigbee的技術(shù)特點(diǎn)就是傳輸速度低,因此其對(duì)發(fā)著功率的要求也很低僅為1mW。并且Zigbee能夠?qū)崿F(xiàn)休眠模式,功耗再一次被降低,于是經(jīng)過(guò)測(cè)試,僅一節(jié)5號(hào)電池就可以支持Zigbee工作長(zhǎng)達(dá)半年之久,這是其他通信技術(shù)無(wú)法匹及的。(2)低成本:隨著技術(shù)的成熟

17、現(xiàn)在Zigbee的成本價(jià)大約是8-10元人民幣,這也得益于Zigbee技術(shù)是沒(méi)有專利費(fèi)用的,低成本對(duì)于ZigBee也是一個(gè)重要的指標(biāo)。(3)時(shí)延短:所謂時(shí)延短是指設(shè)備搜索設(shè)備到激活設(shè)備到最后信道接入的總時(shí)間,Zigbee的時(shí)延大約為45ms。因此Zigbee技術(shù)非常適合被用在對(duì)時(shí)延要求苛刻的無(wú)線控制場(chǎng)合(如工業(yè)現(xiàn)場(chǎng))。(4)網(wǎng)絡(luò)容量大:Zigbee可以支持多種組網(wǎng)方式,容量最大的是星形結(jié)構(gòu)最多可以容納256個(gè)設(shè)備, 一片區(qū)域內(nèi)可以同時(shí)最多容納100個(gè)ZigBee網(wǎng)絡(luò), 而且組網(wǎng)靈活。(5)可靠性強(qiáng):如果傳輸過(guò)程中出現(xiàn)問(wèn)題同樣具有重發(fā)機(jī)制。(6)安全度高:ZigBee提供了基于循環(huán)冗余校驗(yàn)(CR

18、C)的數(shù)據(jù)包完整性檢查功能,支持鑒權(quán)和認(rèn)證,采用了AES-128的加密算法,每個(gè)應(yīng)用可以確定其安全屬性的高低3。2.1.3 ZigBee應(yīng)用實(shí)例ZigBee模塊是一種多應(yīng)用在物聯(lián)網(wǎng)無(wú)線數(shù)據(jù)傳輸?shù)慕K端,利用ZigBee網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)無(wú)線數(shù)據(jù)傳輸。如今在物聯(lián)網(wǎng)產(chǎn)業(yè)鏈中Zigbee技術(shù)已經(jīng)被廣泛應(yīng)用,如智能電網(wǎng)、智能交通、智能家居、金融、移動(dòng)POS終端、供應(yīng)鏈自動(dòng)化、工業(yè)自動(dòng)化、智能建筑、消防、公共安全等領(lǐng)域4。2.2嵌入式LINUX系統(tǒng)介紹2.2.1 嵌入式技術(shù)介紹嵌入式系統(tǒng)的核心是嵌入式計(jì)算機(jī)系統(tǒng),由硬件層、中間層、系統(tǒng)軟件層和應(yīng)用軟件層組成。執(zhí)行裝置又被叫做被控對(duì)象,可以接受嵌入式計(jì)算機(jī)系統(tǒng)發(fā)出的

19、控制命令,執(zhí)行所規(guī)定的操作或任務(wù)。執(zhí)行裝置可以很簡(jiǎn)單,如MP3上的菜單鍵,可以切換歌曲;也可以很復(fù)雜,如谷歌眼鏡,上面集成了多個(gè)微小型控制電機(jī)和多種傳感器,從而可以執(zhí)行各種復(fù)雜的動(dòng)作和感受各種狀態(tài)信息.2.2.2 嵌入式特點(diǎn)(1)可裁剪性強(qiáng)??梢愿鶕?jù)功能要求,裁剪設(shè)備功能。(2)實(shí)時(shí)性強(qiáng)。EOS實(shí)時(shí)性一般較強(qiáng),可用于各種設(shè)備控制中。(3)接口統(tǒng)一。提供統(tǒng)一的設(shè)備驅(qū)動(dòng)接口。(4)操作方便、簡(jiǎn)單、提供友好人機(jī)交互界面,追求易學(xué)易用。提供強(qiáng)大的網(wǎng)絡(luò)功能,支持TCP/IP協(xié)議及其他協(xié)議,提供TCP/UDP/IP/PPP協(xié)議支持及統(tǒng)一的MAC訪問(wèn)層接口,為各種移動(dòng)計(jì)算設(shè)備預(yù)留接口。(5)強(qiáng)穩(wěn)定性,弱交互

20、性。嵌入式系統(tǒng)一旦開(kāi)始運(yùn)行就不需要用戶過(guò)多的干預(yù)、這就要負(fù)責(zé)系統(tǒng)管理的EOS具有較強(qiáng)的穩(wěn)定性。嵌入式操作系統(tǒng)的用戶接口一般不提供操作命令,它通過(guò)系統(tǒng)的調(diào)用命令向用戶程序提供服務(wù)。(6)固化代碼。在嵌入式系統(tǒng)中,嵌入式操作系統(tǒng)和應(yīng)用軟件被固化在嵌入式系統(tǒng)計(jì)算機(jī)的ROM中。(7)更好的硬件適應(yīng)性,也就是良好的移植性5。 (8)嵌入式系統(tǒng)和具體應(yīng)用有機(jī)地結(jié)合在一起,嵌入式的升級(jí)換代也是和具體產(chǎn)品同步進(jìn)行,因此嵌入式系統(tǒng)產(chǎn)品一旦進(jìn)入市場(chǎng),具有較長(zhǎng)的生命周期。2.2.3 嵌入式應(yīng)用及發(fā)展前景嵌入式控制期間基本上囊括了生活的方方面面,比如消費(fèi)mp3、手機(jī)、電梯、汽車、數(shù)字電視、微波爐、數(shù)碼相機(jī)、空調(diào)、交換

21、機(jī)、路由器.衛(wèi)星、航天飛機(jī)、月球探測(cè)儀、控制主機(jī),智能監(jiān)控6。計(jì)算機(jī)系統(tǒng)是由硬件和軟件系統(tǒng)組成的,并且軟、硬件均可裁剪的但必須具備最小系統(tǒng)要求7?,F(xiàn)在特別是隨著消費(fèi)電子類產(chǎn)品的智能化,嵌入式的重要突顯了出來(lái)8。3 系統(tǒng)詳細(xì)設(shè)計(jì)3.1 Zigbee系統(tǒng)軟硬件設(shè)計(jì)由于資金有限,無(wú)法購(gòu)置大量的Zigbee模塊,這里采用兩個(gè)Zigbee,并將四個(gè)傳感器搭載到一個(gè)Zigbee模塊上,模擬組網(wǎng)系統(tǒng)。即一個(gè)Zigbee上分別搭載了火焰、震動(dòng)、水滴、聲音傳感器。一個(gè)Zigbee與開(kāi)發(fā)板相連作為協(xié)調(diào)器。然后將寫(xiě)好的程序分別下載到兩個(gè)Zigbee中,這樣實(shí)現(xiàn)了家庭內(nèi)信息收集,以及對(duì)家庭內(nèi)電器的控制。Zigbee程

22、序是獨(dú)立編寫(xiě)和調(diào)試并且通過(guò)串口能夠接受和發(fā)送相關(guān)命令。以下是Zigbee模塊部分代碼的詳解:首先是發(fā)送函數(shù) appSwitch() ; if(basicRfInit(&basicRfConfig)=FAILED) HAL_ASSERT(FALSE); InitSensor(); basicRfReceiveOff(); while (TRUE) pTxData0 = KeyScan(); / 鍵值掃描 if(pTxData0!= 0) basicRfSendPacket(LIGHT_ADDR,pTxData,APP_PAYLOAD_LENGTH) ; halIntOff(); halIntOn

23、(); 這段程序可以說(shuō),是發(fā)送模塊的精華,或者說(shuō)是核心。Appswich()函數(shù)進(jìn)來(lái)之后,首先是一個(gè)錯(cuò)誤返回機(jī)制,如果兩個(gè)Zigbee連接不成功,會(huì)返回fail。連接成功后,Zigbee會(huì)打開(kāi)發(fā)送函數(shù),做好發(fā)送準(zhǔn)備。同時(shí)關(guān)閉接收功能,保證模塊的運(yùn)行速度和穩(wěn)定性。接下來(lái)程序會(huì)進(jìn)入while()循環(huán),只要Zigbee保持連接,發(fā)送模塊就會(huì)一直處準(zhǔn)備在發(fā)送模式或者正在發(fā)送模式。由于使用的是四個(gè)開(kāi)關(guān)量傳感器,這里作為四個(gè)按鍵,不停地對(duì)連接了四個(gè)傳感器的IO關(guān)鍵進(jìn)行按鍵掃描,獲取相應(yīng)的鍵值,并賦值給Pxdata數(shù)組,并使用系統(tǒng)調(diào)用函數(shù)basicRfSendPacket()將信息發(fā)送出去。basicRfS

24、endPacket這個(gè)函數(shù)也是整段程序的核心,只有調(diào)用這個(gè)函數(shù)才能將IO口接收到的數(shù)據(jù)有序的發(fā)送出去,完成信息的遠(yuǎn)程傳輸9。下面再來(lái)看一下接收模塊的核心代碼。 basicRfConfig.myAddr = LIGHT_ADDR; if(basicRfInit(&basicRfConfig)=FAILED) HAL_ASSERT(FALSE); basicRfReceiveOn(); UartInitial(); while (TRUE) while(!basicRfPacketIsReady(); if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, N

25、ULL)0) Delayms1(500); halLedToggle(1); UartSend_String(Lcddata,5); UartSend_String(pRxData,1); UartSend_String(Reddata,2); 這段程序和發(fā)送程序的主體架構(gòu)是一樣的,不過(guò)是使用了調(diào)用函數(shù)basicRfReceive,來(lái)接受發(fā)送函數(shù)發(fā)送過(guò)來(lái)的數(shù)據(jù),同時(shí)初始化了Zigbee模塊的UART1,將來(lái)自發(fā)送模塊的數(shù)據(jù)打包處理后通過(guò)串口發(fā)送出去,并可以通過(guò)超級(jí)終端看到所接收到的數(shù)據(jù),通過(guò)接受到的具體數(shù)據(jù)查看到底是觸發(fā)了什么節(jié)點(diǎn),觸動(dòng)警報(bào)。下圖3-1為超級(jí)終端接受傳感器信號(hào)的數(shù)據(jù)10。圖3-

26、1 超級(jí)終端截圖同時(shí)Zigbee也可以接受來(lái)自超級(jí)終端的數(shù)據(jù)(在這里超級(jí)終端作為開(kāi)發(fā)板的一個(gè)替代品),如圖3-2在超級(jí)終端發(fā)送ledon 命令,Zigbee的一個(gè)IO管教被拉高,led燈亮發(fā)送ledoff,led燈滅如圖3-2。 圖3-2 Zigbee控制效果圖Zigbee的接收終端數(shù)據(jù)程序其實(shí)也非常簡(jiǎn)單,是使用串口中斷來(lái)做的,即只要串口檢測(cè)收有數(shù)據(jù)接收,就會(huì)產(chǎn)生中斷,注冊(cè)標(biāo)志位,然后拉高相應(yīng)管腳,實(shí)現(xiàn)對(duì)led燈的控制。代碼如下:#pragma vector = URX0_VECTOR_interrupt void UART0_ISR(void) URX0IF = 0; if(U0DBUF 0

27、) P1_4=P1_4; temp = U0DBUF; 整個(gè)Zigbee 模塊的程序架構(gòu),如圖3-3。 圖3-3 Zigbee代碼工程結(jié)構(gòu)圖3.2 linux嵌入式系統(tǒng)搭建首先需要說(shuō)明的是本次嵌入系統(tǒng),是基于前人原有的開(kāi)源代碼消化吸收后,然后添加的驅(qū)動(dòng)代碼最終實(shí)現(xiàn)的,這里也是充分的發(fā)揮了linux嵌入式的開(kāi)源性。本嵌入式系統(tǒng)結(jié)構(gòu)主要分為了三大塊,分別是:1、emilib : 抽象數(shù)據(jù)通信。2、Hmanager:基于QT的PC端圖形控制程序。3、Bdehmanager:基于QT的開(kāi)發(fā)板圖形控制程序。3.2.1 emilib 數(shù)據(jù)通信模塊介紹1、Emilib工作原理消息接受者首先需要完成注冊(cè),所謂

28、注冊(cè)即通過(guò)socket連接本地emi_core進(jìn)程,將本進(jìn)程進(jìn)程號(hào)以及要注冊(cè)的消息發(fā)送給emi_core。Emi_core收到消息后,需要在內(nèi)部表記錄了(消息號(hào),進(jìn)程號(hào))之間的關(guān)系。每一個(gè)注冊(cè)消息的進(jìn)程只要成功注冊(cè)了,就會(huì)在表里新增一個(gè)項(xiàng),記錄該進(jìn)程注冊(cè)的消息號(hào)和進(jìn)程號(hào)。然后當(dāng)發(fā)送端給emi_core發(fā)消息時(shí),emi_core會(huì)把消息好在表里進(jìn)行匹配,如果是正常情況,那么其會(huì)找到注冊(cè)進(jìn)程的進(jìn)程號(hào),此時(shí)emi_core會(huì)給該進(jìn)程發(fā)送一個(gè)USER2信號(hào),同時(shí)附加數(shù)據(jù)放到共享的內(nèi)存中。而接受進(jìn)程接收到這個(gè)信號(hào)之后,就會(huì)觸發(fā)信號(hào)處理函數(shù),其實(shí)這個(gè)原理個(gè)人認(rèn)為其實(shí)完全可以理解為一個(gè)中斷向量表的工作原理,

29、不過(guò)它可以同時(shí)處理多個(gè)進(jìn)程。最后在信號(hào)處理函數(shù)內(nèi)部從emi_core提供的共享內(nèi)存中讀取發(fā)送端發(fā)來(lái)的信息。如此就完成了一次數(shù)據(jù)通信。2、Emilib的使用方法首先來(lái)介紹下,剛才提到的emi_core。emi_core相當(dāng)于一個(gè)中介或者說(shuō)就是一個(gè)電話接線員,主要完成了兩部分的工作。首先是接注冊(cè)類的消息,并把消息和一個(gè)函數(shù)綁定。然后是接收發(fā)送類型消息,查找到已經(jīng)被綁定的消息函數(shù)對(duì),匹配出相同的消息,最后運(yùn)行對(duì)應(yīng)的函數(shù)。Emilib中包含了libemi.so庫(kù)。主要工作就是提供進(jìn)程需要的函數(shù),來(lái)實(shí)現(xiàn)具體功能,接收進(jìn)程調(diào)用庫(kù)中的函數(shù)進(jìn)行消息好和函數(shù)的綁定注冊(cè),而發(fā)送進(jìn)程調(diào)用庫(kù)中的函數(shù)進(jìn)行消息發(fā)送。下面

30、列出的是libmi.so中常用的函數(shù)(1)初始化函數(shù) Int emi_ini(void);這絕對(duì)是最常用也是最重要的函數(shù),因?yàn)樗仨氃谧?cè)消息之前運(yùn)行,但是每個(gè)進(jìn)程只需要運(yùn)行一次。(2)消息注冊(cè)函數(shù)Int emi_msg_register_exclusice(eu32msg,emi_func func);返回值為0時(shí)代表成功,負(fù)數(shù)代表失敗,兩個(gè)參數(shù)分別代表要注冊(cè)的消息號(hào),和一個(gè)指向結(jié)構(gòu)體的結(jié)構(gòu)體指針,當(dāng)然要求其提前被寫(xiě)好。(3)發(fā)送消息函數(shù) Int emi_msg_send_highlevel_blockreturn(char * ipaddr, int msgnum, int send_si

31、ze, void *send_data, int ret_size,void *ret_data,eu32 cmd)返回值為0代表發(fā)送成功,負(fù)數(shù)代表失敗。參數(shù)ipaddr表示接受平臺(tái)的ip。參數(shù)msgnum表示要發(fā)送的消息號(hào)。參數(shù)send_size以及send_data分別代表附加數(shù)據(jù)的長(zhǎng)度和附加數(shù)據(jù)的首地址,如果沒(méi)有那么就應(yīng)該設(shè)置為0和NULL。參數(shù)ret_size和ret_data表示返回?cái)?shù)據(jù)的大小和首地址。參數(shù)cmd,表示發(fā)送者要發(fā)送給接受者的命令。3、Emilib的測(cè)試首先需要進(jìn)入emitest目錄,先建兩個(gè)emi測(cè)試源文件分別用于發(fā)送和接受,來(lái)模擬通信過(guò)程。# cd emitest#

32、 vim sender.c# vim receiver.c以下是在實(shí)驗(yàn)中對(duì)于emilib所做測(cè)試的一部分核心代碼。添加到sender.c源文件的核心代碼。 char hello20=hello;char buf5=0;emi_msg_send_highlevel_blockreturn(,6,hello,4,buf,5); printf(%sn,buf);添加到receiv.c源文件的核心代碼:int test_func(struct emi_msg *msg)printf(msg-cmd %d, msg-data %sn,msg-cmd, msg-data);return

33、emi_msg_prepare_return_data(msg,hel,4);Main函數(shù)代碼如下:emi_init();emi_msg_register_exclusive(,test_func);while(1) sleep(1); 然后編譯sender.c以及receiver.c: # gcc receiver.c -o receiver -L./bs/pclib/lib -lemi -I./libs/pclib/include # gcc sender.c -o sender -L./libs/pclib/lib -lemi -I./libs/pclib/include 編譯完成之后生

34、成了可執(zhí)行文件接著運(yùn)行測(cè)試,首先啟動(dòng)PC機(jī)的emi_core程序, 然后分別在兩個(gè)終端啟動(dòng)sender和receiver。 # sudo ./libs/pclib/bin/emi_core -d (一個(gè)終端)# ./reciever (另一終端)# ./sender 最后的運(yùn)行結(jié)果為運(yùn)行結(jié)果。 在發(fā)送終端會(huì)顯示: hello在接收終端會(huì)顯示: msg-cmd 5, msg-data hello證明收發(fā)消息成功。3.2.2 環(huán)境部署以及eh_server下面來(lái)大體介紹下eh_server,eh_serve主要實(shí)現(xiàn)了兩個(gè)功能,即便利指定的文件夾,找到以.so結(jié)尾的文件,并生成一個(gè)列表,調(diào)用.So文

35、件里的函數(shù)。然后我們根據(jù)實(shí)際操作來(lái)編譯和實(shí)現(xiàn)eh_server1、在用戶home目錄下新建空項(xiàng)目目錄ehome。 # mkdir ehome 2、將原項(xiàng)目目錄中的rootfs復(fù)制到ehome下。 # cp -av user/rootfs ehome/3、修改rootfs/etc/init.d/rcS, 刪除mount /dev/mtdblock6一行。4、在 ehome/rootfs/home目錄內(nèi)新建bin,etc,lib,receiver,trigger等目錄。 # cd ehome/rootfs/home/ # mkdir -p bin etc lib receiver triggerb

36、in將存放開(kāi)發(fā)板項(xiàng)目應(yīng)用程序eh_server,emi_core等程序;etc存放項(xiàng)目相關(guān)腳本以及配置文件;lib存放項(xiàng)目運(yùn)行庫(kù);receiver,trigger存放eh_server所需插件。5、在rootfs/home/etc目錄下新建空腳本文件rcS,用于將來(lái)自啟動(dòng)配置,并將rcS配置成可執(zhí)行屬性。 # vi rootfs/home/etc/rcS修改該rcS文件,添加export LD_LIBRARY_PATH=/home/lib以及export PATH=$PATH:/home/bin # export LD_LIBRARY_PATH=/home/lib # export PATH=

37、$PATH:/home/bin # sudo chmod 755 rcS6、復(fù)制原項(xiàng)目目錄的emilib-read-only到新項(xiàng)目目錄下: # cd # cp -av user/emilib-read-only ehome/ 7、進(jìn)入到該目錄,運(yùn)行命令編譯開(kāi)發(fā)板以及PC機(jī)使用的emilib函數(shù)庫(kù): # cd ehome/emilib-read-only # make -f Makefile.arm clean # make -f Makefile.arm # make -f Makefile.arm install # make -f Makefile.pc clean # make -f

38、Makefile.pc #mkdir-p ./libs/pclib/bin ./libs/pclib/include ./libs/pclib/lib # make -f Makefile.pc install此時(shí),新項(xiàng)目根目錄的libs子目錄下就包含了PC和開(kāi)發(fā)板上emilib相關(guān)文件。8、進(jìn)入新項(xiàng)目根目錄,新建eh_server相關(guān)文件夾。# cd /ehome/# mkdir -p eh_server eh_server/plugins開(kāi)發(fā)板服務(wù)程序以及相關(guān)插件會(huì)被放置在該目錄下。9、復(fù)制libs/bin/下的emi_core到開(kāi)發(fā)板根文件系統(tǒng)中。 # cp libs/bin/emi_c

39、ore rootfs/home/bin/ # cp libs/lib/libemi.so rootfs/home/lib到此為止我們具體完成了eh_server的實(shí)現(xiàn),接下來(lái)需要對(duì)具體功能進(jìn)行測(cè)試1、啟動(dòng)NFS, 掛在/ehome/rootfs目錄下的根文件系統(tǒng), 因此需要修改/etc/exports文件。 # sudo vim /etc/exports在該文件中添加一行內(nèi)容:/home/workdir/ehome/rootfs *(rw,no_root_squash,no_subtree_check,sync)2、重啟NFS服務(wù): # /etc/init.d/nfs-kernel-serve

40、r restart3、啟動(dòng)開(kāi)發(fā)板,修改開(kāi)發(fā)板的啟動(dòng)選項(xiàng), 使用原有內(nèi)核啟動(dòng)nfs根文件系統(tǒng)。 tarena # setenv bootcmd tftp c zImage; bootm c tarena # setenv bootargs noinitrd root=/dev/nfs console=ttySAC0 init=/linuxrc nfsroot=:/home/tarena/workdir/tools/ehome/rootfs ip=::::eth0:on

41、 tarena # saveenv4、第二天的實(shí)驗(yàn)代碼復(fù)制到該項(xiàng)目源碼中: # cp -av /user/emitest/ /ehome/ # cd /ehome/emitest/5、將receiver.c源文件編譯使用arm-linux-gcc重新編譯: # arm-linux-gcc receiver.c -o receiver -L./libs/lib -lemi -I./libs/include6、將receiver文件復(fù)制到rootfs/home/bin目錄下, 該目錄對(duì)應(yīng)開(kāi)發(fā)板的/home/bin。 # cp -av receiver /ehome/rootfs/home/bin7

42、、在開(kāi)發(fā)板中一次運(yùn)行emi_core和receiver程序: (開(kāi)發(fā)板)# source /home/etc/rcS (開(kāi)發(fā)板)# emi_core -d (開(kāi)發(fā)板)# receiver8、利用修改PC機(jī)的sender.c文件,將原來(lái)IP地址字符串修改成開(kāi)發(fā)板IP地址, 然后按照PC的編譯方法進(jìn)行編譯,然后利用編譯完成的sender程序進(jìn)行測(cè)試。sender.c代碼修改后如下: emi_msg_send_highlevel_blockreturn(,6,hello,4,buf, 5);修改后,重新編譯一下,過(guò)程如下:# gcc sender.c -o

43、 sender -L./libs/pclib/lib -lemi -I./libs/pclib/include編譯完后,運(yùn)行該程序:# sender9、開(kāi)發(fā)板看到的現(xiàn)象應(yīng)該和PC機(jī)收發(fā)程序看到的現(xiàn)象一致, 表示開(kāi)發(fā)環(huán)境搭建完成。3.2.1 QT登錄界面的制作和移植1、QT界面制作準(zhǔn)備工作: 在項(xiàng)目根目錄下的rootfs/home/etc下新建passwd文件, 用來(lái)保存初始密碼。實(shí)現(xiàn)Qt的登陸界面ui類,繼承QDialog類。包含一個(gè)取消按鈕,一個(gè)確定按鈕,一個(gè)ip地址輸入框和一個(gè)密碼輸入框。給確認(rèn)按鈕編寫(xiě)槽函數(shù),從密碼輸入框收集用戶輸入的密碼,從ip地址輸入框收集用戶輸入的IP地址,將IP地

44、址保存為全局量,其他消息都使用此IP通信。同時(shí)給開(kāi)發(fā)板發(fā)送登陸消息, 將密碼發(fā)送給開(kāi)發(fā)板。編寫(xiě)開(kāi)發(fā)板插件,等待開(kāi)發(fā)板比對(duì)后的認(rèn)證結(jié)果。開(kāi)發(fā)板受到Qt傳來(lái)的密碼,跟預(yù)先保存在本地文件中的密碼進(jìn)行比較,如果一致, 則說(shuō)明認(rèn)證成功,將成功結(jié)果返回給Qt程序,否則認(rèn)證失敗。Qt程序如果收到了認(rèn)證成功,調(diào)用 QDialog:accept()函數(shù)返回。修改main.cpp程序: LoginDialog w; w.show(); if (w.exec() = QDialog:Accepted) MainWindow mainwindow; mainwindow.show(); return a.exec()

45、; else return -1; 2、QT的移植(1) 在項(xiàng)目源碼目錄下新建qtlib文件夾,將build-qt.tar.gz和build-tslib.tar.gz解壓到該文件夾內(nèi),此時(shí)文件夾中會(huì)多出兩個(gè)子文件夾:build-qt build-tslib。(2)使用root身份修改/usr/share/qt4/mkspecs/qws/linux-arm-g+/qmake.conf文件內(nèi)容。在load(qt_config)之前添加兩行: QMAKE_INCDIR_QT = /home/tarena/ehome/qtlib/build-qt/include QMAKE_LIBDIR_QT=/ho

46、me/tarena/ehome/qtlib/build-qt/lib /home/ehome/qtlib/build-tslib/lib/(3)進(jìn)入到pc目錄下的qt源碼目錄內(nèi), 復(fù)制原有的qt項(xiàng)目工程文件為,編輯該文件,修改INCLUDEPATH以及LIBS兩行為: INCLUDEPATH += ././libs/include/ ././eh_server/ LIBS += -L ././libs/lib/ -lemi -lts 同時(shí)添加:DEFINES += ONBOARD 修改原來(lái)的TARGET變量:TARGET = bdehmanager 該變

47、量決定了編譯完成的程序叫什么名字。(4)在當(dāng)前目錄下運(yùn)行: qmake -spec /usr/share/qt4/mkspecs/qws/linux-arm-g+/ (5)此時(shí)會(huì)生成開(kāi)發(fā)板qt中使用的Makefile,運(yùn)行make命令生成開(kāi)發(fā)板qt界面程序。(6)由于開(kāi)發(fā)板環(huán)境與PC環(huán)境的不同, 開(kāi)發(fā)板程序雖然可以直接編譯運(yùn)行, 體驗(yàn)很差。 因此, 需要修改Qt源代碼, 修改main.cpp:#ifdef ONBOARD strcpy(global_ip,);MainWindow mainwindow; mainwindow.setWindowFlags(Qt:

48、FramelessWindowHint);mainwindow.show();mainwindow.setGeometry(0,0,800,480);imFrame *im=new imFrame;QWSServer:setCurrentInputMethod(im);#else LoginDialog w;w.show();if (w.exec() = QDialog:Accepted) MainWindow mainwindow;mainwindow.show(); return a.exec(); else return -1;#endif到此為止項(xiàng)目的架構(gòu)已經(jīng)基本上搭建完成,下面需要對(duì)

49、整個(gè)項(xiàng)目進(jìn)行整合3.2.1 QT登錄界面的制作和移植1、準(zhǔn)備工作。自啟動(dòng)腳本的實(shí)現(xiàn):由于之前一直是NFS環(huán)境下調(diào)試程序, 程序都是手動(dòng)啟動(dòng)的, 項(xiàng)目的整合階段需要讓程序能夠自啟動(dòng)。編輯新項(xiàng)目根目錄下的rootfs/home/etc/rcS文件, 刪除原來(lái)的內(nèi)容, 修改成:source /home/etc/profileif -n ifconfig|grep eth0 then ifconfig eth0 /bin/cat /home/etc/netconfigifconfig lo upfind /home/modules/ -name *ko -exec insmod ; /home/bin

50、/emi_core -d/home/bin/eh_server&/home/bin/bdehmanager -qws & 由于開(kāi)發(fā)板在啟動(dòng)的時(shí)候需要有一個(gè)默認(rèn)IP地址, 因此, 結(jié)合上述腳本,需要在開(kāi)發(fā)板的/home/etc/目錄下建立一個(gè)名為netconfig的文件, 將想要設(shè)置的默認(rèn)IP地址保存到該文件中:比如, 假設(shè)開(kāi)發(fā)板默認(rèn)IP地址為:# echo /ehome/rootfs/home/etc/netconfig同時(shí),開(kāi)發(fā)板使用的驅(qū)動(dòng)程序也需要在自啟動(dòng)時(shí)加載,因此結(jié)合上述腳本,需要把驅(qū)動(dòng)程序存放到開(kāi)發(fā)板/home/modules/目

51、錄下。驅(qū)動(dòng)程序復(fù)制完后, 準(zhǔn)備工作就完成了。2、ramdisk映像制作。使用普通用戶身份在新項(xiàng)目根目錄下建立images文件夾: # mkdir images如果需要生成映像,不采用NFS形式調(diào)試程序,需要將開(kāi)發(fā)板中的根文件系統(tǒng)與應(yīng)用程序文件系統(tǒng)分開(kāi)制作。 同時(shí)為了保證在開(kāi)發(fā)板中實(shí)際運(yùn)行的時(shí)候, 根文件系統(tǒng)能夠成功掛載應(yīng)用程序文件系統(tǒng),根文件系統(tǒng)的啟動(dòng)腳本需要添加一行。打開(kāi)rootfs/etc/init.d/rcS文件,將mount /dev/mtdblock6 /home添加到exec /home/etc/rcS之前。使用root身份運(yùn)行如下命令: # dd if=/dev/zero of=

52、images/ramdisk.img count=8 bs=1024k # mkfs.ext2 images/ramdisk.img # mkdir -p /tmp/tmpram # mount images/ramdisk.img /tmp/tmpram # cp -a rootfs/* /tmp/tmpram/ # rm -rf /tmp/tmpram/home/* # umount /tmp/tmpram 這樣就可以生成根文件系統(tǒng)映像。3、生成應(yīng)用程序文件系統(tǒng)映像。首先復(fù)制工具: # mkdir p /ehome/tools/ # cp /user/tools/mkyaffs2image

53、 /ehome/tools然后使用該工具將rootfs的home目錄下的程序生成yaffs文件系統(tǒng)映像: #/ehome/tools/mkyaffs2image /ehome/rootfs/home/ images/app.img # chmod 666 images/app.imgapp.img就是的應(yīng)用程序文件系統(tǒng)。4、燒寫(xiě)配置。按照設(shè)計(jì),這個(gè)文件系統(tǒng)映像需要被燒寫(xiě)到開(kāi)發(fā)板mtdblock6對(duì)應(yīng)的分區(qū)中才能在啟動(dòng)時(shí)被自動(dòng)掛載到開(kāi)發(fā)板/home下。于是需要修改uboot的啟動(dòng)選項(xiàng):(uboot)#setenv bootargs root=/dev/ram0 console=ttySAC0, initrd=0x 0,0x mtdparts=s5pv210-nand:(bios)1m(params),1m(logo),5m(kernel),8m(data),8m(ramdisk)ro

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論