#include "freertos/message_buffer.h"
与流缓冲区区别就是一次只能接收一条完整消息。
流缓冲区一次吧所有数据接收了。
MessageBufferHandle_t MessageBufferHandle = NULL;
void vTaskCode0(void *pvParam) // 任务
{
char tx_buf[50];
char str_len = 0;
int xBytesSent = 0;
for (int i = 0; i < 3; i++)
{
str_len = sprintf(tx_buf, "hello word %d", i);
xBytesSent = xMessageBufferSend(MessageBufferHandle, // 发送数据句柄
(void *)tx_buf, // 发送数据-的指针
str_len, // 长度
portMAX_DELAY); // 阻塞时间
printf("i=%d,xBytesSent=%d\n", i, xBytesSent);
}
vTaskDelete(NULL);
}
void vTaskCode1(void *pvParam) // 任务
{
char rx_buf[200];
int xReceivedBytes = 0;
vTaskDelay(3000 / portTICK_PERIOD_MS);
while (1)
{
memset(rx_buf, 0, sizeof(rx_buf)); // 初始化为0
xReceivedBytes = xMessageBufferReceive(
MessageBufferHandle, // js数据句柄
(void *)rx_buf, // 发送数据-的指针
sizeof(rx_buf),
portMAX_DELAY // 阻塞时间
);
printf("Send xReceivedBytes=%d,Send data=%s\n", xReceivedBytes, rx_buf);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void app_main(void)
{
MessageBufferHandle = xMessageBufferCreate( // 创建一个动态分配内存流缓冲区
200 // 流缓冲区容纳的总字节数
);
if (MessageBufferHandle != NULL)
{
vTaskSuspendAll();
xTaskCreate(vTaskCode0, // 任务函数
"task", // 名字
4096, // 分配内存
NULL, // 传参数
3, // 任务优先级
NULL); // 句柄
xTaskCreate(vTaskCode1, "task1", 4096, NULL, 3, NULL);
xTaskResumeAll();
}
else
{
printf("Create fail \n");
}
}