007-ESP32_SDK开发-使用缓存管理传递数据
2023-03-20 15:39:58 时间
说明
esp32里面跑的是freertos,如果需要传递数据需要使用内部的缓存管理.
代码
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"
char data[10]="01234567";
static xQueueHandle xQueueHandle1 = NULL;
//任务函数
static void function(void *pvParameters)
{
char datarecv[12];
while(1)
{
//如果缓存里面有数据;则取出数据(存储到datarecv); 无限期的等着(portMAX_DELAY),直到有数据
if(xQueueReceive(xQueueHandle1, &datarecv, portMAX_DELAY)) {
printf("datarecv=%s
", datarecv);
fflush(stdout);
}
}
}
//任务函数
static void function_1(void *pvParameters)
{
while(1)
{
vTaskDelay(1000 / portTICK_PERIOD_MS);//延时约1000ms
//向缓存管理中存储数据; 如果缓存不够,则等待(最长等待10ms); 存储失败返回 pdFALSE
xQueueSend(xQueueHandle1, (void *) &data, 10/portTICK_PERIOD_MS);
}
}
void app_main(void)
{
//初始化缓存管理,缓存数据的最大条数是5条,每条数据的长度是10字节
xQueueHandle1 = xQueueCreate(5, 10);
xTaskCreate(function, "function", 2048, NULL, 10, NULL);
xTaskCreate(function_1, "function_1", 2048, NULL, 11, NULL);
}
注意
初始化缓存的时候设置的数据长度是10字节
往缓存里面存储数据的时候,内部就会拷贝10字节.
所以大家伙一定要记住:你设置了缓存时的每一条数据是多大小,那么每次往缓存里面放数据的时候,内部就会拷贝多大小的数据.
如果在中断里面发送数据需要使用下面的函数(在后面的gpio章节中使用了这个)
xQueueSendFromISR
xQueueSendFromISR 和 xQueueSend 函数前两个参数相同
xQueueSendFromISR 的最后一个参数可以写 null
最后一个参数用于保存是否有高优先级任务准备就绪。
如果函数执行完毕后,此参数的数值是pdTRUE,说明有高优先级任务要执行,否则没有
portBASE_TYPE xHigherPriorityTaskWoken;
xQueueSendFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
if( xHigherPriorityTaskWoken ){
/* 实际宏使用了特殊接口 */
有高优先级别的任务要运行,可以在此切换任务.
}
如果在中断里面接收数据需要使用下面的函数
xQueueSendFromISR( xQueueHandle pxQueue, const void *pvItemToQueue, portBASE_TYPE *pxHigherPriorityTaskWoken );
相关文章
- 如何用DAX实现降噪加权移动平均
- mac下使用svn通过终端回退版本到某个版本号
- OushuDB 体系架构概览
- 因子挖掘:基于图神经网络与公司主营(附代码)
- FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
- 上传图片失败问题的排查记录
- OushuDB 高速互联网络
- FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
- FastAPI(八十三)实战开发《在线课程学习系统》--登陆接口测试
- FastAPI(八十四)实战开发《在线课程学习系统》--个人信息接口测试
- FastAPI(八十五)实战开发《在线课程学习系统》--修改密码接口测试
- Xcode真机调试遇到The identity used to sign the executable is no longer valid
- MySQL Aborted告警案例分析
- iOS获取设备UUID
- 经过一个月的探索,我如何将 AST 操作得跟呼吸一样自然
- iOS动画弹出式按钮
- 怎样升级spyder
- 解决提交到GitHub首页不显示的问题
- iOS获取屏幕宽高、设备型号、系统版本信息介绍1、获取屏幕的宽高2、获取设备的型号3、获取系统版本
- 怎么重新清空spyder里的代码