实验 CC2530平台上P2P通信的TinyOS编程

实验目的:

  1. 加深和巩固学生对于TinyOS编程方法的理解和掌握
  2. 让学生初步的掌握射频通信TinyOS编程方法
  3. 学生通过本实验应理解TinyOS中ActiveMessage组件的设计思想及编程方法
  4. 提高学生的上机和编程过程中处理具体问题的能力

实验要求:

  1. 实验要求自己独立的完成;
  2. 编写和调试过程中出现的问题要做好记录,并事后总结到报告中
  3. 实验程序调试完成后, 用给定的平台进行测试,由老师检查测试结果,并给予相应的成绩
  4. 实验完成后,要上交实验报告。

实验内容:

  1. 开发一个新的应用,发送节点能够通过两个不同类型的消息分别控制接收节点中LED灯的开和关,并且用串口输出两个消息到串口调试助手。以下述顺序完成这个新应用的开发。
    1. 首先实现周期性发送消息控制另一个节点上的LED灯;
    2. 然后在上述基础上编程在串口调试助手上输出接收到的消息 ;
    3. 增加按键功能,即能够通过节点上的按键控制另个节点的LED灯。
  2. 在实验报告中分别给出上述两个阶段的源码。

实验代码:

(1)配置文件TestP2PC.nc

configuration TestP2PC {}

#define AM_DATA_TYPE  123

implementation

{

components MainC,LedsC;

components  TestP2PM as App;

components ActiveMessageC as AM; //消息组件

components new TimerMilliC () as Timer0;

App.Boot ->MainC;

App.Leds ->LedsC;

App.Timer0 ->Timer0;

App.Packet -> AM.Packet;

App.AMPacket -> AM.AMPacket;

App.AMSend -> AM.AMSend[AM_DATA_TYPE];

App.Receive -> AM.Receive[AM_DATA_TYPE];

App.AMControl -> AM.SplitControl;

}

(2)模块文件TestP2P.nc

module  TestP2PM

{

uses interface Boot;

uses interface Leds;

uses interface Timer<TMilli> as Timer0;

uses interface SplitControl as AMControl;

uses interface AMPacket;

uses interface AMSend;

uses interface Receive;

uses interface Packet;

}

implementation

{

#define destAddress 5

typedef nx_struct P2PMsg {nx_uint16_t nodeid; nx_uint16_t counter;}P2PMsg;

uint16_t counter=0;

bool busy =FALSE;

message_t pkt;

task void test() { }

event void Boot.booted()

{

DbgOut(9,"BOOt");

call AMControl.start();

}

event void Timer0.fired()

{

counter++;

if (!busy)

{

P2PMsg* btrpkt = (P2PMsg*)(call Packet.getPayload(&pkt, sizeof(P2PMsg)));

btrpkt->nodeid = TOS_NODE_ID;

btrpkt->counter = counter;

call AMPacket.setGroup(&pkt,TOS_IEEE_GROUP);

if (call AMSend.send(destAddress, &pkt, sizeof(P2PMsg)) == SUCCESS)

{

busy = TRUE;

}

}

}

event void AMControl.startDone(error_t err)

{

if(err==SUCCESS)

call Timer0.startPeriodic(1000);

else

call AMControl.start();

}

event void AMSend.sendDone(message_t* msg, error_t erro)

{

if (&pkt == msg)

busy = FALSE;

}

event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)

{

if (len == sizeof(P2PMsg))

{

P2PMsg* btrpkt = (P2PMsg*)payload;

DbgOut(9,"Receive Id is %d,Data is %d,Length is %d\r\n",(uint16_t)btrpkt->nodeid,(uint16_t)btrpkt->counter,len);

call Leds.set(btrpkt->counter);

}

return msg;

}

event void AMControl.stopDone(error_t err)   { }

}

(3)makefile 编译文件

COMPONENT= TestP2PC

PFLAGS += -DUART_DEBUG

PFLAGS += -DUART_BAUDRATE=9600

include $(MAKERULES)

实验环境:

  1. 上位机操作系统为WindowsXP,在Cygwin环境下编译
  2. 集成开发环境为Notepad++

实验报告人:木舟 报告时间:2018.11.16

