#include <freertos/stream_buffer.h>
#include <string.h>
void Task1(void *pvParam);//发送数据
void Task2(void *pvParam);//接收数据
//创建流缓存句柄
StreamBufferHandle_t StreamBufferHandle = NULL;
void setup()
{
Serial.begin(9600);
//创建StreamBuffer并赋予句柄 (buffer长度1000byte,触发条件15byte)
StreamBufferHandle = xStreamBufferCreate(1000, 15);
//如果上面StreamBuffer创建成功,创建2个任务
if (StreamBufferHandle != NULL)
{
//发送任务
xTaskCreate(Task1, "Task1", 5 * 1024, NULL, 1, NULL);
//接收任务
xTaskCreate(Task2, "Task2", 5 * 1024, NULL, 1, NULL);
}
else
{
printf("Fail to create stream buffer!\n");
}
}
void loop()
{
}
//Task1是向流缓存发送任务
void Task1(void *pvParam)
{
int i = 0;//动态变量
int str_len = 0;//字符串长度
int send_bytes = 0;//发送字节数,服务于xStreamBufferSend的返回值
char tx_buf[50];//发送数据最大50个字符
char str_buf[60];//
while (1)
{
i++;
//int sprintf(char *str, const char *format,...)格式如下
str_len = sprintf(tx_buf, "Hello, I am YUWEN %d", i);
//返回值说明多少字节被发送
send_bytes = xStreamBufferSend(StreamBufferHandle,//流缓冲句柄
(void *)tx_buf, //要发送数据指针
str_len, //要发送数据长度
portMAX_DELAY); //阻塞时间
Serial.print("Have sent ");Serial.print(tx_buf);Serial.println(" to StreamBuffer");
//下面是c语言的输出语法,居然也能输出
//如果换成arduino语言应该如下:
//用sprintf()整理一下字符串
sprintf(str_buf, "Send: str_len = %d, send_bytes = %d!\n", str_len, send_bytes);
Serial.println(str_buf);//输出字符串
printf("Send: str_len = %d, send_bytes = %d!\n", str_len, send_bytes);
printf("++++++++++++++++++++!\n");
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void Task2(void *pvParam)
{
char rx_buf[60];
int rec_bytes = 0;
while (1)
{
memset(rx_buf, 0, sizeof(rx_buf));
rec_bytes = xStreamBufferReceive(StreamBufferHandle,
(void *)rx_buf,
sizeof(rx_buf),
portMAX_DELAY);
printf("Receive: rec_bytes = %d, data = %s\n", rec_bytes, rx_buf);
printf("--------------------!\n");
}
}