收藏 分销(赏)

TinyOS——简单发送接收数据.doc

上传人:xrp****65 文档编号:7979508 上传时间:2025-01-29 格式:DOC 页数:4 大小:21.50KB 下载积分:10 金币
下载 相关 举报
TinyOS——简单发送接收数据.doc_第1页
第1页 / 共4页
TinyOS——简单发送接收数据.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
TinyOS——简单发送接收数据 简单发送接收数据 本节为对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 <Timer.h> #include "BlinkToRadio.h" module BlinkToRadioC { //定义使用的接口 uses interface Boot; //从Boot开始启动 uses interface Leds; //led灯 uses interface Timer<TMilli> as Timer0;//时间 uses interface Packet; //数据包,在获取负载处用到 uses interface AMPacket; //AM数据包,需要实现SendDone() uses interface AMSend; //AM发送数据 uses interface Receive; //接收数据包 uses interface SplitControl as AMControl; //Split操作 } implementation { uint16_t counter; //发送的次数 message_t pkt; //数据包 bool busy = FALSE; //节点是否忙,开始为不忙 //从此处启动,开始程序 event void Boot.booted() { call AMControl.start(); //调用Split操作的开始,是否成功在startDone()处判断 } //判断开始是否完成 event void AMControl.startDone(error_t err) { if (err == SUCCESS) { //成功调用时间周期执行 call Timer0.startPeriodic(TIMER_PERIOD_MILLI); } else { //未成功重新开始 call AMControl.start(); } } //停止判断 event void AMControl.stopDone(error_t err) { } //时间的每次周期执行的内容,发送数据 event void Timer0.fired() { counter++;//发送数据个数加1 if (!busy) {//节点不忙,则开始发送数据 //设置数据包的负载,btr指向数据包的负载部分 BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)(call Packet.getPayload(&pkt, sizeof(BlinkToRadioMsg))); if (btrpkt == NULL) {//没有数据就不发送 return; } btrpkt->nodeid = TOS_NODE_ID; //发送节点的ID,TOS_NODE_ID为在make telosb install,1时设置的 btrpkt->counter = counter; //发送数据包的个数 //开始发送数据,AMSend.send(广播地址,负载数据,负载数据的大小) if (call AMSend.send(AM_BROADCAST_ADDR, //修改AM_BROADCAST_ADDR为2,则节点只向2号节点发,其他节点不响应 &pkt, sizeof(BlinkToRadioMsg)) == SUCCESS) { busy = TRUE;//调用发送数据成功,节点正在发送数据,变为忙的状态,是否发送完成在sendDone里判断 } } } event void AMSend.sendDone(message_t* msg, error_t err) { if (&pkt == msg) {//如果发送的数据是所设置的数据,发送成功,节点变为不忙 busy = FALSE; } } //接收数据部分 event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len){ if (len == sizeof(BlinkToRadioMsg)) {//判断接受的数据的长度,是否为所需要的 BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)payload; //获取数据 call Leds.set(btrpkt->nodeid); //设置led为获取节点的id } return msg; //返回数据 } } BlinkToRadioAppC.nc文件,实现连线 #include <Timer.h> #include "BlinkToRadio.h" configuration BlinkToRadioAppC { } implementation { components MainC; components LedsC; components BlinkToRadioC as App; components new TimerMilliC() as Timer0; components ActiveMessageC; components new AMSenderC(AM_BLINKTORADIO); components new AMReceiverC(AM_BLINKTORADIO); App.Boot -> MainC; App.Leds -> LedsC; App.Timer0 -> Timer0; App.Packet -> AMSenderC; App.AMPacket -> AMSenderC; App.AMControl -> ActiveMessageC; App.AMSend -> AMSenderC; App.Receive -> AMReceiverC; } 在编译时出现警告问题,未解决,估计和平台有关 /opt/tinyos-2.1.1/tos/chips/cc2420/lpl/DummyLplC.nc:39:2: warning: #warning "*** LOW POWER COMMUNICATIONS DISABLED ***"
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服