複製鏈接
請複製以下鏈接發送給好友

tinyos

鎖定
Tiny OS是UC Berkeley(加州大學伯克利分校)開發的開放源代碼操作系統,專為嵌入式無線傳感網絡設計,操作系統基於構件(component-based)的架構使得快速的更新成為可能,而這又減小了受傳感網絡存儲器限制的代碼長度。Tiny OS是一個具備較高專業性,專門為低功耗無線設備設計的操作系統,主要應用於傳感器網絡、普適計算、個人局域網、智能家居和智能測量等領域。
外文名
Tiny OS
類    型
操作系統

tinyos特性

Tiny OS的如下特性決定了其在傳感器網絡中的廣泛應用,使其在物聯網中佔據了舉足輕重的地位。
  • 相對於主流操作系統成百上千MB的龐大體積來説,Tiny OS顯得十分迷你,只需要幾KB的內存空間和幾十KB的編碼空間就可以運行的起來,而且功耗較低,特別適合傳感器這種受內存、功耗限制的設備。
  • Tiny OS本身提供了一系列的組件,包括:網絡協議、分佈式服務器、傳感器驅動及數據識別工具等,使用者可以通過簡單方便的編制程序將多個組件連接起來,用來獲取和處理傳感器的數據並通過無線電來傳輸信息。
  • Tiny OS在構建無線傳感器網絡時,通過一個基地控制枱控制各個傳感器子節點,聚集和處理各子節點採集到的信息。Tiny OS只要在控制枱發出管理信息,然後由各個節點通過無線網絡互相傳遞,最後達到協同一致的目的。

tinyos應用

Tiny OS是一個開源的操作系統,所有人都可查看和修改Tiny OS的源代碼,參與到Tiny OS及配套軟件的開發,並應用到商業和工業領域中。在眾多參與者的協作下,Tiny OS於2012年發佈了的V2.1.2版本,並在2013年將Tiny OS上線到Github,供全球的參與者下載,平均下載量已經高達3.5萬次/年。
Tiny OS已經有很多產品,例如:用於神經信號接收、調解、顯示的接收器、用於能源領域中的石油和氣體監控、用於傳感網絡的控制和優化、用於無線傳感網絡進行健康監測等。

tinyos組成

tinyos tinyos
TinyOS的構件包括網絡協議、分佈式服務器、傳感器驅動及數據識別工具。其良好的電源管理源於事件驅動執行模型,該模型也允許時序安排具有靈活性。TinyOS已被應用於多個平台和感應板中。
◆TinyOS操作系統、庫和程序服務程序是用nesC寫的
◆nesC是一種開發組件式結構程序的語言
◆nesC是一種C語法風格的語言,但是支持TinyOS的併發模型,以及組織、命名和連接組件成為健壯的嵌入式網絡系統的機制
◇nesC應用程序是由有良好定義的雙向接口的組件構建的
◇nesC定義了一個基於任務和硬件事件處理的併發模型,並能在編譯時檢測數據流組件

tinyos規範

◇nesC應用程序由一個或多個組件連接而成
◇一個組件可以提供或使用接口
●組件中command接口由組件本身實現
●組件中event接口由調用者實現
●接口是雙向的,調用command接口必須實現其event接口

tinyos實現

◇modules
●包含應用程序代碼,實現接口
◇configurations
tinyos tinyos
●裝配模塊,連接模塊使用的接口到其提供者
●每個nesC應用程序都有一個頂級configuration連接內部模塊

tinyos模型

◆TinyOS只能運行單個由所需的系統模塊和自定義模塊構成的應用程序
◆兩個線程
◇任務
●一次運行完成,非搶佔式
◇硬件事件處理
●處理硬件中斷
tinyos tinyos
●一次運行完成,搶佔式
●用於硬件中斷處理的command和event必須用async關鍵字聲明

tinyos流程

