当前位置: 首页 > news >正文

网站建设 010seo关键词优化排名

网站建设 010,seo关键词优化排名,sql 新建网站,如何在网站上推广自己的链接文章目录 23 环形缓冲块 ringblock23.1 初始化23.2 PUT & GET 块23.3 块释放23.4 rt_rbb_blk_queue_get23.5 rt_rbb_blk_alloc https://github.com/wdfk-prog/RT-Thread-Study 23 环形缓冲块 ringblock 环形块状缓冲区简称为:rbb。与传统的环形缓冲区不同的是&…

文章目录

  • 23 环形缓冲块 ringblock
    • 23.1 初始化
    • 23.2 PUT & GET 块
    • 23.3 块释放
    • 23.4 rt_rbb_blk_queue_get
    • 23.5 rt_rbb_blk_alloc

https://github.com/wdfk-prog/RT-Thread-Study

23 环形缓冲块 ringblock

环形块状缓冲区简称为:rbb。与传统的环形缓冲区不同的是,rbb 是一个由很多不定长度的块组成的环形缓冲区,而传统的环形缓冲区是由很多个单字节的 char 组成。rbb 支持 零字节拷贝 。所以 rbb 非常适合用于生产者顺序 put 数据块,消费者顺序 get 数据块的场景,例如:DMA 传输,通信帧的接收与发送等等

ringblk: 是由 多个不同长度 的 block 组成的,ringbuff : 是由单字节的数据组成的。ringblk 每一个 block 有多少个字节可以由用户自己设定。

ringblk 支持零字节拷贝(不需要额外的 memcpy 操作)。所以 rbb 非常适合用于生产者顺序 put 数据块,消费者顺序 get 数据块的场景,例如:DMA 传输,通信帧的接收与发送等等。

23.1 初始化

  1. 初始化块链表和释放链表
  2. 对每一个块链表进行初始化,并插入到释放链表中

23.2 PUT & GET 块

  • put

block->status = RT_RBB_BLK_PUT;
  • get
  1. 判断块链表为空,则返回NULL
  2. 遍历链表,找到具有 RT_RBB_BLK_PUT状态的块,设置状态为 RT_RBB_BLK_GET,返回块指针

23.3 块释放

  1. 从块链表总移除块,并插入到释放链表中

23.4 rt_rbb_blk_queue_get


//遍历块链表for (; node; node = tmp, tmp = rt_slist_next(node)){ 如果下一个 block 为空if (!last_block){// // 获取 list 节点上的结构体的地址last_block = rt_slist_entry(node, struct rt_rbb_blk, list);if (last_block->status == RT_RBB_BLK_PUT){// 保存第一个 blockblk_queue->blocks = last_block;blk_queue->blk_num = 0;}else{// 没有找到可用的 blocklast_block = RT_NULL;continue;}}else{block = rt_slist_entry(node, struct rt_rbb_blk, list);/*1.当前块没有放置状态2.最后一个块和当前块是不连续的3.data_total_size将超出范围*/if (block->status != RT_RBB_BLK_PUT ||last_block->buf > block->buf ||data_total_size + block->size > queue_data_len){break;}/* backup last block */last_block = block;}/* remove current block */data_total_size += last_block->size;last_block->status = RT_RBB_BLK_GET;blk_queue->blk_num++;}

23.5 rt_rbb_blk_alloc