实验六 CC2530平台上P2P通信的TinyOS编程的更多相关文章

  1. 实验四 CC2530平台上UART组件的TinyOS编程

    实验四 CC2530平台上UART组件的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步掌握CC2530的UART.及其TinyOS编程方法 学生通过本实验 ...

  2. 实验五 CC2530平台上ADC组件的TinyOS编程

    实验五 CC2530平台上ADC组件的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步掌握传感器的ADC组件应用方法 学生通过本实验能够初步的了解和掌握CC ...

  3. 第二次实验:CC2530平台上GPIO组件的TinyOS编程

    实验二 CC2530平台上GPIO组件的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生理解和掌握CC2530的GPIO及外部中断,及其TinyOS编程方法 学 ...

  4. 实验三 CC2530平台上CC2530平台上定时器组件的

    实验三 CC2530平台上CC2530平台上定时器组件的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步掌握CC2530定时器的PWM功能,及其TinyOS ...

  5. 第七次实验:CC2530平台上多跳通信的TinyOS编程

    module  P2MM { uses interface Boot; uses interface Timer<TMilli> as Timer0; uses interface Spl ...

  6. 第一次实验: CC2530平台上电源管理与休眠

    实验一 CC2530平台上电源管理与休眠 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步的认识TinyOS编程的基础和简单的程序编写 学生通过本实验能够初步的了解和掌握Ti ...

  7. [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)

     [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching) http://www.360doc.com/content/12/0428/17/6187784 ...

  8. hadoop平台上HDFS和MAPREDUCE的功能、工作原理和工作过程

    作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapReduce ...

  9. Linux平台上DPDK入门指南

    1. 简介 本文档包含DPDK软件安装和配置的相关说明.旨在帮助用户快速启动和运行软件.文档主要描述了在Linux环境下编译和 运行DPDK应用程序,但是文档并不深入DPDK的具体实现细节. 1.1. ...

随机推荐

  1. 利用this属性实现点击按钮变色.选中效果

    浏览器宿主的全局环境中,this指的是window对象. <script type="text/javascript"> console.log(this === wi ...

  2. 测试新手之linux问题整理

    测试职场的新人,难免都会涉及到一些linux系统的命令操作,搭建测试环境也好,查看日志也罢,以下给大家整理初学者可能会碰到的问题,希望对大家有所帮助. 1.Linux中输入基本操作命令例如ls,遇到报 ...

  3. JavaScript中事件委托(事件代理)详解

    在JavaScript的事件中,存在事件委托(事件代理),那么什么是事件委托呢? 事件委托在生活中的例子: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托 ...

  4. 《Swell数学》用户故事

    一.用户故事基础知识: 1. 从用户的角度来描述用户渴望得到的功能. 2. 用户故事是描述对用户有价值的功能,好的用户故事应该包括角色.功能和商业价值三个要素. 3. 一个用户故事只是以客户能够明白的 ...

  5. 2018工业信息安全技能大赛华东赛区初赛 第2题 writeup

    2018工业信息安全技能大赛华东赛区初赛 第2题 解题思路 本题主要考察点是对常见工控协议的理解(modbus/tcp和s7comm),题目目标是寻找出报文中某条异常报文流量.很让人疑惑的是,题目中并 ...

  6. 《JavaScript Dom 编程艺术》读书笔记-第10章

    用JS实现动画~内容包括: 1. 动画基础知识 2. 用动画丰富网页的浏览效果 动画就是让元素的位置随时间而不断变化. 位置: //CSSelement{ position:absolute; top ...

  7. 分布式大数据系统离线分析技术解决方案(spark2.x)

    一.sark2.x新型的架构系统

  8. require的特点

    通过把要加载的文件看作一个“功能”而不是一个文件,require对于用Ruby编写的扩展和用C语言编写的扩展都用一样的方式.另外,.rb扩展名的文件与其它扩展名为.so..dll或.bundle的文件 ...

  9. RPC 知识科普一下

    RPC概念及分类 RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”.目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用 ...

  10. hdu4044

    题意:给你一颗树有n个节点,树的根节点为1,表示为敌人的基地,其他叶子节点为你的基地,你一开始有m元,给你每个节点可以建造的塔的数量和塔的价格和可以照成的伤害,每个节点至多建立一座塔.敌人的基地每次会 ...