(race conditions)
◇nesC要避免任務排他性訪問共享數據
◇nesC要避免所有共享數據訪問都通過原子語句
◇nesC在編譯過程中要檢測數據流,但可能誤報,可用norace關鍵字聲明不檢測,但對其使用
應格外小心
Module of Sense Application
SenseM. nc
------------------------------------------------
|module SenseM {
| provides {
| interface StdControl;
| }
| uses {
| interface Timer;
| interface ADC;
| interface StdControl as ADCControl;
| interface Leds;
| }
|}
◆提供StdControl接口
◆使用Timer、ADC、StdControl、Leds接口
◇nesC程序中可以使用同一個接口的多個實例
●interface StdControl as ADCControl
●ADCControl是StdControl的實例
◇不提供實例名,則實例名與接口名相同
●interface ADC相當於interface ADC as ADC
Configuration of Sense Application
Sense. nc
|configuration Sense {
| // this module does not provide any interface
|}
|implementation
|{
| components Main, SenseM, LedsC, TimerC, Photo;
|
| Main.StdControl -> SenseM;
| Main.StdControl -> TimerC;
|
| SenseM.ADC -> Photo;
| SenseM.ADCControl -> Photo;
| SenseM.Leds -> LedsC;
| SenseM.Timer -> TimerC.Timer[unique("Timer")];
|}
◆不提供任何接口
◆使用Main、SenseM、LedsC、TimerC、Photo模塊
◆連接Main.StdControl接口到SenseM.StdControl和TimerC.StdControl
◆連接SenseM.ADC接口到Photo.ADC
◆連接SenseM.ADCControl到Photo.StdControl
◆參數化接口
◇組件可以使用相同接口的不同實例,並分別為其命名
provides {
interface StdControl as fooControl;
interface StdControl as barControl;
}
◇參數化接口允許組件通過運行時或編譯時參數值使用多個該接口的實例
provides interface Timer[uint8_t id];
◇每個Timer可以有256實例,每個實例對應一個8位數字
◇unique、uniqueCount函數
●產生一個唯一的8位數字與參數關聯。
●unique("Timer")是產生一個唯一的數字與Timer串關聯;unique("Timer")與unique("MyTimer")可能產生相同的數;
●uniqueCount返回與參數關聯的數的個數
執行應用程序通用後台進程 任務的建立和調度 TinyOS提供任務和硬件事件處理兩級調度體系 async關鍵字聲明硬件事件處理的command和event 可以在任意時刻運行 做少量工作,要快速完成 任務用於處理複雜操作,比如後台數據處理,可以被硬件事件處理程序搶佔 任務的定義語法 task void taskname() { ... }
taskname是給任務取的符號名字 任務不能有參數,必須返回void 分派任務語法 post taskname();
可以在command中提交任務 可以在event中提交任務 可以在Task中提交任務 post後的任務被放到一個內部FIFO任務隊列 TinyOS學習筆記(4)
CntToLedsAndRfm configuration
CntToLedsAndRfm. nc
----------------------------------------------------------
|configuration CntToLedsAndRfm {
|}
|implementation {
| components Main, Counter, IntToLeds, IntToRfm, TimerC;
|
| Main.StdControl -> Counter.StdControl;
| Main.StdControl -> IntToLeds.StdControl;
| Main.StdControl -> IntToRfm.StdControl;
| Main.StdControl -> TimerC.StdControl;
| Counter.Timer -> TimerC.Timer[unique("Timer")];
| IntToLeds <- Counter.IntOutput;
| Counter.IntOutput -> IntToRfm;
|}
----------------------------------------------------------
◆使用模塊Main、Counter、IntToLeds、IntToRfm和TimerC
◆在Main中初始化Counter、IntToLeds、IntToRfm和TimerC
◆都是標準庫
◆Counter處理Timer.fire()事件
◆IntOutput接口
◇output() Command:有一個16位的參數
◇outputComplete() Event:返回一個result_t
◆IntToLeds:在LED上顯示值的低三位
◆IntToRrm:通過Radio廣播
◆Counter使用IntToLeds和IntToRfm的IntOutput接口
◆箭頭總是由使用者指向提供者
發送消息
◆TinyOS中的radio通信採用Active Message(AM)模型,網絡中的每個包都有一個handler ID,接收結點 會觸發這個ID對應的事件,可以認為這個ID是“端口號”,不同的結點可以把不同的事件關聯到相同的handler ID。
◆在消息傳遞層,成功的通信涉及5個方面
◇標明發送數據
◇標明接收結點
◇回收與發送數據相關聯的內存
◇緩存接收數據
◇處理消息
IntToRfm configuration
IntToRfm. nc
----------------------------------------------
|configuration IntToRfm
|{
| provides interface IntOutput;
| provides interface StdControl;
|}
|implementation
|{
| components IntToRfmM, GenericComm as Comm;
|
| IntOutput = IntToRfmM;
| StdControl = IntToRfmM;
|
| IntToRfmM.Send -> Comm.SendMsg[AM_INTMSG];
| IntToRfmM.StdControl -> Comm;
|}
----------------------------------------------
◆IntToRfm configuration提供了兩個接口IntOputput和StdControl
◆提供了接口的configuration也成為了組件,可以被其它configuartion使用
◆組件別名
◇使用了GenericComm組件
◇取別名(local name)Comm
◇為了能方便地使用其它通信組件替換GenericComm而不用修改每一處作用該組件的代碼
◆=(equal sign)
◇IntOutput = IntToRfmM
◇StdControl = IntToRfmM
◇模塊中左面接口的實現等價於右邊模塊中接口的實現
◆AM_INTMSG是定義在tos/lib/Counters/IntMsg.h中的全局常量
IntToRfm module
IntToRfmM. nc
----------------------------------------------------------------
|bool pending;
|struct TOS_Msg data;
|
|/* ... */
|
|command result_t IntOutput.output(uint16_t value) {
| IntMsg *message = (IntMsg *)data.data;
|
| if (!pending) {
| pending = TRUE;
|
| message->val = value;
| atomic {
| message->src = TOS_LOCAL_ADDRESS;
| }
|
| if (call Send.send(TOS_BCAST_ADDR, sizeof(IntMsg), &data))
| return SUCCESS;
|
| pending = FALSE;
| }
| return FAIL;
|}
----------------------------------------------------------------
◆IntMsg結構(tos/lib/Counters/IntMsg.h)
◇Field: val
◇Field: src
◆TOS_LOCAL_ADDRESS
◇全局常量
◇代表local source address
◆TOS_BCAST_ADDR
◇全局常量
◇代表radio廣播地址
◆TOS_Msg(tos/system/AM.h)
◇send函數所使用的消息結構
◇IntMsg是對TOS_Msg的封裝
◆調用Send.send()發送數據
◇數據分段
◇數據傳完觸發SendMsg.sendDone()事件
◇發送成功才接收下一個分段消息隊列
◇發送不成功就不接受傳輸消息
◆TinyOS Active Message緩存管理
◇允許併發操作
◇遵守嚴格的可選所有者協議,避免太大內存管理開銷
◇message layer接受send()後,管理緩存,傳輸完成前不允許請求者再修改緩存
◆pending flag
◇跟蹤緩存狀態
◇前面的消息沒發完,則放棄output(),返回FAIL
◇緩存可用,則發送消息
◆GenericComm網絡棧(tos/system/GenericComm. nc)
◇TinyOS generic網絡棧的實現
◇使用低級接口實現通信
◇AMStandard實現Active Message的接收與發送
◇UARTNoCRCPacket實現mote的串口通信
◇RadioCRCPacket實現radio通信
◆RfmToLeds
◇ReceiveMsg接口(tos/interfaces/ReceiveMsg. nc)只定義了一個事件: receive()
◇接收消息的內存管理是動態繼承的
◇Active Message層解碼handler type並進行分派
◇緩存被傳遞給程序(通過ReceiveMsg.receive()事件),但關鍵的是,程序必須在處理完後返回指向緩存的指針
◇若是要保存消息內容以後處理,那麼應複製消息內容到新的緩存,或向網絡棧返回一個新緩存的指針
◆底層細節
◇消息頭中包含group ID,使得多個mote組可以共享同一個radio channel
◇group ID是一個8位數
◇默認group ID是0x7D
◇使用DEFAULT_LOCAL_GROUP改變默認group ID
●DEFAULT_LOCAL_GROUP = 0x42 # for example...
◇使用MakeLocal文件改變所有程序胡group ID
◇消息頭帶有16位的目的結點地址
◇組中的每個通信結點在編譯時都分配有惟一一個16位地址
◇TOS_BCAST_ADDR (0xfff)廣播通用地址
◇TOS_UART_ADDR (0x007e)串口通用地址
TOSSIM
◆TOSSIM是直接從TinyOS代碼中編譯而來的TinyOS模擬器
◆運行於桌面電腦和筆記本上
◆可同時模擬上千個運行相同程序的結點
◆可在運行時配置調試輸出信息
Building and Running an Application
◆make pc編譯得到TOSSIM
◆TOSSIM可執行文件是build/pc/main.exe
◆control-C停止模擬
◆默認輸出所有調試信息
◆TOSSIM的最高頻率為40KHZ
增加調試語句
◆Application components和調試的四種保留模式:usr1、usr2、 usr3、和temp
◆調試信息命令
◇語法
●dbg(<mode>, const char* format, ...);
◇<mode>指出以那種DBG模式輸出調試信息
◇tos/types/dbg_modes.h包含全部可用模式
◇其它參數與printf()的參數同語義

