当前位置: 首页 > java >正文

B站Michale_ee——ESP32_IDF SDK——FreeRTOS_7 流数据缓冲区、消息缓冲区

一、Stream Buffer流数据缓冲区

  • 流数据缓冲区用来处理像音频之类的流数据;

1.API简介

(1)创建流数据缓冲区

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)向流数据缓冲区中发送数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)从流数据缓冲区中接收数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.示例代码及运行结果

#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "freertos/stream_buffer.h"  // add by lxl
#include "string.h"         // add by lxlStreamBufferHandle_t xStreamBuffer;void Task1(void *pvparam)
{char tx_buf[50] = {0};int i=0, str_len = 0;size_t send_len=0;while(1){   vTaskDelay(pdMS_TO_TICKS(3000));str_len = sprintf(tx_buf, "Hello, Data_%d", i++);send_len = xStreamBufferSend(xStreamBuffer, (void *)tx_buf, str_len, portMAX_DELAY);printf("Send Data Len:%d, String Len:%d\n", send_len, str_len);}
}void Task2(void *pvparam)
{char rx_buf[100] = {0};size_t recv_len=0;while(1){memset(rx_buf, 0, sizeof(rx_buf));recv_len = xStreamBufferReceive(xStreamBuffer, rx_buf, sizeof(rx_buf), portMAX_DELAY);  //! 调用该API时,流数据缓冲区中要为空,否则就会先把数据接收完成后再进入阻塞状态if(recv_len > 0){printf("Recv Data Len:%d;Recv Data:%s\n", recv_len, rx_buf);}}
}void app_main(void)
{xStreamBuffer = xStreamBufferCreate( 1000, 100);if( xStreamBuffer == NULL ){printf("Create Stream Buffer Fail!\n");}else{vTaskSuspendAll();xTaskCreatePinnedToCore(Task1, "Task1", 1024*5, NULL, 1, NULL, 1);  //! ESP32-S3为双核,CPU0主要运行WiFi和蓝牙;CPU1用于运行应用程序;xTaskCreatePinnedToCore(Task2, "Task2", 1024*5, NULL, 1, NULL, 1);xTaskResumeAll();}
}

在这里插入图片描述

二、创建流数据缓冲区时,如何确定流数据缓冲区的大小

在这里插入图片描述

1.API简介

在这里插入图片描述
在这里插入图片描述

2.示例代码及运行结果

#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "freertos/stream_buffer.h"  // add by lxl
#include "string.h"         // add by lxlStreamBufferHandle_t xStreamBuffer;void Task1(void *pvparam)
{char tx_buf[50] = {0};int i=0, str_len = 0;size_t send_len=0;while(1){   vTaskDelay(pdMS_TO_TICKS(3000));str_len = sprintf(tx_buf, "Hello, Data_%d", i++);send_len = xStreamBufferSend(xStreamBuffer, (void *)tx_buf, str_len, portMAX_DELAY);printf("Send Data Len:%d, String Len:%d\n", send_len, str_len);}
}void Task2(void *pvparam)
{char rx_buf[20] = {0};size_t recv_len=0;while(1){memset(rx_buf, 0, sizeof(rx_buf));recv_len = xStreamBufferReceive(xStreamBuffer, rx_buf, sizeof(rx_buf), portMAX_DELAY);  //! 调用该API时,流数据缓冲区中要为空,否则就会先把数据接收完成后再进入阻塞状态if(recv_len > 0){printf("Recv Data Len:%d;Recv Data:%s\n", recv_len, rx_buf);}}
}void Task3(void * pvparam)
{size_t free_space = 0, min_space = 1000;while(1){free_space = xStreamBufferSpacesAvailable(xStreamBuffer);if(free_space < min_space)min_space = free_space;printf("free_space:%d; min_space:%d\n", free_space, min_space);vTaskDelay(pdMS_TO_TICKS(3000));}
}void app_main(void)
{xStreamBuffer = xStreamBufferCreate( 200, 100);if( xStreamBuffer == NULL ){printf("Create Stream Buffer Fail!\n");}else{vTaskSuspendAll();xTaskCreatePinnedToCore(Task1, "Task1", 1024*5, NULL, 1, NULL, 1);  //! ESP32-S3为双核,CPU0主要运行WiFi和蓝牙;CPU1用于运行应用程序;xTaskCreatePinnedToCore(Task2, "Task2", 1024*5, NULL, 1, NULL, 1);xTaskCreatePinnedToCore(Task3, "Task3", 1024*5, NULL, 1, NULL, 1);xTaskResumeAll();}
}

在这里插入图片描述

http://www.xdnf.cn/news/3598.html

相关文章:

  • Python基于深度学习的网络舆情分析系统(附源码,部署)
  • 基于蒙特卡洛模拟的电路容差分析与设计优化
  • 倒排索引与数据库索引
  • 拆解一个550-800Mhz的LC滤波器内部大图配测试曲线
  • 这款软件的第三方评测:功能、易用性与性能表现如何?
  • 链表系列一> K 个一组翻转链表
  • wsl安装
  • 自动化测试项目2 --- 比特纵横 [软件测试实战 Java 篇]
  • 泰迪杯特等奖案例学习资料:基于时空图卷积网络的结构健康监测数据异常识别系统
  • OrbitControls
  • 【学习笔记】第十章:序列建模:递归神经网络(RNN)
  • k9s 一个基于终端的 Kubernetes 集群管理工具(TUI)
  • Python 数据智能实战 (8):基于LLM的个性化营销文案
  • Redis基本使用
  • 线程池实现
  • 03 - spring security自定义登出页面
  • 学习c语言的第16天
  • 用c 编写的笔记搜索程序
  • 每天学一个 Linux 命令(33):uniq
  • DarkGS:论文解读与全流程环境配置及数据集测试【基于Ubuntu20.04 】【2025最新实战无坑版!!】
  • Linux工作台文件操作命令全流程解析
  • mescroll.js 是在 H5端 运行的下拉刷新和上拉加载插件
  • 网络编程——Socket 编程详解(TCP / UDP)
  • C++拷贝构造函数详解
  • 使用 Mermaid 在 Markdown 中绘制图表
  • 数字智慧方案6213丨智慧园区规划方案(63页PPT)(文末有下载方式)
  • AI大模型-解决开发环境配置不足问题
  • 【AIStarter苹果版发布】黑苹果部署教程+跨平台AI应用测试指南
  • HCL(HashiCorp Configuration Language)是一种结构化配置语言
  • 13.多边形的三角剖分 (Triangulation) : Triangulation