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

做自己的网站冷门却好听的公司名称

做自己的网站,冷门却好听的公司名称,东莞小学网站建设,百度学术论文查重官网入口一、通过队列传递三种类型数据(整型、结构体、指针) 1.队列简介 FreeRTOS中的队列本质就是一个先入先出的缓冲区(FIFO,First Input First Output) 2.API简介 (1)创建队列的API &#xff08…

一、通过队列传递三种类型数据(整型、结构体、指针)

1.队列简介

  • FreeRTOS中的队列本质就是一个先入先出的缓冲区(FIFO,First Input First Output)
    在这里插入图片描述

2.API简介

(1)创建队列的API

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

(2)发送数据到队列的API

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

(3)从队列中接收数据的API

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

(4)查询当前队列中项的数量

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

3.示例代码及运行结果

(1)通过队列传递整型数据

#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 "esp_system.h"
#include "freertos/queue.h"       // add by lxlTaskHandle_t SendTask_Handle = NULL;
TaskHandle_t RecvTask_Handle = NULL;void SendTask(void *pvParam)
{QueueHandle_t QHandle = (QueueHandle_t)pvParam;BaseType_t xStatus;int i = 0;while(1){xStatus = xQueueSend(QHandle, &i, 0);if(xStatus == pdPASS){printf("Send Successfully!\n");}else{printf("Send Fail!\n");}i++;i%=8;vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void RecvTask(void *pvParam)
{QueueHandle_t QHandle = (QueueHandle_t)pvParam;BaseType_t xStatus;int i = 0;while(1){if(uxQueueMessagesWaiting(QHandle) != 0){xStatus = xQueueReceive(QHandle, &i, 0);if(xStatus == pdPASS){printf("recv:%d\n", i);}else{printf("recv fail\n");}}else{printf("No data in queue.\n");}vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void app_main(void)
{QueueHandle_t QHandle = NULL;QHandle = xQueueCreate(5, sizeof(int));if(QHandle != NULL){printf("Create Queue Successfully!\n");xTaskCreate(SendTask, "SendTask", 1024 *5, (void *)QHandle, 1, &SendTask_Handle);    //! FreeRTOS的任务优先级值越大,优先级越高;xTaskCreate(RecvTask, "RecvTask", 1024 *5, (void *)QHandle, 1, &RecvTask_Handle);}else{printf("Create Queue Fail\n");}
}

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

(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 "esp_system.h"
#include "freertos/queue.h"       // add by lxlTaskHandle_t SendTask_Handle = NULL;
TaskHandle_t RecvTask_Handle = NULL;typedef struct A_Struct{char MessageID;char Data;
} xStruct;void SendTask(void *pvParam)
{QueueHandle_t QHandle = (QueueHandle_t)pvParam;BaseType_t xStatus;xStruct xSendData = {0, 1};while(1){xStatus = xQueueSend(QHandle, &xSendData, 0);if(xStatus == pdPASS){printf("Send Successfully!\n");}else{printf("Send Fail!\n");}xSendData.MessageID++;xSendData.MessageID %= 8;vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void RecvTask(void *pvParam)
{QueueHandle_t QHandle = (QueueHandle_t)pvParam;BaseType_t xStatus;xStruct RecvData={0,0};while(1){if(uxQueueMessagesWaiting(QHandle) != 0){xStatus = xQueueReceive(QHandle, &RecvData, 0);if(xStatus == pdPASS){printf("recv:ID->%d;Data->%d\n", RecvData.MessageID, RecvData.Data);}else{printf("recv fail\n");}}else{printf("No data in queue.\n");}vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void app_main(void)
{QueueHandle_t QHandle = NULL;QHandle = xQueueCreate(5, sizeof(xStruct));if(QHandle != NULL){printf("Create Queue Successfully!\n");xTaskCreate(SendTask, "SendTask", 1024 *5, (void *)QHandle, 1, &SendTask_Handle);    //! FreeRTOS的任务优先级值越大,优先级越高;xTaskCreate(RecvTask, "RecvTask", 1024 *5, (void *)QHandle, 1, &RecvTask_Handle);}else{printf("Create Queue Fail\n");}
}

在这里插入图片描述

在这里插入图片描述

(3)通过队列传递指针类型的数据

#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 "esp_system.h"
#include "freertos/queue.h"       // add by lxlTaskHandle_t SendTask_Handle = NULL;
TaskHandle_t RecvTask_Handle = NULL;#define DATA_NUM    5
#define DATA_SIZE   50void SendTask(void *pvParam)
{QueueHandle_t QHandle = (QueueHandle_t)pvParam;BaseType_t xStatus;char * pStrToSend = NULL;int i = 0;while(1){pStrToSend = malloc(DATA_SIZE);snprintf(pStrToSend, DATA_SIZE, "Today is a good day! ->%d\r\n", i);xStatus = xQueueSend(QHandle, &pStrToSend, 0);      //! 注意此处传递的是指针的地址,即指针的指针;if(xStatus == pdPASS){printf("Send Successfully!\n");}else{printf("Send Fail!\n");}i++;i%=8;vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void RecvTask(void *pvParam)
{QueueHandle_t QHandle = (QueueHandle_t)pvParam;BaseType_t xStatus;char * pStrToRecv = NULL;while(1){if(uxQueueMessagesWaiting(QHandle) != 0){xStatus = xQueueReceive(QHandle, &pStrToRecv, 0);if(xStatus == pdPASS){printf("recv:%s\n", pStrToRecv);}else{printf("recv fail\n");}}else{printf("No data in queue.\n");}vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void app_main(void)
{QueueHandle_t QHandle = NULL;QHandle = xQueueCreate(DATA_NUM, DATA_SIZE);if(QHandle != NULL){printf("Create Queue Successfully!\n");xTaskCreate(SendTask, "SendTask", 1024 *5, (void *)QHandle, 1, &SendTask_Handle);    //! FreeRTOS的任务优先级值越大,优先级越高;xTaskCreate(RecvTask, "RecvTask", 1024 *5, (void *)QHandle, 1, &RecvTask_Handle);}else{printf("Create Queue Fail\n");}
}

在这里插入图片描述

在这里插入图片描述

二、队列多进单出传递数据

1.简介

在这里插入图片描述

  • 在队列多进单出的情况下,通常从队列接收数据的任务设置为较高的优先级,并且接收队列的API等待时间设置为portMAX_DELAY。这样当队列中没有数据时,从队列接收数据的任务就会阻塞等待;一旦队列中有数据,从队列接收数据的任务就会读取数据。向队列发送数据的任务可根据数据重要性分配优先级;

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 "esp_system.h"
#include "freertos/queue.h"       // add by lxlTaskHandle_t SendTask_Handle = NULL;
TaskHandle_t RecvTask_Handle = NULL;typedef struct 
{char DataID;int Data;
} Data_t;void SendTask1(void *pvParam)
{QueueHandle_t QHandle = (QueueHandle_t)pvParam;BaseType_t xStatus;Data_t SendData = {1, 11};while(1){xStatus = xQueueSend(QHandle, &SendData, 0);      //! 注意此处传递的是指针的地址,即指针的指针;if(xStatus == pdPASS){printf("Send Task 1 Successfully!\n");}else{printf("Send Task 1 Fail!\n");}vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void SendTask2(void *pvParam)
{QueueHandle_t QHandle = (QueueHandle_t)pvParam;BaseType_t xStatus;Data_t SendData = {2, 22};while(1){xStatus = xQueueSend(QHandle, &SendData, 0);      //! 注意此处传递的是指针的地址,即指针的指针;if(xStatus == pdPASS){printf("Send Task 2 Successfully!\n");}else{printf("Send Task 2 Fail!\n");}vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void RecvTask(void *pvParam)
{QueueHandle_t QHandle = (QueueHandle_t)pvParam;BaseType_t xStatus;Data_t RecvData = {0, 0};while(1){xStatus = xQueueReceive(QHandle, &RecvData, portMAX_DELAY);if(xStatus == pdPASS){printf("recv-> ID:%d, Data:%d\n", RecvData.DataID, RecvData.Data);}else{printf("recv fail\n");}}
}void app_main(void)
{QueueHandle_t QHandle = NULL;QHandle = xQueueCreate(5, sizeof(Data_t));if(QHandle != NULL){printf("Create Queue Successfully!\n");xTaskCreate(SendTask1, "SendTask1", 1024 *5, (void *)QHandle, 1, NULL);    //! FreeRTOS的任务优先级值越大,优先级越高;xTaskCreate(SendTask2, "SendTask2", 1024 *5, (void *)QHandle, 1, NULL);xTaskCreate(RecvTask, "RecvTask", 1024 *5, (void *)QHandle, 2, &RecvTask_Handle);}else{printf("Create Queue Fail\n");}
}

在这里插入图片描述

三、队列集合

1.简介

在这里插入图片描述

2.API简介

(1)创建队列集合

在这里插入图片描述

(2)将队列添加到队列集合

在这里插入图片描述

(3)从队列集合中选择有数据的队列

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

(4)官方示例

在这里插入图片描述

3.示例代码及运行结果

#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 "esp_system.h"
#include "freertos/queue.h"       // add by lxlTaskHandle_t SendTask_Handle = NULL;
TaskHandle_t RecvTask_Handle = NULL;typedef struct 
{char DataID;int Data;
} Data_t;void SendTask1(void *pvParam)
{QueueHandle_t QHandle = (QueueHandle_t)pvParam;BaseType_t xStatus;Data_t SendData = {1, 11};while(1){xStatus = xQueueSend(QHandle, &SendData, 0);      //! 注意此处传递的是指针的地址,即指针的指针;if(xStatus == pdPASS){printf("Send Task 1 Successfully!\n");}else{printf("Send Task 1 Fail!\n");}vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void SendTask2(void *pvParam)
{QueueHandle_t QHandle = (QueueHandle_t)pvParam;BaseType_t xStatus;Data_t SendData = {2, 22};while(1){xStatus = xQueueSend(QHandle, &SendData, 0);      //! 注意此处传递的是指针的地址,即指针的指针;if(xStatus == pdPASS){printf("Send Task 2 Successfully!\n");}else{printf("Send Task 2 Fail!\n");}vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void RecvTask(void *pvParam)
{QueueSetHandle_t QueueSet = (QueueSetHandle_t)pvParam;QueueSetMemberHandle_t QueueData;BaseType_t xStatus;Data_t RecvData = {0, 0};while(1){QueueData = xQueueSelectFromSet(QueueSet, portMAX_DELAY);xStatus = xQueueReceive(QueueData, &RecvData, portMAX_DELAY);if(xStatus == pdPASS){printf("recv-> ID:%d, Data:%d\n", RecvData.DataID, RecvData.Data);}else{printf("recv fail\n");}}
}void app_main(void)
{QueueHandle_t QHandle1 = NULL;QHandle1 = xQueueCreate(5, sizeof(Data_t));QueueHandle_t QHandle2 = NULL;QHandle2 = xQueueCreate(5, sizeof(Data_t));QueueSetHandle_t QueueSet;QueueSet = xQueueCreateSet(10);     // 5+5xQueueAddToSet(QHandle1, QueueSet);xQueueAddToSet(QHandle2, QueueSet);if((QHandle1 != NULL) && (QHandle2 != NULL) && (QueueSet != NULL)){printf("Create Queue Successfully!\n");xTaskCreate(SendTask1, "SendTask1", 1024 *5, (void *)QHandle1, 1, NULL);    //! FreeRTOS的任务优先级值越大,优先级越高;xTaskCreate(SendTask2, "SendTask2", 1024 *5, (void *)QHandle2, 1, NULL);xTaskCreate(RecvTask, "RecvTask", 1024 *5, (void *)QueueSet, 2, &RecvTask_Handle);}else{printf("Create Queue Fail\n");}
}

在这里插入图片描述

四、队列邮箱

1.简介

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

2.API简介

(1)创建队列邮箱(使用创建队列的API,把项目数设为1即可)

在这里插入图片描述

(2)向邮箱写数据

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

(3)从邮箱中读数据(读取后数据依然保存在队列中)

在这里插入图片描述

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

3.示例代码及运行结果

#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 "esp_system.h"
#include "freertos/queue.h"       // add by lxlTaskHandle_t SendTask_Handle = NULL;
TaskHandle_t RecvTask_Handle = NULL;typedef struct 
{char DataID;int Data;
} Data_t;void WriteTask(void *pvParam)
{QueueHandle_t Mailbox = (QueueHandle_t)pvParam;BaseType_t xStatus;Data_t SendData = {1, 1};while(1){xStatus = xQueueOverwrite(Mailbox, &SendData);  if(xStatus == pdPASS){printf("Overwrite Mail Successfully!\n");}else{printf("Overwrite Mail Fail!\n");}SendData.Data ++;SendData.Data %= 8;vTaskDelay(6000 / portTICK_PERIOD_MS);}
}void ReadTask1(void *pvParam)
{QueueHandle_t Mailbox = (QueueHandle_t)pvParam;BaseType_t xStatus;Data_t SendData = {0, 0};while(1){xStatus = xQueuePeek(Mailbox, &SendData, portMAX_DELAY);      if(xStatus == pdPASS){printf("Read Mail_1 Successfully!->ID:%d, Data:%d\n", SendData.DataID, SendData.Data);}else{printf("Read Mail_1 Fail!\n");}vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void ReadTask2(void *pvParam)
{QueueHandle_t Mailbox = (QueueHandle_t)pvParam;BaseType_t xStatus;Data_t SendData = {0, 0};while(1){xStatus = xQueuePeek(Mailbox, &SendData, portMAX_DELAY);      if(xStatus == pdPASS){printf("Read Mail_2 Successfully!->ID:%d, Data:%d\n", SendData.DataID, SendData.Data);}else{printf("Read Mail_2 Fail!\n");}vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void ReadTask3(void *pvParam)
{QueueHandle_t Mailbox = (QueueHandle_t)pvParam;BaseType_t xStatus;Data_t SendData = {0, 0};while(1){xStatus = xQueuePeek(Mailbox, &SendData, portMAX_DELAY);      if(xStatus == pdPASS){printf("Read Mail_3 Successfully!->ID:%d, Data:%d\n", SendData.DataID, SendData.Data);}else{printf("Read Mail_3 Fail!\n");}vTaskDelay(1000 / portTICK_PERIOD_MS);}
}void app_main(void)
{QueueHandle_t Mailbox = NULL;Mailbox = xQueueCreate(1, sizeof(Data_t));      // 队列邮箱项目个数为1if(Mailbox != NULL){printf("Create Queue Successfully!\n");xTaskCreate(WriteTask, "WriteTask", 1024 *5, (void *)Mailbox, 1, NULL);    //! FreeRTOS的任务优先级值越大,优先级越高;xTaskCreate(ReadTask1, "ReadTask1", 1024 *5, (void *)Mailbox, 2, NULL);xTaskCreate(ReadTask2, "ReadTask1", 1024 *5, (void *)Mailbox, 2, NULL);xTaskCreate(ReadTask3, "ReadTask1", 1024 *5, (void *)Mailbox, 2, NULL);}else{printf("Create Queue Fail\n");}
}

在这里插入图片描述


文章转载自:

http://VmaPTmb4.bhdhL.cn
http://Dvl514ey.bhdhL.cn
http://MI6AZ3B1.bhdhL.cn
http://9SihpKla.bhdhL.cn
http://ZPFdbLzJ.bhdhL.cn
http://WsjAQeWC.bhdhL.cn
http://NGQbuOox.bhdhL.cn
http://gy3FSkV5.bhdhL.cn
http://qTzFioiH.bhdhL.cn
http://RiQ827En.bhdhL.cn
http://BzPJtJv1.bhdhL.cn
http://f8nvwYFs.bhdhL.cn
http://SH01LYPH.bhdhL.cn
http://HGLUFsmm.bhdhL.cn
http://7sO6mWQG.bhdhL.cn
http://mEF9qeNj.bhdhL.cn
http://mSINSnou.bhdhL.cn
http://tM4tcwsd.bhdhL.cn
http://MsvY0jZ8.bhdhL.cn
http://RX6Swkw0.bhdhL.cn
http://cjXBch3J.bhdhL.cn
http://zLH0oUOm.bhdhL.cn
http://y4JUQxxt.bhdhL.cn
http://G1zBHqkH.bhdhL.cn
http://JITs8PkB.bhdhL.cn
http://rWE95vDH.bhdhL.cn
http://edrITed1.bhdhL.cn
http://avzXnSGX.bhdhL.cn
http://XjYVqM9M.bhdhL.cn
http://sBE7ZmJL.bhdhL.cn
http://www.dtcms.com/wzjs/603655.html

相关文章:

  • 网站建设弹窗代码福州高端网站建设
  • 电商公司做网站东莞哪些地方是风险区
  • 旅游网站建设的意义wordpress主题字体大小
  • 花生壳动态域名申请游戏行业seo整站优化
  • cmd iis重启单个网站wordpress评论表单
  • 上海 网站建设业务营销方法桂林尚品网络做的网站好不好
  • 苏州做网站公司乛 苏州聚尚网络汽车网络营销分析报告
  • psd做网站切片博客自适应模板
  • 玄武模板网站制作品牌网站后台编辑教程
  • 郑州市网站空间服务公司中国网站排名榜
  • 免费网站模板之家网站推广策划思路是什么
  • 建立旅游网站的目的wordpress餐饮
  • 做自己的网站要多少钱wordpress贷款主题
  • 西安网站建设 北郊wordpress 数据库配置错误
  • 专门做分析图的网站公司推广方法
  • 精品课程网站建设 公司建立个人网站流程
  • php访问网站山东网站建设推广
  • 网站蜘蛛怎么看临清网站建设临清
  • 网站认证必须做吗建行手机银行app
  • 如何做学校网站导航wordpress模板下载
  • 长春网站制作都找源晟27电销卡购买平台
  • 什么网站都可以进入的浏览器php 开源cms 企业网站
  • 浦口区网站建设技术指导单页网站cpa虚拟主机
  • 商城系统网站模板都有什么网站
  • 黄石做网站建设的p2p网站审批
  • 做地方生活网站西安网app
  • 网站制作知识建一个个人网站一年多少钱
  • 建设课程网站的目的建设网络平台绩效目标申报表
  • 大型门户网站开发费用网络推广有几种方式
  • 电子商务网站开发成本wordpress页面缓慢