前言
大家晚上好,我是杰杰,上个星期,研究了一下机智云的源码,也不能说是研究吧,就是看了看,人家既然能拿来做商业用,还是有很厉害的地方的,如果还不知道什么叫环形缓冲区(环形队列)的同学,请看——STM32进阶之串口环形缓冲区实现
好啦。多余的话不多说,看看他们的东西比我写的好在哪吧,原理都是一样的,但是效率会比我的搞,可能应用的地方也不一样,所以,先看看吧。
ringbuffer.h
先看看头文件:ringbuffer.h。
主要是用宏实现了一个求最小值的函数。
还有就是定义了一个环形缓冲区的结构体。
#define min(a, b) (a)<(b)?(a):(b) ///< Calculate the minimum value
typedef struct {
size_t rbCapacity;
uint8_t *rbHead;
uint8_t *rbTail;
uint8_t *rbBuff;
}rb_t;
看英文就能知道意思了,rb是ringbuff的缩写,意思就是环形缓冲区,
结构体中rbCapacity是缓冲区的容量,也就是大小。
结构体中rbHead是缓冲区的头指针,
rbTail是缓冲区的尾指针,
而rBuff是缓冲区的首地址,在创建的时候就用到。
ringbuffer.c
环形缓冲区的创建
下面来看看源文件:
int8_t ICACHE_FLASH_ATTR rbCreate(rb_t* rb)
{
if(NULL == rb)
{
return -1;
}
rb->rbHead = rb->rbBuff;
rb->rbTail = rb->rbBuff;
return 0;
}
这是个创建环形缓冲区的函数,就是初始化了环形缓冲区的头尾指针,这个函数的通用性很强,因为很多时候不只创建一个缓冲区。每个缓冲区的首地址都保存在了rbBuff,这个在后面的通用性会很好用。但是杰杰还是觉得不够好,因为我们在结构体中定义了缓冲区的容量,但是在这里并没有给他初始化&