更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_cir_buf.h 文件参考

浏览源代码.

结构体

struct  CirBuf
 

枚举

enum  CirBufStatus { CBUF_UNUSED , CBUF_USED }
 

函数

UINT32 LOS_CirBufInit (CirBuf *cirbufCB, CHAR *fifo, UINT32 size)
 初始化循环buf 更多...
 
VOID LOS_CirBufDeinit (CirBuf *cirbufCB)
 删除初始化操作,其实就是清0 更多...
 
UINT32 LOS_CirBufWrite (CirBuf *cirbufCB, const CHAR *buf, UINT32 size)
 写入数据到循环buf区 更多...
 
UINT32 LOS_CirBufRead (CirBuf *cirbufCB, CHAR *buf, UINT32 size)
 读取循环buf的数据 更多...
 
UINT32 LOS_CirBufUsedSize (CirBuf *cirbufCB)
 返回循环buf已使用的大小 更多...
 

枚举类型说明

◆ CirBufStatus

枚举值
CBUF_UNUSED 
CBUF_USED 

在文件 los_cir_buf.h45 行定义.

45 {
46 CBUF_UNUSED,//未使用
47 CBUF_USED //已使用
CirBufStatus
Definition: los_cir_buf.h:45
@ CBUF_UNUSED
Definition: los_cir_buf.h:46
@ CBUF_USED
Definition: los_cir_buf.h:47

函数说明

◆ LOS_CirBufDeinit()

VOID LOS_CirBufDeinit ( CirBuf cirbufCB)

删除初始化操作,其实就是清0

在文件 los_cir_buf.c241 行定义.

242{
243 (VOID)memset_s(cirbufCB, sizeof(CirBuf), 0, sizeof(CirBuf));
244}
这是这个函数的调用关系图:

◆ LOS_CirBufInit()

UINT32 LOS_CirBufInit ( CirBuf cirbufCB,
CHAR fifo,
UINT32  size 
)

初始化循环buf

在文件 los_cir_buf.c225 行定义.

226{
227 if ((cirbufCB == NULL) || (fifo == NULL)) {
228 return LOS_NOK;
229 }
230
231 (VOID)memset_s(cirbufCB, sizeof(CirBuf), 0, sizeof(CirBuf));//清0
232 LOS_SpinInit(&cirbufCB->lock);//自旋锁初始化
233 cirbufCB->size = size; //记录size
234 cirbufCB->remain = size;//剩余size
235 cirbufCB->status = CBUF_USED;//标记为已使用
236 cirbufCB->fifo = fifo; //顺序buf ,这1K buf 是循环利用
237
238 return LOS_OK;
239}
VOID LOS_SpinInit(SPIN_LOCK_S *lock)
Definition: los_spinlock.c:37
SPIN_LOCK_S lock
Definition: los_cir_buf.h:55
UINT32 size
Definition: los_cir_buf.h:53
CirBufStatus status
Definition: los_cir_buf.h:56
UINT32 remain
Definition: los_cir_buf.h:54
CHAR * fifo
Definition: los_cir_buf.h:57
函数调用图:
这是这个函数的调用关系图:

◆ LOS_CirBufRead()

UINT32 LOS_CirBufRead ( CirBuf cirbufCB,
CHAR buf,
UINT32  size 
)

读取循环buf的数据

在文件 los_cir_buf.c199 行定义.

200{
201 UINT32 cpSize = 0;
202 UINT32 intSave;
203
204 if ((cirbufCB == NULL) || (buf == NULL) || (size == 0) || (cirbufCB->status != CBUF_USED)) {
205 return 0;
206 }
207
208 LOS_SpinLockSave(&cirbufCB->lock, &intSave);
209
210 if ((cirbufCB->fifo == NULL) || (cirbufCB->remain == cirbufCB->size)) {
211 goto EXIT;
212 }
213
214 if (cirbufCB->startIdx >= cirbufCB->endIdx) {//开始位置大于结束位置的情况怎么读
215 cpSize = OsCirBufReadLoop(cirbufCB, buf, size);//循环读取buf
216 } else {//开始位置小于结束位置的情况怎么读
217 cpSize = OsCirBufReadLinear(cirbufCB, buf, size);//线性读取,读取 endIdx - startIdx 部分就行了,所以是线性读取
218 }
219
220EXIT:
221 LOS_SpinUnlockRestore(&cirbufCB->lock, intSave);
222 return cpSize;
223}
STATIC UINT32 OsCirBufReadLoop(CirBuf *cirbufCB, CHAR *buf, UINT32 size)
Definition: los_cir_buf.c:173
STATIC UINT32 OsCirBufReadLinear(CirBuf *cirbufCB, CHAR *buf, UINT32 size)
Definition: los_cir_buf.c:144
VOID LOS_SpinUnlockRestore(SPIN_LOCK_S *lock, UINT32 intSave)
Definition: los_spinlock.c:108
VOID LOS_SpinLockSave(SPIN_LOCK_S *lock, UINT32 *intSave)
Definition: los_spinlock.c:98
unsigned int UINT32
Definition: los_typedef.h:57
UINT32 endIdx
Definition: los_cir_buf.h:52
UINT32 startIdx
Definition: los_cir_buf.h:51
函数调用图:
这是这个函数的调用关系图:

◆ LOS_CirBufUsedSize()

UINT32 LOS_CirBufUsedSize ( CirBuf cirbufCB)

返回循环buf已使用的大小

在文件 los_cir_buf.c37 行定义.

38{
39 UINT32 size;
40 UINT32 intSave;
41
42 LOS_SpinLockSave(&cirbufCB->lock, &intSave);
43 size = cirbufCB->size - cirbufCB->remain; //得到已使用大小
44 LOS_SpinUnlockRestore(&cirbufCB->lock, intSave);
45
46 return size;
47}
函数调用图:
这是这个函数的调用关系图:

◆ LOS_CirBufWrite()

UINT32 LOS_CirBufWrite ( CirBuf cirbufCB,
const CHAR buf,
UINT32  size 
)

写入数据到循环buf区

在文件 los_cir_buf.c112 行定义.

113{
114 UINT32 cpSize = 0;
115 UINT32 intSave;
116
117 if ((cirbufCB == NULL) || (buf == NULL) || (size == 0) || (cirbufCB->status != CBUF_USED)) {
118 return 0;
119 }
120
121 LOS_SpinLockSave(&cirbufCB->lock, &intSave);
122
123 if ((cirbufCB->fifo == NULL) || (cirbufCB->remain == 0)) {
124 goto EXIT;;
125 }
126
127 if (cirbufCB->startIdx <= cirbufCB->endIdx) {//开始位置在前面
128 cpSize = OsCirBufWriteLoop(cirbufCB, buf, size);//循环方式写入,分两次拷贝
129 } else {
130 cpSize = OsCirBufWriteLinear(cirbufCB, buf, size);//线性方式写入,分一次拷贝
131 }
132
133EXIT:
134 LOS_SpinUnlockRestore(&cirbufCB->lock, intSave);
135 return cpSize;
136}
STATIC UINT32 OsCirBufWriteLinear(CirBuf *cirbufCB, const CHAR *buf, UINT32 size)
Definition: los_cir_buf.c:56
STATIC UINT32 OsCirBufWriteLoop(CirBuf *cirbufCB, const CHAR *buf, UINT32 size)
Definition: los_cir_buf.c:84
函数调用图:
这是这个函数的调用关系图: