Contiki——Chameleon理解

Chameleon结构的作用在Chameleon的pack_header()函数中体现了出来(这里的打包方式像以前自己讨论过的一个问题,是在组织数据时直接将数据写入发送缓冲区中,还是保存在一个结构体中到最后一起打包)。Chameleon的方式,属于将需要打包的数据先放在一个结构体中,在最后将要发送时,调用pack_header函数将数据写入发送缓冲区中。这样会浪费一些内存。但是,折中的结果是通过Chameleon我们可以同时兼容多种协议,也是Contiki的最大优势。有一利,有一弊。取舍之间,适合的就是最好的。

在Chameleon在进行pack_header时,将存放在packetbuf_attrs,packetbuf_addrs,数组中的数据提取出来,放在将要发送的packetbuf的报文头部。

应该说,这里packetbuf中使用的打包方式确实浪费了不少内存。

首先,是分配静态的

struct packetbuf_attr packetbuf_attrs[PACKETBUF_NUM_ATTRS];

struct packetbuf_addr packetbuf_addrs[PACKETBUF_NUM_ADDRS];

而它们需要消耗,48字节内存。

/*-------------------------------------------------------------------------------------------------------------------------------------*/

2013-5-2 19:31


Contiki中chameleon机制中,

有一个raw没有经过优化的.c文件,

有一个bitopt即位优化过的.c文件,

这两个文件可以配置选择。

对于channel机制中是通过一个list进行管理,

打开一个channel即是添加一个list node,其他的操作,是通过channel封装了list的各种操作;

这里边关于数据的组织,与解析(pack,unpack)都是通过packetbuf模块进行的数据操作;

在packetbuf中,

packetbufptr默认是指向&packetbuf[PACKETBUF_HDR_SIZE],

当指向其他地方时,packetbufptr不等于&packetbuf[PACKETBUF_HDR_SIZE]以此来判断是否,packetbufptr指向的是否为external_data;

packetbuf是由PACKETBUF_SIZE和PACKETBUF_HDR_SIZE两个值来组成的,即一个packetbuf包含了header和data;

这次对于packetbuf.c文件理解清楚了,这里边就是对于一个数组的封装操作;实现了各种便于pack与unpack的操作。


转载于:https://my.oschina.net/u/859741/blog/279695

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值