zephyr中net_buf的定义
来源:互联网 发布:单片机驱动发光二极管 编辑:程序博客网 时间:2024/05/19 02:43
1、相关数据结构说明:
数据结构如下:
struct net_buf { union { int _unused; struct net_buf *frags; }; uint8_t ref; uint8_t flags; struct net_buf_pool *pool; union { struct { uint8_t *data; uint16_t len; uint16_t size; }; struct net_buf_simple b; }; uint8_t __buf[0] __net_buf_align;};struct net_buf_pool { struct k_lifo free; // LIFO to place the buffer into when free const uint16_t buf_count; uint16_t uninit_count; const uint16_t buf_size; const uint16_t user_data_size; void (*const destroy)(struct net_buf *buf); struct net_buf * const __bufs;};#define SYS_DLIST_STATIC_INIT(ptr_to_list) {{(ptr_to_list)}, {(ptr_to_list)}}#define K_LIFO_INITIALIZER(obj) \ { \ .wait_q = SYS_DLIST_STATIC_INIT(&obj.wait_q), \ .list = NULL, \ _OBJECT_TRACING_INIT \ }#define NET_BUF_POOL_INITIALIZER(_pool, _bufs, _count, _size, _ud_size, \ _destroy) \ { \ .free = K_LIFO_INITIALIZER(_pool.free), \ .__bufs = (struct net_buf *)_bufs, \ .buf_count = _count, \ .uninit_count = _count, \ .buf_size = _size, \ .user_data_size = _ud_size, \ .destroy = _destroy, \ }#define NET_BUF_POOL_DEFINE(_name, _count, _size, _ud_size, _destroy) \static struct { \ struct net_buf buf; \ uint8_t data[_size] __net_buf_align; \ uint8_t ud[ROUND_UP(_ud_size, 4)] __net_buf_align; \ } _net_buf_pool_##_name[_count] __noinit; \ static struct net_buf_pool _name = \ NET_BUF_POOL_INITIALIZER(_name, _net_buf_pool_##_name, \ _count, _size, _ud_size, _destroy)
用以上的定义,来声明几个变量,用一个宏来搞定
NET_BUF_POOL_DEFINE(bufs_pool, 22, 74, 6, buf_destroy);
这个宏展开后如下
static struct { struct net_buf buf; uint8_t data[74] __net_buf_align; uint8_t ud[ROUND_UP(6, 4)] __net_buf_align; } _net_buf_pool_bufs_pool[22] __noinit; static struct net_buf_pool bufs_pool = { .free = { .wait_q = {{(&bufs_pool.free.wait_q)}, {(&bufs_pool.free.wait_q)}}, .list = NULL, _OBJECT_TRACING_INIT //与这个结构没有关系,就先不展开这个宏定义了 }, .__bufs = (struct net_buf *)_net_buf_pool_bufs_pool, .buf_count = 22, .uninit_count = 22, .buf_size = 74, .user_data_size = 6, .destroy = buf_destroy, }
相当于定义了一个数组_net_buf_pool_bufs_pool[22] 和一个变量bufs_pool.
bufs_pool用来描述一个buffer池的,即这个buffer池有多少个buffer,用了多少个,首地址在什么地方,释放和销毁的函数是什么,每个buffer的大小等信息。
net_buf_pool_bufs_pool[22] 是具体的buffer池子,bufs_pool实际上是用来描述这个池子的。
2、补充:
(lifo在\kernel\lifo.c中定义和实现相关的函数)
补充罗列不太相关的结构定义,在前面有用到了,实际上是一个双向链表:
struct _dnode { union { struct _dnode *head; /* ptr to head of list (sys_dlist_t) */ struct _dnode *next; /* ptr to next node (sys_dnode_t) */ }; union { struct _dnode *tail; /* ptr to tail of list (sys_dlist_t) */ struct _dnode *prev; /* ptr to previous node (sys_dnode_t) */ };};typedef struct _dnode sys_dlist_t;typedef sys_dlist_t _wait_q_t;struct k_lifo { _wait_q_t wait_q; void *list; _OBJECT_TRACING_NEXT_PTR(k_lifo);};
0 0
- zephyr中net_buf的定义
- Zephyr 中 Mailbox 的使用
- Zephyr 教程:Zephyr 工程的介绍
- make的一些变量(读zephyr Makefile)
- zephyr的执行上下文(多线程)
- Zephyr内核到1.5版本的改进
- Zephyr OS之开发环境的搭建
- Zephyr:取代HOME键的多任务手势工具
- 物联网实时操作系统zephyr的电源管理子系统
- Zephys OS 基础篇:漫谈Zephyr与Contiki的未来
- Zephyr 3
- Zephyr 操作系统
- Javascript中控件的定义
- Javascript中控件的定义
- uml中定义的关系
- makefile中变量的定义
- uml中定义的关系
- Javascript中Class的定义
- UVA839
- uva-270【数学】
- Spring事务配置的五中方式
- 原子性与可见性
- CI Weekly #6 | 再谈 Docker / CI / CD 实践经验
- zephyr中net_buf的定义
- C语言中enum与typedef enum的用法
- Java servlet 之过滤器Filter详解
- 无法启动此程序,因为计算机中丢失chrome_elf.dll。尝试重新安装该程序以解决此问题
- Android Spinner、PopupWindow和Dialog的关系
- Eclipse,JDK,ADT以及Tomcat配置(包括关联源码)
- 有关树的知识点
- zigbee学习:示例程序SampleApp中按键工作流程
- java语法基础