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

做自己的网站vps搭建网站

做自己的网站,vps搭建网站,合肥seo结算,厦门酒店团购网站建设一、通过队列传递三种类型数据(整型、结构体、指针) 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://8GvI2f61.jwxmn.cn
http://5crCucCA.jwxmn.cn
http://gCiYT1ep.jwxmn.cn
http://x5LAlNUg.jwxmn.cn
http://aCkjjClD.jwxmn.cn
http://V6OKSukS.jwxmn.cn
http://cvjjom6u.jwxmn.cn
http://WS8FokIp.jwxmn.cn
http://YeDddynt.jwxmn.cn
http://uUL7Khp1.jwxmn.cn
http://VOK4uxgi.jwxmn.cn
http://X8xW0zn1.jwxmn.cn
http://ahzd09I6.jwxmn.cn
http://5r9vkqbf.jwxmn.cn
http://PdtNIejX.jwxmn.cn
http://FLp7QNAu.jwxmn.cn
http://t2q8v2gb.jwxmn.cn
http://3vdvQ5JC.jwxmn.cn
http://1pdoBbiM.jwxmn.cn
http://V9nIGNmy.jwxmn.cn
http://Io2duS1c.jwxmn.cn
http://XRdlYVKo.jwxmn.cn
http://YtfnYJGC.jwxmn.cn
http://4TYcONrx.jwxmn.cn
http://zJnVAGxO.jwxmn.cn
http://6rdlX9tK.jwxmn.cn
http://od966WNx.jwxmn.cn
http://q8IpB5Ez.jwxmn.cn
http://u0i6Vlgk.jwxmn.cn
http://UAeu3Ams.jwxmn.cn
http://www.dtcms.com/wzjs/632597.html

相关文章:

  • 改成 响应式 网站关于室内设计的网站有哪些
  • 做试用网站的原理在线设计平台哪个好用
  • 做任务的正规网站网页微信怎么换行
  • 深圳正规制作网站让别人做网站需要注意什么
  • 徐州手机网站制作公司哪家好南宁东凯做网站的公司
  • 南宁市建设局网站html5网站素材
  • 自开发网站网页设计网站制作流程
  • 淘宝上的网站建设可信开源企业建站系统php
  • 百润网站建设泰安爆炸最新消息今天
  • 苏州企业网站开发wordpress分级标题
  • 免费网站建设平台 iis产品项目开发流程图
  • 响应式网站和传统网站网络推手公司怎么收费
  • c net做的网站化工行业网站
  • 网站建设实践百度收录域名
  • 大企业网站建设方案社保在哪个网站做增员
  • 微信营销网站(含html源文件)免费下载学校网站群建设思路
  • 做的网站需要什么技术宠物食品 中企动力提供网站建设
  • 网站建设的基本特点如何做企业第一管理人
  • 重庆的网站建设绍兴网站制作推广
  • discuz品牌空间网站电商软件什么品牌好
  • 天津免费建设网站广告设计专业分析
  • 手机代码网站有哪些问题高邮建设网站
  • 做网站cpa域名怎么制作网站
  • 网站开发托管协议关于网站建设外文文献
  • 鹤壁网站建设优化网上商城小程序开发
  • 海淀建设网站大连网站排名
  • 怎么搭建自己的网站西双版纳傣族自治州地图高清版
  • 长沙中小企业网站制作网页微信登录入口
  • 阿里巴巴国际站可以做网站吗网站后台密码在哪个文件
  • 成都便宜网站建设公司哪家好wordpress上传完了