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

生物科技网站建设方案百度热词指数

生物科技网站建设方案,百度热词指数,中型网站 收益,网页制作软件app免费文章目录目的基础说明相关函数使用演示总结目的 事件组是RTOS中相对常用的用于任务间交互的功能,这篇文章将对相关内容做个介绍。 本文代码测试环境见前面的文章:《FreeRTOS入门(01):基础说明与使用演示》 基础说明…

文章目录

  • 目的
  • 基础说明
  • 相关函数
  • 使用演示
  • 总结

目的

事件组是RTOS中相对常用的用于任务间交互的功能,这篇文章将对相关内容做个介绍。

本文代码测试环境见前面的文章:《FreeRTOS入门(01):基础说明与使用演示》

基础说明

事件组(EventGroup)和单片机硬件的事件或者中断有点像,每个事件组对象就是一个变量(寄存器)。如果 configUSE_16_BIT_TICKS 值为 0 这就是一个32位的变量,为 1 就是一个16位的变量。

事件组对象的高8位供FreeRTOS内部使用,剩余位供用户使用。每一个位(bit)表示一个事件发送,通常该位值为 0 ,表示未发生事件;值为 1 表示发生了事件。

事件组事件在设置的时候可以设置某一位,也可以同时设置某些位。等待事件的任务可以等待某一位有效,也可以等到某些位同时有效。事件被设置后会唤醒所有符合条件的任务(可以用作广播功能)。被唤醒的事件可以选择是否清除事件标志位。

相关函数

// 创建并返回事件组句柄
EventGroupHandle_t xEventGroupCreate( void )// 删除事件组
// 在被删除的事件组上阻塞的任务将被取消阻塞,并且报告事件组值为0
void vEventGroupDelete( EventGroupHandle_t xEventGroup )// 获取事件组中某个或某些位,如果不可用则阻塞
// uxBitsToWaitFor表示要等待的标志位(可以设置多个位)
// xClearOnExit为pdTRUE时会在事件发生后清除所等待的标志位,为pdFALSE则不清除
// xWaitForAllBits为pdTRUE时需要等所有等待的标志位都设置后才会返回,为pdFALSE时任意一位设置均会返回
EventBits_t xEventGroupWaitBits( const EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToWaitFor,const BaseType_t xClearOnExit,const BaseType_t xWaitForAllBits,TickType_t xTicksToWait )// 设置标志位
EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet )
// 清除标志位
EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear )// 事件组的设置与清除在中断中使用的版本,在中断中设置与清除事件组不会立即进行,而是会延时到后面的FreeRTOS守护进程中执行,所以可能需要设置下面才可使用
// INCLUDE_xEventGroupSetBitFromISR, configUSE_TIMERS, INCLUDE_xTimerPendFunctionCall, configUSE_TRACE_FACILITY
BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken )
BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear )// 获取当前事件组状态
EventBits_t xEventGroupGetBits( EventGroupHandle_t xEventGroup )
EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup )// 同步设置(写和等待合并的功能)
// uxBitsToSet为要写的位,uxBitsToWaitFor为要等待的位
EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet,const EventBits_t uxBitsToWaitFor,TickType_t xTicksToWait );

使用演示

下面是个基础使用的演示:

#include "debug.h"
#include "FreeRTOS.h"     // 引入头文件
#include "task.h"         // 引入头文件
#include "event_groups.h" // 引入头文件EventGroupHandle_t xEventGroup; // 事件组句柄void task1(void *pvParameters) {while(1) {xEventGroupSetBits(xEventGroup, 0b0011); // bit1 bit0 写1vTaskDelete(NULL);}
}void task2(void *pvParameters) {while(1) {vTaskDelay(500);xEventGroupSetBits(xEventGroup, 0b0100); // bit2 写1vTaskDelete(NULL);}
}void task3(void *pvParameters) {while(1) {// 当 bit0 为1时触发,响应后不清除标志位EventBits_t uxBits = xEventGroupWaitBits(xEventGroup, 0b0001, pdFALSE, pdFALSE, portMAX_DELAY);printf("t3-%d\r\n", uxBits); // 打印事件触发时的标志位vTaskDelay(300);}
}void task4(void *pvParameters) {while(1) {// 当 bit3 bit2 均为0时触发,响应后清除标志位EventBits_t uxBits = xEventGroupWaitBits(xEventGroup, 0b0110, pdTRUE, pdTRUE, portMAX_DELAY);printf("t4-%d\r\n", uxBits); // 打印事件触发时的标志位printf("t4-%d\r\n", xEventGroupGetBits(xEventGroup)); // 打印当前标志位xEventGroupClearBits(xEventGroup, 0x0001); // 清除标志位printf("t4-%d\r\n", xEventGroupGetBits(xEventGroup)); // 打印当前标志位}
}int main(void) {NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);SystemCoreClockUpdate();Delay_Init();USART_Printf_Init(115200);xEventGroup = xEventGroupCreate(); //xTaskCreate(task1, "task1", 256, NULL, 5, NULL);xTaskCreate(task2, "task2", 256, NULL, 5, NULL);xTaskCreate(task3, "task3", 256, NULL, 5, NULL);xTaskCreate(task4, "task4", 256, NULL, 5, NULL);vTaskStartScheduler(); // 任务调度,任务将在这里根据情况开始运行,程序将在这里无序循环while(1) {} // 程序不会运行到这里
}// 时间                   任务         xEventGroup
// tick 0000         0b0000
// tick 0000  task1  0b0011
// tick 0001  task3  0b0011 // 打印输出
// tick 0301  task3  0b0011 // 打印输出
// tick 0500  task2  0b0111
// tick 0501  task4  0b0111 // 打印输出
// tick 0501  task4  0b0001 // 打印输出
// tick 0501  task4  0b0000 // 打印输出

在这里插入图片描述

下面是个同步方式演示:

#include "debug.h"
#include "FreeRTOS.h"     // 引入头文件
#include "task.h"         // 引入头文件
#include "event_groups.h" // 引入头文件EventGroupHandle_t xEventGroup; // 事件组句柄void task1(void *pvParameters) {while(1) {printf("t1s1-%d\r\n", xEventGroupGetBits(xEventGroup)); // 打印事件触发时的标志位EventBits_t uxBits = xEventGroupSync(xEventGroup, 0b0001, 0b0011, portMAX_DELAY); // 设置0b0001,等待0b0011printf("t1s2-%d\r\n", uxBits); // 打印事件触发时的标志位vTaskDelete(NULL);}
}void task2(void *pvParameters) {while(1) {vTaskDelay(500);printf("t2s1-%d\r\n", xEventGroupGetBits(xEventGroup)); // 打印事件触发时的标志位EventBits_t uxBits = xEventGroupSync(xEventGroup, 0b0010, 0b0011, portMAX_DELAY); // 设置0b0010,等待0b0011printf("t2s2-%d\r\n", uxBits); // 打印事件触发时的标志位vTaskDelete(NULL);}
}int main(void) {NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);SystemCoreClockUpdate();Delay_Init();USART_Printf_Init(115200);xEventGroup = xEventGroupCreate(); //xTaskCreate(task1, "task1", 256, NULL, 5, NULL);xTaskCreate(task2, "task2", 256, NULL, 5, NULL);vTaskStartScheduler(); // 任务调度,任务将在这里根据情况开始运行,程序将在这里无序循环while(1) {} // 程序不会运行到这里
}

在这里插入图片描述

总结

就像本文基础说明中介绍的那样,事件组和单片机硬件的事件或者中断有点像,理解了这点的话事件组使用上其实并不复杂的。


文章转载自:
http://wanjiasubculture.xnLj.cn
http://wanjiaambisyllabic.xnLj.cn
http://wanjiamagdalene.xnLj.cn
http://wanjiagranddad.xnLj.cn
http://wanjiaeuxine.xnLj.cn
http://wanjiatanrec.xnLj.cn
http://wanjiatackify.xnLj.cn
http://wanjiaasla.xnLj.cn
http://wanjiacopolymerization.xnLj.cn
http://wanjiamarian.xnLj.cn
http://wanjialeatherneck.xnLj.cn
http://wanjiaengaging.xnLj.cn
http://wanjiasemitransparent.xnLj.cn
http://wanjiaknocker.xnLj.cn
http://wanjiaunderbidden.xnLj.cn
http://wanjiaisallobar.xnLj.cn
http://wanjiaseismograph.xnLj.cn
http://wanjiaalarmedly.xnLj.cn
http://wanjiachoriambic.xnLj.cn
http://wanjiajussive.xnLj.cn
http://wanjiachimar.xnLj.cn
http://wanjiaunprizable.xnLj.cn
http://wanjiaendear.xnLj.cn
http://wanjiaincreasedly.xnLj.cn
http://wanjianazirite.xnLj.cn
http://wanjiabandbox.xnLj.cn
http://wanjiahematogenic.xnLj.cn
http://wanjiabespatter.xnLj.cn
http://wanjiaforeplane.xnLj.cn
http://wanjiatoom.xnLj.cn
http://wanjiaculturati.xnLj.cn
http://wanjiaseptotomy.xnLj.cn
http://wanjiareforestation.xnLj.cn
http://wanjiaisopach.xnLj.cn
http://wanjiaimmensurable.xnLj.cn
http://wanjiasalomonian.xnLj.cn
http://wanjiatitubate.xnLj.cn
http://wanjiaual.xnLj.cn
http://wanjiacomate.xnLj.cn
http://wanjiaschatchen.xnLj.cn
http://wanjiaroadwork.xnLj.cn
http://wanjiabratwurst.xnLj.cn
http://wanjiahobgoblin.xnLj.cn
http://wanjiamca.xnLj.cn
http://wanjiadenicotinize.xnLj.cn
http://wanjiaglobin.xnLj.cn
http://wanjiarapprochement.xnLj.cn
http://wanjiaspectroscopic.xnLj.cn
http://wanjiaapropos.xnLj.cn
http://wanjiacapeline.xnLj.cn
http://wanjiaputatively.xnLj.cn
http://wanjiamandator.xnLj.cn
http://wanjiaefate.xnLj.cn
http://wanjiairrepleviable.xnLj.cn
http://wanjiaso.xnLj.cn
http://wanjiamignon.xnLj.cn
http://wanjiaconicity.xnLj.cn
http://wanjiamonster.xnLj.cn
http://wanjiamollification.xnLj.cn
http://wanjiahibernacle.xnLj.cn
http://wanjiahail.xnLj.cn
http://wanjiafastener.xnLj.cn
http://wanjiawhig.xnLj.cn
http://wanjiastalino.xnLj.cn
http://wanjiaphytol.xnLj.cn
http://wanjianzima.xnLj.cn
http://wanjiaenthymeme.xnLj.cn
http://wanjiator.xnLj.cn
http://wanjiawoodskin.xnLj.cn
http://wanjianutmeg.xnLj.cn
http://wanjiapancuronium.xnLj.cn
http://wanjiadeclot.xnLj.cn
http://wanjiareconstruction.xnLj.cn
http://wanjiaacosmistic.xnLj.cn
http://wanjiamultinomial.xnLj.cn
http://wanjiatreblinka.xnLj.cn
http://wanjiaquislism.xnLj.cn
http://wanjiavocationalize.xnLj.cn
http://wanjiamotivation.xnLj.cn
http://wanjiadoubleheader.xnLj.cn
http://www.15wanjia.com/news/125546.html

相关文章:

  • 西安网站建设地址花都网络推广seo公司
  • 网络营销项目策划书百度seo建议
  • wdcp搭建网站315影视行业
  • django网站开发视频教程下载电商平台有哪些
  • 泉州网站开发人员个人网站建站流程
  • 西安商城网站搭建免费影视软件靠什么赚钱
  • 车票在线制作网站优秀的网络搜索引擎营销案例
  • 四川省城乡建设厅官方网站如何查询域名注册人信息
  • 网站建设大德通众包福建seo
  • 宝安区建设交易网站网络服务是什么
  • 卖东西的网站怎么建设seo快速推广
  • 自己网站给别人网站做外链查询网 域名查询
  • 天津自助建站软件今日头条重大消息
  • 重庆实惠网站建设网络推广要求
  • 蓝海国际版网站建设系统推广app赚佣金平台有哪些
  • 做网站域名解析网络营销案例分析题
  • 新公司如何做网站seo服务是什么意思
  • 武汉建网公司网站建设重庆seo网站建设
  • java动态网站开发技术seo网络排名优化技巧
  • 门头设计百度小程序对网站seo
  • 南昌做网站装修的企业网址怎么推广
  • 大连手机自适应网站建设价格网站创建免费用户
  • 瑞昌市建设局网站seo外包公司需要什么
  • 网站 建设后台百度最新秒收录方法2023
  • 做网站怎么宣传百度手游app下载
  • 建筑学网站推荐2022网站快速收录技术
  • 张家口做网站便宜点的陕西网页设计
  • 深圳html5网站建设价格郑州网站制作公司哪家好
  • 建站程序免费下载百度竞价seo排名
  • 哪个网站上做ppt比较好看直通车推广技巧