rt_rbb_blk_trt_rbb_blk_alloc(rt_rbb_trbb, rt_size_tblk_size){new_rbb = find_empty_blk_in_set(rbb); // 找到一个空闲块// 判断申请出来的块是不是在 最大范围之内if (rt_slist_len(&rbb->blk_list) < rbb->blk_max_num && new_rbb){if (rt_slist_len(&rbb->blk_list) > 0) // 检查是不是第一次申请blk{   // 获取头节点的结构体起始地址head = rt_slist_first_entry(&rbb->blk_list, struct rt_rbb_blk, list);// 获取尾节点的结构体起始地址tail = rt_slist_tail_entry(&rbb->blk_list, struct rt_rbb_blk, list);if (head->buf <= tail->buf) // 头节点数据缓冲区的地址小于尾节点的数据缓存区的地址{/***                      head                     tail* +--------------------------------------+-----------------+------------------+* |      empty2     | block1 |   block2  |      block3     |       empty1     |* +--------------------------------------+-----------------+------------------+*                            rbb->buf*/// 求出空 block 的大小empty1 = (rbb->buf + rbb->buf_size) - (tail->buf + tail->size);empty2 = head->buf - rbb->buf;// 判断新的 block 可以存放的区域if (empty1 >= blk_size){ // 给 block 结构体赋值rt_slist_append(&rbb->blk_list, &new_rbb->list);new_rbb->status = RT_RBB_BLK_INITED;new_rbb->buf = tail->buf + tail->size;new_rbb->size = blk_size;}elseif (empty2 >= blk_size){// 给 block 结构体赋值rt_slist_append(&rbb->blk_list, &new_rbb->list);new_rbb->status = RT_RBB_BLK_INITED;new_rbb->buf = rbb->buf;new_rbb->size = blk_size;}else{/* no space */new_rbb = NULL;}}else{/***        tail                                              head* +----------------+-------------------------------------+--------+-----------+* |     block3     |                empty1               | block1 |  block2   |* +----------------+-------------------------------------+--------+-----------+*                            rbb->buf*/// 获取空闲的空间empty1 = head->buf - (tail->buf + tail->size);// 判断剩余空间是否够本次的分配if (empty1 >= blk_size){// 给 block 结构体赋值rt_slist_append(&rbb->blk_list, &new_rbb->list);new_rbb->status = RT_RBB_BLK_INITED;new_rbb->buf = tail->buf + tail->size;new_rbb->size = blk_size;}else{   /* no space */new_rbb = NULL;}}}else{/* the list is empty */rt_slist_append(&rbb->blk_list, &new_rbb->list); // 把bew_rbb 链表插入到 rbbnew_rbb->status = RT_RBB_BLK_INITED; // 修改状态为 已经初始化new_rbb->buf = rbb->buf; // 设置缓冲区new_rbb->size = blk_size;// 设置块大小}}else{new_rbb = NULL;}return new_rbb;}
http://www.ho-use.cn/article/3451.html

相关文章:

  • 淘宝店铺 发布网站建设百度seo优化服务项目
  • 潍坊网站制作保定公司电话欧洲站fba
  • 沧州市网站制作百度网盘官网
  • wordpress字不能显示图片下载班级优化大师并安装
  • 一个网站建设需要多少人力百度推广怎么做最好
  • 广西城乡和建设厅网站青岛网站建设与设计制作
  • 兴义网站开发公司百度指数下载手机版
  • 日照营销型网站建设最让顾客心动的促销活动
  • 江苏易销 网站建设百度平台客服怎么联系
  • 做网站如何容易被百度抓取数据分析网官网
  • 一个网站的构建网络推广发展
  • 香港主机网站速度自媒体推广
  • 公司网站404汕头seo
  • 外贸网站制作公司技能培训学校
  • 网站开发运营维护方案建议推广一款app的营销方案
  • 网站制作中心新闻热点
  • 成都网站优化排名推广成都最新热门事件
  • 草桥有做网站公司吗网盘网页版
  • 网站策划图关键词歌词图片
  • 内销机械做哪个网站好seo常用的工具
  • 别样网站建设全网热度指数
  • 陕西省建设网三类人员官网福州百度快速优化
  • 淘客网站免费开源源码线上广告宣传方式有哪些
  • 企业所得税计算公式怎么算百度seo是什么意思
  • 西安网站的设计说明seo评测论坛
  • 教做家常菜的网站杭州seo推广优化公司
  • 电子商务网站开发综合实训报告app拉新项目
  • 什么网站做h5不收费百度搜索量最大的关键词
  • it网站设计网络营销成功案例
  • net网站开发是什么最能打动顾客的十句话