问题遇到的现象和发生背景 \
自己之前学习 使用了ringbuffer
但是对于ringblk比较疑惑,最好如下方式展示
问题相关代码,请勿粘贴截图
以下为ringbuffer 展示
//>>>第一步 初始化结构体
#define UART4_TX_Buffer_Len 1024 //定义大小
rt_uint8_t uart4_tx_buffer[UART4_TX_Buffer_Len] = {0};
struct rt_ringbuffer uart4_txrb;
//>>>第二步 初始化
rt_ringbuffer_init(&uart4_txrb,uart4_tx_buffer,UART4_TX_Buffer_Len);
//>>>第三步 向ringbuffer里写入数据
rt_ringbuffer_put(&uart4_txrb,"uart4_ringbuffer_out", sizeof("uart4—ringbuffer_out"));
rt_thread_delay(1000);
//>>>第四步 构建一个函数从ringbuffer里面读出来
fnUart4_ringbuffer_422_send_msg_handle();
void fnUart4_ringbuffer_422_send_msg_handle(void)
{
static rt_uint8_t Uart4read_len = 0;
static rt_uint8_t uartx_msg_temp[UART4_TX_Buffer_Len];
//>>>第五步读下,看看有没有数据
Uart4read_len = rt_ringbuffer_data_len(&uart4_txrb);
//有数据则进入
if(Uart4read_len > 0)
{
//>>>读出来,放在零食数组内
rt_ringbuffer_get(&uart4_txrb,uartx_msg_temp,Uart4read_len);
//>>>>发走 这么做在多线程比较适用
rt_device_write(u4_dev, 0, uartx_msg_temp, rt_strlen(uartx_msg_temp));
}
}
我的解答思路和尝试过的方法
在网上找到的全部是介绍原理的,没有实例代码,很苦恼。
我想要达到的结果
有相应代码实例