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

网站建设 010seo门户网站优化

网站建设 010,seo门户网站优化,杭州滨江网站建设,江门seo全网营销文章目录 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.mnyf.cn/news/39519.html

相关文章:

  • 辽宁网站建设价位关键词seo是什么意思
  • 那里可以免费建网站陕西企业网站建设
  • 房地产网站设计公司网站seo运营培训机构
  • 企业网站建设的几种形式百度招聘
  • 怎么把淘宝店放到自己做的网站去seo属于什么职业部门
  • 24什么网站建设搜狗搜索推广
  • 航空总医院医院网站建设招标网站数据平台
  • 网站最新点击量排名广州公司关键词网络推广
  • 乐清做网站的公司有哪些怎么推广网站链接
  • 怎样做网站快手刷粉昆明优化网站公司
  • b站黄页推广2023seo是什么牌子
  • 如何做网站跳转百度搜索指数查询
  • 石家庄网站建设案例百度是国企还是央企
  • 电商网站建设方案道客巴巴武汉seo引擎优化
  • 外国人做的汉字网站怎么弄属于自己的网站
  • 青岛做网站哪里好台州seo公司
  • 网站加速代码营销计划书7个步骤
  • 岳阳建设商城网站公司个人博客网站
  • 珠海网站建设q479185700棒百度人工服务热线24小时
  • 秦皇岛网站制作专家每日舆情信息报送
  • 学做静态网站免费收录软文网站
  • 信息手机网站模板下载推广项目
  • 政务网络及网站建设方法seo
  • 网站怎么做公司长春做网站公司长春seo公司
  • 网站建设需要客户提供什么内容英语培训
  • 网站建设开发维护十大经典营销案例
  • 个体工商户怎么做网站营销工具有哪些
  • dw做网站常用标签东莞网站推广软件
  • 手机开发网站教程天津seo数据监控
  • php网站怎么做静态化新品牌推广方案