Contiki packetbuf原理
来源:互联网 发布:mac怎么用校园网 编辑:程序博客网 时间:2024/05/20 09:10
摘要
本文介绍了contiki netstack中在framer,rdc,mac层中b欧诺个uffer数据的packetbuf的构造和原理。
正文
packetbuf作用
contilki netstack发送和接收数据先通过packetbuf缓冲,再进行处理。
packetbuf构成
packetbuf由header部分和data部分组成
data的长度为PACKETBUF_SIZE,可在contiki-conf.h中由PACKETBUF_CONF_SIZE定义
header的长度为PACKETBUF_HDR_SIZE,可在contiki-conf.h中由PACKETBUF_CONF_HDR_SIZE定义
因此packetbuf定义为
static uint16_t packetbuf_aligned[(PACKETBUF_SIZE + PACKETBUF_HDR_SIZE) / 2 + 1];
static uint8_t *packetbuf = (uint8_t *)packetbuf_aligned;
以上的做法是针对某些芯片特殊的对齐要求。
通过packetbuf_reference, packetbuf的数据区可以指向其它内存地址。
Header的操作
发送数据时,才会使用到header部分的内存
data从低地址向高地址分配.
- 将发送数据装载到packetbuf使用packetbuf_copyfrom. 会自动设置buflen.
- 取走发送数据使用packetbuf_copyto, 取走发送数据后,如果不再使用数据,使用packetbuf_set_datalen将buflen复位。
- header的分配从高地址向低地址分配。hdrptr在初始化时赋值为PACKETBUF_HDR_SIZE
- 使用packetbuf_hdralloc分配一个header,hdrptr就减去对应的长度.
- 使用packetbuf_hdr_remove释放一个heade, hdrptr就加上对应的长度。
- 使用packetbuf_copyto_hdr将header写入到packetbuf中
- 使用packetbuf_hdrptr得到header的起始地址
- 使用packetbuf_hdrlen得到header的长度
- 使用packetbuf_clear_hdr清除所有的header空间内的header
接收数据不会使用header部分的内存,接收数据的Header放在data的内存区内
将含有header接收数据装载到packetbuf使用packetbuf_copyfrom. 会自动设置buflen
使用packetbuf_hdrreduce移除接收到数据的header
数据的操作
取走发送数据使用packetbuf_copyto, 取走发送数据后,如果不再使用数据,使用packetbuf_set_datalen将buflen复位。
结束语
综上可见contiki的backbuf管理并不给出固定的格式,按照数据header+payload的模式来处理,提供的函数只是完成对header和payload的move, copy, get length操作。 packetbuf模块提供packet缓存,也提供修改payload缓存地址的机制,这样数据发送的实现方式可以更加灵活,同时也可发送大于packetbuf缓存的数据包。
- Contiki packetbuf原理
- Contiki packetbuf原理
- Contiki——Rime缓冲区packetbuf分析
- Contiki协议栈Rime:缓冲区管理packetbuf management
- Contiki内核原理
- Contiki内核原理
- Contiki rtimer原理与移
- Contiki rtimer原理与移
- Contiki
- 对contiki原理的一些理解
- Rime 协议栈缓冲区 packetbuf
- Contiki:初探
- contiki MAC
- Contiki-developers
- contiki 参考
- Contiki移植
- contiki移植
- Contiki移植
- mysql 日期默认系统时间 mysql 默认值不支持函数
- 开发网站的资源
- Mac OSX 调用 JNI
- 简单工厂模式-计算器控制台程序
- 第一章链表
- Contiki packetbuf原理
- Git教程网站
- 安全测试之不安全的直接对象引用
- 空调制热没用?进来看看你就知道原因了
- 多线程——线程的生命周期
- Android自定View——可以设置宽高比例的ImageView
- web.xml详解
- QT 主要类使用方法
- 万万没想到:彻底毁掉硬盘数据原来这么难