实验六 CC2530平台上P2P通信的TinyOS编程
实验六 CC2530平台上P2P通信的TinyOS编程
实验目的:
- 加深和巩固学生对于TinyOS编程方法的理解和掌握
- 让学生初步的掌握射频通信TinyOS编程方法
- 学生通过本实验应理解TinyOS中ActiveMessage组件的设计思想及编程方法
- 提高学生的上机和编程过程中处理具体问题的能力
实验要求:
- 实验要求自己独立的完成;
- 编写和调试过程中出现的问题要做好记录,并事后总结到报告中
- 实验程序调试完成后, 用给定的平台进行测试,由老师检查测试结果,并给予相应的成绩
- 实验完成后,要上交实验报告。
实验内容:
- 开发一个新的应用,发送节点能够通过两个不同类型的消息分别控制接收节点中LED灯的开和关,并且用串口输出两个消息到串口调试助手。以下述顺序完成这个新应用的开发。
- 首先实现周期性发送消息控制另一个节点上的LED灯;
- 然后在上述基础上编程在串口调试助手上输出接收到的消息 ;
- 增加按键功能,即能够通过节点上的按键控制另个节点的LED灯。
- 在实验报告中分别给出上述两个阶段的源码。
实验代码:
(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)
实验环境:
- 上位机操作系统为WindowsXP,在Cygwin环境下编译
- 集成开发环境为Notepad++
实验报告人:木舟 报告时间:2018.11.16
实验六 CC2530平台上P2P通信的TinyOS编程的更多相关文章
- 实验四 CC2530平台上UART组件的TinyOS编程
实验四 CC2530平台上UART组件的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步掌握CC2530的UART.及其TinyOS编程方法 学生通过本实验 ...
- 实验五 CC2530平台上ADC组件的TinyOS编程
实验五 CC2530平台上ADC组件的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步掌握传感器的ADC组件应用方法 学生通过本实验能够初步的了解和掌握CC ...
- 第二次实验:CC2530平台上GPIO组件的TinyOS编程
实验二 CC2530平台上GPIO组件的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生理解和掌握CC2530的GPIO及外部中断,及其TinyOS编程方法 学 ...
- 实验三 CC2530平台上CC2530平台上定时器组件的
实验三 CC2530平台上CC2530平台上定时器组件的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步掌握CC2530定时器的PWM功能,及其TinyOS ...
- 第七次实验:CC2530平台上多跳通信的TinyOS编程
module P2MM { uses interface Boot; uses interface Timer<TMilli> as Timer0; uses interface Spl ...
- 第一次实验: CC2530平台上电源管理与休眠
实验一 CC2530平台上电源管理与休眠 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步的认识TinyOS编程的基础和简单的程序编写 学生通过本实验能够初步的了解和掌握Ti ...
- [转]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 ...
- hadoop平台上HDFS和MAPREDUCE的功能、工作原理和工作过程
作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapReduce ...
- Linux平台上DPDK入门指南
1. 简介 本文档包含DPDK软件安装和配置的相关说明.旨在帮助用户快速启动和运行软件.文档主要描述了在Linux环境下编译和 运行DPDK应用程序,但是文档并不深入DPDK的具体实现细节. 1.1. ...
随机推荐
- java使用SimpleDateFormat实现字符串和日期的相互转换
public class TimeTwo { public static void main(String[] args) throws ParseException{ String s = &quo ...
- Linux Mysql创建用户并分配权限
1.查看全部的用户: select user,host from mysql.user\G; 2.新建用户: create user ‘用户名’@‘主机名’ identified by ‘用户密码 ...
- SSM搭建遇到的坑
1,Error:(6, 24) java: package org.junit.runner does not exist 错误原因: 当时傻傻的把zl 包(单元测试包)放在了src/main/jav ...
- PHP用post来进行Soap请求
最近调了一个Soap请求C# webservice的项目.网上坑不少. 使用原生的SoapClient库请求也是失败.只好用post来进行模拟了.代码贴出来,给大家参考一下. <?php nam ...
- react-redux-action
Action 是把数据从应用(view等)传到 store 的有效载荷,store.dispatch() 将 action 传到 store. //尽量减少在 action 中传递的数据//actio ...
- spark提交jar包时出现unsupported major.minor version 52.0错误的解决方案
一.问题: 最近在spark集群上做一个项目,打包提交jar包时,出现了unsupported major.minor version 52.0的报错,而在local模式运行却能正常运行! 二.错误原 ...
- centos7初上手1-安装mysql数据库
随着云服务器的普及,购入云服务器的门槛越来越低,对一个程序员来说,很多人会购买一款云服务器.以前买过两年windows服务器(没有什么实际用途,就是为了玩),最近有机会接触一下linux服务器,选择了 ...
- 使用LinkedList类生成一个集合对象,循环加入“小样1”,“小样2”,“小样3”,“小样4”,“小样5”……“小样100”。输出这个集合的大小。再使用循环删除这个集合中所有名字为偶数的对象,比如“小样6”,“小样100”,都是偶数名。最后:循环输出集合中所有的对象,看是否删除成功。
package com.lanxi.demo1_8; import java.util.Iterator; import java.util.LinkedList; public class Test ...
- poj1002总结
1.之前一直是runtime error,没有找出具体原因,把冒牌排序改成了合并排序,当输入是100000行时,从大约10s变到1s内 2.感觉是atoi指针导致的,当判断atoi的入参不为NULL时 ...
- 《JavaScript Dom 编程艺术》读书笔记-第11章
本章简单介绍了HTML5,并推荐了一个好工具Modernizr,用于检测浏览器可能支持的各种特性. HTML5的新特性包括: 可以用来在文档中绘制矢量及位图的<canvas>元素: 可以在 ...