野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10373|回复: 5

野火程序文件里的 环形队列 看起来比较复杂,开两个缓冲区有什么好处吗

[复制链接]
发表于 2018-9-30 14:52:10 | 显示全部楼层 |阅读模式
    野火所使用的数据结构看起来较为复杂,这样写有什么好处吗?


//数据主体
typedef struct
{
        char  *head;         //缓冲区头指针       
        uint16_t len; //接收到的数据长度

}ESP_USART_FRAME;


//队列结构
typedef struct {
        int         size;  /* 缓冲区大小          */
        int         read; /* 读指针              */
        int         write;   /* 写指针  */
        int read_using;        /*正在读取的缓冲区指针*/
        int write_using;                /*正在写入的缓冲区指针*/
        QUEUE_DATA_TYPE    *elems[QUEUE_NODE_NUM];  /* 缓冲区地址                   */
} QueueBuffer;


extern QueueBuffer rx_queue;



这样定义结构体,相比稍微简单些的结构体  有什么好处吗?
如  网上有这样定义结构体来实现:


1typedef struct
2{

3    u16 Head;           
4    u16 Tail;
5    u16 Lenght;
6    u8 Ring_Buff[RINGBUFF_LEN];
7}RingBuff_t;
8RingBuff_t ringBuff;//创建一个ringBuff的缓冲区---------------------本文来自 人人都是极客 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/p23onzq/ar ... 745?utm_source=copy


rx_data_queue.rar

3.06 KB, 下载次数: 53

回复

使用道具 举报

 楼主| 发表于 2018-9-30 14:54:26 | 显示全部楼层
  还有  在初始化的时候         
int read_using;        /*正在读取的缓冲区指针*/
int write_using;                /*正在写入的缓冲区指针*/
这两个时没被显式的初始化,然后直接使用会不会有问题呢
回复 支持 反对

使用道具 举报

发表于 2018-9-30 15:12:40 | 显示全部楼层
方便一个缓冲区在处理,另一个缓冲区在接收,不干扰
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-30 15:42:13 | 显示全部楼层
左丘冰 发表于 2018-9-30 15:12
方便一个缓冲区在处理,另一个缓冲区在接收,不干扰

//队列缓冲区的内存池
__align(4) char node_buff[2][2048] ;
缓冲区打大小只有定义的一半吗?2k还是4k  
node_buff[0][2048]是node_buff[1][2048]的镜像? 互为读写镜像?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-30 15:45:24 | 显示全部楼层
int cbIsFull(QueueBuffer *cb)
{
    return cb->write == (cb->read ^ cb->size);
}//  这个怎么理解,看不懂
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-30 17:07:35 | 显示全部楼层
_libra 发表于 2018-9-30 15:45
int cbIsFull(QueueBuffer *cb)
{
    return cb->write == (cb->read ^ cb->size);

第一次写 缓冲区1   第二次写缓冲区2; 若写了两次 没执行读操作,就再也写不了了;
cb->write = 2   
cb->read = 0
cb->size = 2
2 == 0^2; 返回 1  即缓冲区已满!
很明显不对。 写的次数怎么能当做 缓冲区是否已满呢?
所以,这个文件是 不可用的  或者 是没完成的,或者完成特定功能;而非是一个  环形队列缓冲;
不可用;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-22 04:07 , Processed in 0.033357 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表