CTP源码分析
文章平均质量分 94
ICT_杜臻
.
展开
-
CTP源码分析5 CTP链路质量估计层结构及源码分析(四)----源码实现解读(一)
CTP链路估计层的实现主要在/tos/lib/net/le/LinkestimatorP.nc 中。TOS与nesCTinyOS的实现并没有使用C语言而是使用nesC这种基于模块的变成方式,具体的语法和C语言很想,唯一的区别主要在程序的结构上是基于模块的。TinyOS的数据类型很多事基于网络来定制的,比如以nx开头的数据类型,还有nx_struct这样的语法。nesC的学习可以依靠这个原创 2016-08-11 16:51:16 · 963 阅读 · 0 评论 -
CTP源码分析7 CTP路由引擎结构及源码分析(一)----TreeRoute.h头文件解读和概要介绍
CTP路由引擎主要由定时器驱动,发动路由帧来建立通信拓扑,广播主要的内容就是广播自己相对于根节点的ETX以及自己的地址,当然还有自己阻塞的一些状态信息,这些信息会被邻居节点捕获,然后更新邻居节点的路由表,每个节点都可以根据自己的路由表,根据情况选出ETX比较小的节点来作为自己的父节点。这样子每个节点和根节点的最小代价通信路径就可以得出来了。拓扑也可以得以建立。在CTP.h中规定了路由帧的格式:原创 2016-09-09 09:49:27 · 866 阅读 · 0 评论 -
CTP源码分析8 CTP路由引擎结构及源码分析(二)----源码实现解读(一)
路由引擎的主要工作就是发送路由帧,更新路由表,并且从路由表中不断选出合适的父节点。路由帧的发送和LEEP帧是绑定的,根据涓流算法进行发送。随着链路的稳定,计时器的计时间隔会逐渐增大,但是遇到链路拓扑需要变化的时候就要就要重置计时器间隔为最小。原创 2016-09-09 10:40:54 · 1414 阅读 · 0 评论 -
CTP源码分析3 CTP链路质量估计层结构及源码分析(二)----LEEP协议中的Trickle算法
LEEP帧的发送的时间间隔不是固定的,而是采用了非常巧妙的方法兼顾了链路质量估计的变化和广播帧发送的开销。受到Trickle算法加持的LEEP协议实现是下面的效果:当链路刚刚开始构建的时候这个时候拓扑还没有构成,那么就需要进行大量的LEEP帧发送,来进行链路估计和路由建立;当拓扑结构逐渐趋向于稳定的时候,这个时候LEEP帧的发送频率会逐渐降低(但降低到一定程度便不再降低了)。但是如果一旦发现了路由没有形成或者路由需要变换以及有新节点的加入,那么就会将LEEP帧的发送频率重新置到最高。原创 2016-08-10 21:27:35 · 1654 阅读 · 0 评论 -
CTP源码分析2 CTP链路质量估计层结构及源码分析(一)----LEEP协议的LEEP帧
TinyOS使用的是nesC基于模块编程,总体的语法和C语言和相似。看总体结构图:链路质量估计层做了什么可以看到,根节点一些系统底层的发送接口,和接收接口,还有随机数接口。他使用这些接口,来实现自己的接口。链路质量估计层提供一系列接口供上层调用。原创 2016-08-10 12:36:47 · 1151 阅读 · 0 评论 -
CTP源码分析1 CTP结构及概述
CTP(汇聚树协议)实现了灵活动态的树状拓扑结构,并满足拓扑中其他节点与根节点的单向通信。为了实现灵活动态的拓扑结构变化,CTP蕴含了两个稳定有效的汇聚树原则,这些原则可以让汇聚树得以获得稳定有效的连接质量估计,并且通过连接质量的估计值获得通往根节点的路径。当每个节点都获得通往根节点的路径之后,汇聚树也就形成了。第一个原则是保证数据通道的有效性原则。CTP协议在数据传输的时候可以动态地原创 2016-08-10 10:55:19 · 6536 阅读 · 0 评论 -
CTP源码分析4 CTP链路质量估计层结构及源码分析(三)----源码头文件解读
TinyOS的链路质量估计器的实现主要在tos/lib/net/le这个文件夹中,下面首先看一下链路质量估计器的头文件LinkEstimator.h:#define NEIGHBOR_TABLE_SIZE 10enum { NUM_ENTRIES_FLAG = 15,};typedef nx_struct linkest_header { nx_uint8_t flags原创 2016-08-11 15:00:05 · 1128 阅读 · 0 评论 -
CTP源码分析6 CTP链路质量估计层结构及源码分析(五)----源码实现解读(二)
void updateNeighborTableEst(am_addr_t n) { uint8_t i, totalPkt; neighbor_table_entry_t *ne; uint8_t newEst; uint8_t minPkt; minPkt = BLQ_PKT_WINDOW; dbg("LI", "%s\n", __FUNCTI原创 2016-08-17 15:10:09 · 869 阅读 · 0 评论