简述:发送和接受数据的程序分别烧录到两个节点上,发送方发送流水灯数据,接受方接受数据并实现流水灯

1、发送和接受程序用到的组件及其接口如图(通过make telosb docs获得)所示:

 

2、发送程序sendC.nc代码:

#include "Timer.h"
#include "send.h" module sendC @safe()
{
uses{
interface Boot;
interface Timer<TMilli> as Timer; interface SplitControl as AMControl;
interface Packet;
interface AMSend;
}
}
implementation
{
uint8_t dataS=;
bool busy=FALSE;//if write 'false',`false' undeclared here (not in a function)
message_t pkt; void startTimer()//internal function
{
call Timer.startPeriodic();
} //start radio
event void Boot.booted()
{
call AMControl.start();
}
event void AMControl.startDone(error_t err)
{
if(SUCCESS==err)
startTimer();
else
call AMControl.start();
}
event void AMControl.stopDone(error_t err){} task void compute()
{
if(dataS>=0x04)
dataS=;
else
dataS=dataS<<;
}
event void Timer.fired()
{
if(!busy)
{
MsgToRadio* trpkt=(MsgToRadio*)(call Packet.getPayload(&pkt,sizeof(MsgToRadio)));
if(NULL==trpkt)
return;
trpkt->nodeid=TOS_NODE_ID;//发送节点的ID,TOS_NODE_ID为在make telosb install,1时设置的
trpkt->dataS=dataS;
//AM_BROADCAST_ADDR广播模式,修改AM_BROADCAST_ADDR为2,则节点只向2号节点发,其他节点不响应
if(call AMSend.send(AM_BROADCAST_ADDR,&pkt,sizeof(MsgToRadio))==SUCCESS)//在if(!busy)里面????
busy=TRUE;
}
post compute();
}
event void AMSend.sendDone(message_t* msg,error_t err)
{
if(msg==&pkt)
busy=FALSE;
}
}

3、发送程序sendCAppC.nc代码:

configuration sendAppC
{
}
implementation
{
components MainC,sendC;
components new TimerMilliC(); components ActiveMessageC;
components new AMSenderC(); sendC.Boot->MainC;
sendC.Timer->TimerMilliC; sendC.AMControl->ActiveMessageC;
sendC.Packet->AMSenderC;
sendC.AMSend->AMSenderC; }

4、发送程序send.h代码:

#ifndef SEND_H
#define SEND_H typedef nx_struct MsgToRadio
{
nx_uint8_t nodeid;
nx_uint8_t dataS;
}MsgToRadio; #endif

5、接受程序核心代码:

//an event-driven process
event message_t* Receive.receive(message_t* msg,void* payload,uint8_t len)
{
if(len==sizeof(MsgFromRadio))
{
MsgFromRadio* frpkt=(MsgFromRadio*)payload;
call Leds.set(frpkt->dataR);
}
return msg;
}

参考网址:http://tinyos.stanford.edu/tinyos-wiki/index.php/Mote-mote_radio_communication

附录:

TinyOS的make命令:

Tinyos学习笔记(一)的更多相关文章

  1. Tinyos学习笔记(三)

    读取Telosb内部传感器数据,并在计算机上显示. senseC.nc代码如下: #include "Timer.h" #include "sense.h" # ...

  2. Tinyos学习笔记(二)

    1.TinyOS communication tools java serialApp -comm serial@/dev/ttyUSB0:telosb java net.tinyos.tools.L ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  7. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  8. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  9. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

随机推荐

  1. console.log() 字体颜色

    console.log("%c%s", "color: #fff; background: #20B2AA; font-size: 24px;", " ...

  2. python 内置函数(一),低阶内置函数功能汇总

    python  内置函数  68个 今日主要内容: 1.内置函数 一.内置函数 1.内置函数 详细细节内容地址(id):https://mubu.com/edit/odv-2Dkb6j

  3. tomact启动报错org.apache.jasper.EmbeddedServletOptions.<init> The scratchDir you specified:xxx is unusable.

    问题: 22-May-2018 18:00:15.891 严重 [localhost-startStop-1] org.apache.jasper.EmbeddedServletOptions.< ...

  4. kafka集群压力测试--基础。

    1.生产者测试 kafka-producer-perf-test.bat --num-records 1000000 --topic test --record-size 200 --throughp ...

  5. Maven 基本参数

    -h,--help                              Display help information-am,--also-make                       ...

  6. Android 性能测试之CPU

    接上一篇 CPU跟内存一样,存在一些测试子项,如下清单所示 1.空闲状态下的应用CPU消耗情况 2.中等规格状态下的应用CPU消耗情况 3.满规格状态下的应用CPU消耗情况 4.应用CPU峰值情况 C ...

  7. 最近读jdk源码一些基础的总结(有待后续深入)

    第一点:java.lang 1.Object类,hashCode()方法,equals()方法,clone()方法,toString()方法,notify()和notifyAll()方法,wait() ...

  8. Netty实践二(心跳检测)

    我们使用Socket通信一般经常会处理多个服务器之间的心跳检测,一般来讲,我们去维护服务器集群,肯定要有一台或几台服务器主机(Master),然后还应该有N台(Slave),那么我们的主机肯定要时时刻 ...

  9. AIO编程

    AIO编程,在NIO基础之上引入了异步通道的概念,并提供了异步文件和异步套接字通道的实现,从而在真正意义上实现了异步非阻塞,之前我们学习的NIO只是非阻塞而并非异步.而AIO它不需要通过多路复用器对注 ...

  10. 【linux命令总结】——后续用到的内容持续补充和更新

    比如说:某个文件是go文件,名字叫做 Hello.go 1.通过后台运行某个程序,将结果输出到某个文件, 如果是直接运行go程序:go run Hello.go 后台运行:nohup go run H ...