TinyOs无线消息收发问题
来源:互联网 发布:单片机串口初始化程序 编辑:程序博客网 时间:2024/06/09 18:54
最近两天在写nesc程序的时候,遇到了一个让我困扰了很长时间的问题,问题及解决方法如下。
问题:TinyOs 里提供了无线消息收发的组件,最常用的是GennericComm组件,该组件集成了
Send和Receive函数,其中Receive是个事件,当有无线数据报到达时,会触发Receive事件。
假设目前有3个节点,0,1,2 ,2 号节点要向0号节点发送数据包,中间经过1号节点。那么一号
节点的工作就是Receive到2号节点的数据包,然后再Send给0号。
1.一开始2号节点一直发送数据直到一批(10个报文)发送完,但这个时候0号节点没有任何反
应。经过检查以后发现1号节点的确接收到10个报文,但是却没有将这些报文全部转发出去。
然后我降低了2号节点的发送速率,发现1号节点既可以收到10个报文,同时也能将这十个报文
转发出去。
2.但这个时候问题又来了,虽然1号节点能正确运行,但是0号节点却收不到1号节点的任何数据
包。同样,2号节点也收不到1号节点的转发数据包。一开始还是以为是速率的问题,然后我就
试着降低转发速率,但发现毫无作用。有一点需要说明的是:一开始我的send函数是嵌套在
Receive事件里的。即,1号节点一旦收到数据包,将会直接在Receive事件里调用转发函数。
后来为了更方便的实现速率控制,我把send函数放在了定时器里,发现0号节点可以收到1号
节点的数据包。随后我又将速率调到很高,发现0号节点仍然能收到,这就很奇怪,说明了一
个问题:这根本不是速率的问题!
随后 ,我把send函数放在了一个task里,然后每次receive到数
据包的时候,post一个task。实验发现,不管转发有多快,10个
数据包可以全部被0号接收。通过这个实验,总结出一个很细小
的nesc无线收发的注意问题:Receive事件中一定不可以直接调用
send函数!!!这应该是无线收发组件GennericComm调度策略所
造成的!
- TinyOs无线消息收发问题
- TinyOS 无线发射问题(一)
- IM收发消息问题
- 消息收发
- 无线传感器网络操作系统 TinyOS
- 无线收发芯片
- CC1100无线收发模块
- 用java收发二进制消息的问题已经解决
- 安卓手机锁屏收发消息问题
- TinyOS安装问题
- 基于TinyOS的无线传感器网络体系结构
- 无线485 无线工业模块 无线收发模块 无线射频
- 无线收发模块产品方案
- 关注zigbee(四)--无线收发
- 实验--无线收发控制LED
- 无线收发模块的使用
- 收发Jabber消息流程
- activemq 收发消息
- Struts2实例1--------登录案例的实现
- 清华大学2007年复试上机题 解题报告
- 分享一个HTML5画布实现的超酷文字弹跳球效果
- 构建高性能javascript代码的几点意见
- malloc()和calloc()区别
- TinyOs无线消息收发问题
- FLEX开发者必备的十多个工具
- SharedPreferences 的用法
- 推荐几个学习linux的国外著名论坛网站
- spring数据源配置
- fedora 16 使用LiveCD修复grub2引导–<转>
- Java并发学习笔记(6)线程的四种状态,优先级
- 专注于操作系统15之特权级
- c语言的条件编译