- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TinyOS——简单发送接收数据
TinyOS——简单发送接收数据
简单发送接收数据本节为对BlinkToRadio的分析,从而了解简单的收发过程。我们读BlinkToRadio修改如下:发送本节点的id给其他的节点BlinkToRadio.h#ifndef BLINKTORADIO_H#define BLINKTORADIO_Henum { AM_BLINKTORADIO = 6, //AM数据包的类型 TIMER_PERIOD_MILLI = 250 //发送的时间间隔为250ms};//定义发送数据包的负载部分typedef nx_struct BlinkToRadioMsg { nx_uint16_t nodeid; //本节点的id nx_uint16_t counter; //计数} BlinkToRadioMsg;#endifBlinkToRadioC.nc 文件分析#include Timer.h#include BlinkToRadio.hmodule BlinkToRadioC {//定义使用的接口 uses interface Boot; //从Boot开始启动 uses interface Leds; //led灯 uses interface TimerTMilli 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号节点发,其他节点不响应
原创力文档


文档评论(0)