<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計(jì)應(yīng)用 > 基于無線傳感器網(wǎng)絡(luò)的橋梁監(jiān)測系統(tǒng)研究

          基于無線傳感器網(wǎng)絡(luò)的橋梁監(jiān)測系統(tǒng)研究

          作者: 時(shí)間:2012-12-05 來源:網(wǎng)絡(luò) 收藏

          4 TinyOS 的與移植

          TinyOS 是由UCBerkeley 開發(fā)的一種組件的開源嵌入式操作,其應(yīng)用領(lǐng)域是。在中, 節(jié)點(diǎn)有兩個(gè)突出的特點(diǎn): 一是并發(fā)性強(qiáng), 可能存在多個(gè)需要同時(shí)執(zhí)行的邏輯控制; 二是節(jié)點(diǎn)的模塊化程度高。這兩個(gè)特點(diǎn)給設(shè)計(jì)面向傳感器的操作提出了新的挑戰(zhàn)。針對這些特點(diǎn), 加州大學(xué)伯克利分校開發(fā)出了適合傳感網(wǎng)絡(luò)的組件化編程語言nesC 和微型操作TinyOS, 引入了輕量級線程( lightweight thread) 、主動消息( active message) 、事件驅(qū)動( event-driven) 模式、 組件化編程( componentbased programming ) 等技術(shù), 很好地利用了傳感器節(jié)點(diǎn)的有限資源。目前這個(gè)系統(tǒng)被國內(nèi)外大學(xué)和機(jī)構(gòu)廣泛應(yīng)用。

          4.1 TinyOS 的組件模型

          TinyOS 組件化編程語言nesC 實(shí)現(xiàn), 將模塊化/組件化編程同事件驅(qū)動的執(zhí)行聯(lián)系起來??梢詫inyOS 及在其上運(yùn)行的應(yīng)用程序看成是由許多功能獨(dú)立且相互有聯(lián)系的軟件組件構(gòu)成, 一個(gè)組件提供一些接口。接口中包含命令和事件,命令是接口具有的功能,接口使用者可以通過關(guān)鍵字call 來調(diào)用命令; 事件是接口具有事件通告的能力, 可以通過關(guān)鍵字signal 來通知使用者事件發(fā)生, 事件在接口使用者的組件中實(shí)現(xiàn)。組件又分為模塊文件(module)和配線文件(configuration)兩種。模塊文件具體實(shí)現(xiàn)接口中的命令和事件; 配線文件則完成組件之間的接口連接。一般一個(gè)應(yīng)用程序,只能有一個(gè)頂層配件。

          4.2 TinyOS 的調(diào)度機(jī)制

          TinyOS 的調(diào)度機(jī)制比較簡單, 按照輕量級線程( 即任務(wù)) 以FIFO 的方式調(diào)度, 線程之間不允許強(qiáng)占; 當(dāng)有硬件中斷到來時(shí),可以打斷用戶的輕量級線程, 對硬件中斷進(jìn)行快速響應(yīng)。任務(wù)可以調(diào)用下層命令, 可以向上層發(fā)信號通知事件發(fā)生, 也可以在組件內(nèi)部調(diào)度其他任務(wù)。任務(wù)的原子性, 使得TinyOS 只需要維護(hù)一個(gè)任務(wù)堆棧就可以了。這種方法在資源極其有限的傳感器節(jié)點(diǎn)中顯得十分有效。TinyOS 是事件驅(qū)動型的操作系統(tǒng)。當(dāng)一個(gè)任務(wù)完成后, 就可以觸發(fā)一個(gè)事件, TinyOS就會自動調(diào)用相應(yīng)的處理函數(shù)。因此, CPU 只有在有事件觸發(fā)時(shí)才喚醒處理, 其余時(shí)間都可以處于睡眠狀態(tài), 從而可以大大降低系統(tǒng)的能耗。

          4.3 TinyOS 通信機(jī)制

          TinyOS 的通信方式采用主動消息模型(AM)。AM是面向消息通信的一種通信模式, 它是基于地址的, 并且支持信息確認(rèn)和分發(fā)。為了在應(yīng)用層實(shí)現(xiàn)更加復(fù)雜的通信協(xié)議, 需要把主動消息模型實(shí)現(xiàn)為TinyOS 的一個(gè)基本通信組件, 這樣既可以屏蔽下層不同的通信硬件, 也可以為上層提供統(tǒng)一的通信原語, 方便應(yīng)用開發(fā)。當(dāng)數(shù)據(jù)通過網(wǎng)絡(luò)到達(dá)傳感器節(jié)點(diǎn)時(shí), 首先要進(jìn)行緩存, 然后主動消息的分發(fā)(dispatch)層把緩存中的消息交給上層處理。因?yàn)閚esC不支持動態(tài)分配內(nèi)存, 所以要求每個(gè)應(yīng)用程序在消息被釋放以后, 必須能返回一塊未用的內(nèi)存, 來接收下一個(gè)將要到來的消息。因此, 主動消息通信組件需要維持一個(gè)額外的消息緩存。在TinyOS 中, 每次消息發(fā)送后, 接收方都會發(fā)送一個(gè)同步的確認(rèn)消息。為了節(jié)省開銷,在主動消息的最底層生成確認(rèn)包,并且每次僅僅發(fā)送一個(gè)隨機(jī)數(shù)序列作為確認(rèn)。

          4.4 TinyOS的移植處理

          TinyOS 操作系統(tǒng)的移植主要考慮硬件處理器是否支持對nesC(gcc) 的編譯, 以及對TinyOS 中與硬件平臺相關(guān)部分的處理。我們選用Atmel 公司的AVR 芯片作為微處理器, gcc對AVR 有良好的支持, 因此不需要做nesC 從GCC 里的解耦。TinyOS 有三層硬件抽象結(jié)構(gòu)(HAA) , 分別為硬件描述層(HPL) 、硬件改編層(HAL) 和硬件接口層(HIL) 。分層結(jié)構(gòu)和組件化描述提高了可移植性, 并簡化了應(yīng)用層軟件的開發(fā)。越底層的跟硬件越相關(guān), 上層的組件調(diào)用下層提供的接口。HPL層主要是對硬件資源的描述, 通過內(nèi)存或I/O 映射端口與硬件建立通訊。它隱藏了硬件的復(fù)雜性, 為上層提供顯示硬件能力的接口; HAL則是在HPL基礎(chǔ)上對硬件特定功能的封裝, 是與硬件相關(guān)的功能函數(shù)接口; HIL則是與硬件無關(guān)的功能函數(shù)接口。

          據(jù)上分析,移植時(shí), 只需要根據(jù)我們硬件平臺的資源修改HPL和HAL開頭的文件即可, 在HPL文件中加入硬件資源的描述, 在HAL文件中修改硬件資源的功能函數(shù)。

          5 網(wǎng)絡(luò)通信協(xié)議

          目前, 通信協(xié)議特別是鏈路層的MAC協(xié)議和網(wǎng)絡(luò)層的路由協(xié)議是傳感網(wǎng)絡(luò)的熱點(diǎn)。針對不同的應(yīng)用, 研究人員提出了不同的MAC 協(xié)議和路由協(xié)議, 這些協(xié)議各有長處。本系統(tǒng)在網(wǎng)絡(luò)層采用CTP(Collection Tree Protocol) 路由協(xié)議, 鏈路層則采用LEEP( Link Es timate ExchangeProtocol)協(xié)議來計(jì)算雙向鏈路質(zhì)量, 以給上層的路由選擇提供基礎(chǔ)。通訊協(xié)議抽象層結(jié)構(gòu)如圖2。

          系統(tǒng)通訊協(xié)議層結(jié)構(gòu)

          圖2 系統(tǒng)通訊協(xié)議層結(jié)構(gòu)

          光纖傳感器相關(guān)文章:光纖傳感器原理


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();