Tinyos学习笔记(一)
简述:发送和接受数据的程序分别烧录到两个节点上,发送方发送流水灯数据,接受方接受数据并实现流水灯
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学习笔记(一)的更多相关文章
- Tinyos学习笔记(三)
读取Telosb内部传感器数据,并在计算机上显示. senseC.nc代码如下: #include "Timer.h" #include "sense.h" # ...
- Tinyos学习笔记(二)
1.TinyOS communication tools java serialApp -comm serial@/dev/ttyUSB0:telosb java net.tinyos.tools.L ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
随机推荐
- SPSS-因子分析
因子分析 有可能用较少的综合指标分析存在于各变量中的各类信息,而各综合指标之间彼此是不相关的,代表各类信息的综合指标称为因子.定义:因子分析就是用少数几个因子来描述许多指标或因素之间的联系,以较少几个 ...
- centos远程连接putty工具配置
Putty工具连接与使用步骤 作者:jason 登陆linux 一.关闭防火墙 输入命令 setup 完成后: 二.关闭selinux 输入命令 cd /etc/selinux 输入命令 vi co ...
- spring 解耦
spring之后不用在类中new一个实体,而是在类中申明接口类:当真正使用的时候是注入相应的实现类,要什么类注入申明类:那么这样就面向接口编程了:耦合度大大降低: 同时spring有面向切面编程,其实 ...
- ./configure: error: the HTTP rewrite module requires the PCRE library解决
./configure: error: the HTTP rewrite module requires the PCRE library解决 有时候,我们需要单独安装nginx,来处理大量的下载 ...
- SVN基本页面
- spark streaming集成kafka接收数据的方式
spark streaming是以batch的方式来消费,strom是准实时一条一条的消费.当然也可以使用trident和tick的方式来实现batch消费(官方叫做mini batch).效率嘛,有 ...
- python2和python3 切换
转帖-[官解]Windows上Python2和3如何兼容 想学习Python3,但是暂时又离不开Python2.在Windows上如何让它们共存呢? 目前国内网站经常会让大家把其中一个python.e ...
- leetcode 数组类型题
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h& ...
- unity中Camera.ScreenToWorldPoint
Camera.ScreenToWorldPointVector3 ScreenToWorldPoint(Vector3 position); 将屏幕坐标转换为世界坐标. 如何转换?假如给定一个所谓的屏 ...
- UVa 122 Trees on the level(二叉树层序遍历)
Trees are fundamental in many branches of computer science. Current state-of-the art parallel comput ...