TinyOS学习笔记1 (3)

紫陌才韵 分享 2020-04-03 下载文档

//返回AM栈中节点的am地址 command am_addr_t address();

//返回AM数据包的目的地址的AM地址

command am_addr_t destination(message_t* amsg);

//返回AM数据包中的原地址的AM地址

command am_addr_t source(message_t* amsg); //设置AM数据包的目的地址的AM地址

command void setDestination(message_t* amsg, am_addr_t addr); //设置AM数据包中的原地址的AM地址

command void setSource(message_t* amsg, am_addr_t addr);

//返回该信息是否为给本节点的,简单判断destination和address是否一致,广播可能出错 command bool isForMe(message_t* amsg); //返回AM数据包的AM类型,就是说包的类型 command am_id_t type(message_t* amsg);

//设置包的类型

command void setType(message_t* amsg, am_id_t t); //获得AM数据包的AM组

command am_group_t group(message_t* amsg); //设置AM数据包的AM组

command void setGroup(message_t* amsg, am_group_t grp); //返回本节点的AM组

command am_group_t localGroup(); }

AMSend:为基本的AM数据包提供发送接口

#include #include #include

interface AMSend {

//发送负载长度为len的数据,addr为发送地址

command error_t send(am_addr_t addr, message_t* msg, uint8_t len); //取消发送数据

command error_t cancel(message_t* msg);

//数据发送完成,成功返回SUCCESS,失败返回FAIL,被取消返回ECANCEL event void sendDone(message_t* msg, error_t error); //返回通信层提供的最大负载长度 command uint8_t maxPayloadLength(); //获取负载

command void* getPayload(message_t* msg, uint8_t len); }

通信的组件:此组件位于/tos/system的目录下

AMReceiverC:提供Receive,Packet和AMPacket的接口

#include \

generic configuration AMReceiverC(am_id_t amId) { provides {

interface Receive; interface Packet; interface AMPacket; } }

implementation {

components ActiveMessageC;

Receive = ActiveMessageC.Receive[amId]; Packet = ActiveMessageC; AMPacket = ActiveMessageC; }

generic的含义:普通的,可以在其他的程序中调用

AMSenderC:提供AMSend,Packet和AMPacket和ACK的接口 #include \

generic configuration AMSenderC(am_id_t AMId) { provides {

interface AMSend; interface Packet; interface AMPacket;

interface PacketAcknowledgements as Acks; } }

implementation {

#if defined(LOW_POWER_LISTENING)

components new LplAMSenderC(AMId) as SenderC; #else

components new DirectAMSenderC(AMId) as SenderC; #endif

AMSend = SenderC; Packet = SenderC; AMPacket = SenderC; Acks = SenderC; }

AMSnooperC:提供Receive,Packet和AMPacket的接口,进行嗅探的组件功能于AMRecieverC相同,用于接收#include \

generic configuration AMSnooperC(am_id_t AMId) { provides {

interface Receive; interface Packet; interface AMPacket; } }

implementation {

components ActiveMessageC;

Receive = ActiveMessageC.Snoop[AMId]; Packet = ActiveMessageC; AMPacket = ActiveMessageC; }

AMSnoopingReceiverC:提供Receive,Packet和AMPacket的接口,多了个ActiveMessageC.Receive[AMId]

#include \

generic configuration AMSnoopingReceiverC(am_id_t AMId) { provides {

interface Receive; interface Packet; interface AMPacket; } }

implementation {

components ActiveMessageC;

Receive = ActiveMessageC.Snoop[AMId]; Receive = ActiveMessageC.Receive[AMId]; Packet = ActiveMessageC; AMPacket = ActiveMessageC;

}

ActiveMessageAddressC:本module提供了get和set节点AM地址的commond。本module不是为一般用户提供坏网络栈,在了解其操作的情况下才可使用。

module ActiveMessageAddressC @safe() { provides {

interface ActiveMessageAddress;

async command am_addr_t amAddress();

async command void setAmAddress(am_addr_t a); } }

implementation {

am_addr_t addr = TOS_AM_ADDRESS;

am_group_t group = TOS_AM_GROUP;

async command am_addr_t ActiveMessageAddress.amAddress() { return call amAddress(); }

async command void ActiveMessageAddress.setAddress(am_group_t myGroup, am_addr_t myAddr) { atomic {

addr = myAddr; group = myGroup; }

signal ActiveMessageAddress.changed(); }

async command am_group_t ActiveMessageAddress.amGroup() { am_group_t myGroup; atomic myGroup = group; return myGroup; }

async command am_addr_t amAddress() { am_addr_t myAddr; atomic myAddr = addr; return myAddr; }

async command void setAmAddress(am_addr_t a) { atomic addr = a;

signal ActiveMessageAddress.changed(); }

default async event void ActiveMessageAddress.changed() { } }

TinyOS, address, 数据包, 以太网, 接口

TinyOS学习笔记8-简单发送接收数据

简单发送接收数据

本节为对BlinkToRadio的分析,从而了解简单的收发过程。 我们读BlinkToRadio修改如下:发送本节点的id给其他的节点 BlinkToRadio.h

#ifndef BLINKTORADIO_H #define BLINKTORADIO_H

enum {

AM_BLINKTORADIO = 6, //AM数据包的类型

TIMER_PERIOD_MILLI = 250 //发送的时间间隔为250ms };

//定义发送数据包的负载部分

typedef nx_struct BlinkToRadioMsg { nx_uint16_t nodeid; //本节点的id nx_uint16_t counter; //计数 } BlinkToRadioMsg;

#endif

BlinkToRadioC.nc 文件分析

#include

#include \

module BlinkToRadioC { //定义使用的接口

uses interface Boot; //从Boot开始启动 uses interface Leds; //led灯


TinyOS学习笔记1 (3).doc 将本文的Word文档下载到电脑

下一篇:红河州房屋建筑和市政基础设施工程招标投标管理办法

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx