📄 os_ring.c
字号:
#include <ucos_ii.h>
#include "os_ring.h"
// return value < 0: putring fail
// return value == 0: putring success
int putring(ring_buf_t *ring, unsigned char src[], unsigned int len)
{
unsigned int i;
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0; /* Storage for CPU status register */
#endif
OS_ENTER_CRITICAL();
// Check whether space is enough
if((ring->buffersize + len) >= sizeof(ring->buffer))
{
OS_EXIT_CRITICAL();
return RING_FAIL;
}
ring->buffersize+=len;
for(i=0; i<len; i++)
{
ring->buffer[ring->putindex] = src[i];
ring->putindex = (ring->putindex + 1) & RING_BUFFER_INDEX_MASK;
}
OS_EXIT_CRITICAL();
return RING_SUCCESS;
}
int putring_char(ring_buf_t *ring, unsigned char c)
{
return putring(ring, &c, 1);
}
int getring(ring_buf_t *ring, unsigned char buf[], unsigned int len)
{
unsigned int i;
unsigned int get_byte = 0;
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0; /* Storage for CPU status register */
#endif
OS_ENTER_CRITICAL();
if((ring->buffersize) == 0)
{
OS_EXIT_CRITICAL();
return RING_FAIL;
}
for(i=0; i<len; i++)
{
buf[i] = ring->buffer[ring->getindex];
get_byte++;
ring->buffersize--;
ring->getindex = (ring->getindex + 1) & RING_BUFFER_INDEX_MASK;
if(ring->buffersize == 0)
break;
}
OS_EXIT_CRITICAL();
return get_byte;
}
int getring_char(ring_buf_t *ring, unsigned char *c)
{
return getring(ring, c, 1);
}
void ring_flush(ring_buf_t *ring)
{
ring->buffersize = 0;
ring->getindex = ring->putindex;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -