Contiki——Rime Stack分析

2024-04-08 09:08
文章标签 分析 stack contiki rime

本文主要是介绍Contiki——Rime Stack分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 分析Rime的大概思路

在Rime中,理解Rime Stack的工作原理,首先要理解整体框架;
之后要理解这里边的list,memb,packetbuf,channel,等几个部分;
之后要明白chameleon的结构,以及一些具体实现;
这几个部分中,以packetbuf和chameleon最为重要。

像packetbuf.c,packetqueue.c是最基本的几个函数(当然list.c,memb.c,ctimer.c也是)。在此之上,形成了Rime的各个primitive,即广播帧,单播帧,级跳等的发送。同时,Chameleon结构的设计,使得Rime Stack能够打包任意协议类型的帧数据。这也是Rime Stack的优势所在。故,Chameleon结构在Rime Stack中占有很重要的地位。最后的发送帧打包都是借助于Chameleon实现的。
当然,Rime Stack只是一个帧发送与接收的stack,自身无法进行数据采集,组网等应用。如果要这些应用,需要在Rime之上实现router,实现collect,实现Trickle,实现mesh。
理解好Rime有两个文件必须理解,chameleon.c,packetbuf.c这两个文件的源代码以及Adam关于它们的论文。
如果只是分析Rime Stack,则再继续将abc,ibc,ubc等各种发送帧的文件理解了,明白里边的回调函数调用,基本上可以从大体上理解Rime的结构,此时根据Contiki中的Rime例程,可以垂直追踪并分析代码。根据作者的实际使用,会对这些理解更深入。
当然,这些只是Rime Stack+Chameleon,如果深入看MAC结构,就需要分析以下几个:

#define NETSTACK_CONF_MAC                       csma_driver
#define NETSTACK_CONF_RDC                       contikimac_driver
#define NETSTACK_CONF_FRAMER                    framer_802154
#define NETSTACK_CONF_RADIO                     stm32w_radio_driver

二 追踪Rime中的几个帧发送文件
  1. Rime中的各个primitive最终都是在abc中打开channel,建立一个channel;
  2. 同时,设置这个channel的头长度;
  3. 不同的层,设置不同的hdrsize;
  4. channel_set_attributes must be after the open.
  5. 每一层继承了上一层的hdrsize并根据自己的需要添加了额外的hdrsize;
  6. 计算最后的hdrsize,由chameleon的header_size完成。
  7. 而这些最基本的attribute定义在packetbuf.h中。由此,chameleon结构的作用体现出来。根据不同层的attribute设置相应的attribute值,最后根据hdrsize将所有有关的attribute,pack在buf中。由此,完成pack。最后packetbuf完成数据的整理工作。至此,从Rime到Chameleon完成了,他们的工作。
  8. 每一层的callback,是为了下一层收到或者发送时,用来实现上一层需要的功能。
关于Contiki中Memb内存的使用,采用了预分配的方式:
  1. 在memb内存分配使用中,使用了预先分配内存的方式来管理内存;
  2. 首先,通过memb()宏静态分配一个二维较大的内存;
  3. 之后,根据需要一次内存,并记录本次使用的内存;
  4. 最后,当释放内存后,将内存使用记录清楚;

三 实例代码追踪(example-mesh.c)

Rime and Chameleon
Chameleon结构中,packetbuf的操作也是基础。所以无论对于Rime,还是Chameleon,甚至于后来的MAC层的数据打包发送与接收,都与packetbuf有着莫大的联系。所以彻底弄明白packetbuf在理解好Contiki中的协议有很大的帮助。

在数据离开Rime后,进入Chameleon,离开Chameleon后进入CSMA,离开CSMA后进入RDC(contikimac),离开RDC后进入Frame802154打包为802154协议的帧数据,最后进入Radio的driver准备发送。

而这里边,发送是通过一层层调用下一级发送函数进行发送,而接收是通过回调函数,在底层实现上层需要的动作。
/---------------------------------Rime+Chameleon---------------------------------------/
mesh_send(mesh.c)----multihop_send(multihop.c)----unicast_send(unicast.c)
----broadcast_send(broadcast.c)----abc_send(abc.c)----rime_output(rime.c)
----chameleon_create+packetbuf_compact(chameleon.c)
/----------------------------------MAC--------------------------------------------/
----NETSTACK_MAC.send(packet_sent, c)(here the NETSTACK_MAC macro is csma. Therefore, the send is send_packet(csma.c))
----NETSTACK_RDC.send(sent, ptr);(here the NETSTACK_RDC macro is contikimac. In a result, the send is qsend_packet(contikimac.c))
----NETSTACK_FRAMER.create();(the function is create() in framer-802154.c)
----NETSTACK_RADIO.prepare(packetbuf_hdrptr(), transmit_len);(send the frame through the NETSTACK_RADIO)
/---------------------------------------------------------------------------------/

四 应用
Rime仅仅是帮助我们将数据发送出去,具体的应用就需要熟悉mesh,router,collect等算法了。如果要做低功耗,还要熟悉Contiki的RDC机制及应用层还有Coap协议。

注:
以前关于Rime的笔记
http://blog.csdn.net/tietao/article/details/8543133
http://blog.csdn.net/tietao/article/details/8590942

这篇关于Contiki——Rime Stack分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885153

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

【软考】希尔排序算法分析

目录 1. c代码2. 运行截图3. 运行解析 1. c代码 #include <stdio.h>#include <stdlib.h> void shellSort(int data[], int n){// 划分的数组,例如8个数则为[4, 2, 1]int *delta;int k;// i控制delta的轮次int i;// 临时变量,换值int temp;in

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师,爱吃土豆。如有需要技术交流或者需要方案帮助、需求:以下为联系方式—V 方案1:通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通过IO+EXIT中断的方式进行霍尔传感器数据的读取。将IO口配置为上升沿+下降沿中断触发的方式。当霍尔传感器信号发生发生信号的变化就会触发中断在中断

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等