tinyos特點

Componented-Based Architecture
TinyOS提供一系列可重用的組件,一個應用程序可以通過連接配置文件(A Wiring Specification)將各種組件連接起來,以完成它所需要的功能。
Event-Driven Architecture
TinyOS的應用程序都是基於事件驅動模式的,採用事件觸發去喚醒傳感器工作。
Tasks And Events Concurrency Model
tasks一般用在對於時間要求不是很高的應用中,且tasks之間是平等的,即在執行時是按順序先後來得,而不能互相佔先執行,一般為了減少tasks的運行時間,要求每一個task都很短小,能夠使系統的負擔較輕;
events一般用在對於時間的要求很嚴格的應用中,而且它可以佔先優於tasks和其他events執行,它可以被一個操作的完成或是來自外部環境的事件觸發,在TinyOS中一般由硬件中斷處理來驅動事件。
Split-Phase Operations
在TinyOS中由於tasks 之間不能互相佔先執行,所以TinyOS沒有提供任何阻塞操作,為了讓一個耗時較長的操作儘快完成,一般來説都是將對這個操作的需求和這個操作的完成分開來實現,以便獲得較高的執行效率。

tinyos相關圖書

基本信息
書 名:無線傳感器網絡操作系統TinyOS
tinyos封面 tinyos封面
作 者:潘浩、董齊芬、張貴軍、俞立等編著
出 版 社: 清華大學出版社
出版時間:2011-8-5
版 次: 1
頁 數: 380
I S B N :9787302257271
包 裝: 平裝
所屬分
類: 圖書 >> 計算機/網絡 >> 網絡與數據通信
本書首先介紹TinyOS操作系統的相關概念,然後深入解析該操作系統的內核機制,使得有一定基礎的讀者也能得到進一步提高。本書的第1章概述了無線傳感器網絡的特徵與現狀,並介紹了TinyOS的體系特點及其發展歷史;第2章指導讀者安裝TinyOS系統並編譯和下載程序到硬件節點上;第3章介紹了nesC編程語言的語法規範以及系統的運行機制;第4~5章介紹並演示瞭如何使用TinyOS操作系統的主要功能模塊;第6~8章介紹瞭如何進行應用開發,包括平台的移植、仿真、網絡協議以及低功耗實現;第9章通過3個基於TinyOS的應用實例,深入講解了如何開發類似的應用程序。
本書語言簡練、淺顯易懂、圖文並茂、脈絡清晰。以實際操作為主導,圍繞TinyOS操作系統的實際應用進行取材謀篇,着重於技術精華的剖析和操作技巧的指點。
本書適用於高等院校信息類專業的本科生、研究生和教師,也可供國內相關研究機構和公司的研發人員參考使用。
目錄
第1章 緒論
第2章 開發環境
第3章 nesC編程語言
第4章 基本操作
第5章 系統內核
第6章 平台與仿真
第7章 網絡協議
第8章 高級應用技術
第9章 基於TinyOS的應用開發實例
附錄A nesC語言基本語法
附錄B TinyOS編程技巧
附錄C 英漢對照術語表