wordpress 自动发卡,廊坊百度关键词优化怎么做,wordpress设置网站地址,做笔记的网站事件标志组简介
事件标志组#xff1a;用一个比特位来表示事件是否发生
事件标志组是一组事件标志位的集合#xff0c;可以简单理解为事件标志组就是一个整数。
事件标志组的特点#xff1a;
它的每一位表示一个事件#xff08;高八位不算#xff09;每一位事件的含义…事件标志组简介
事件标志组用一个比特位来表示事件是否发生
事件标志组是一组事件标志位的集合可以简单理解为事件标志组就是一个整数。
事件标志组的特点
它的每一位表示一个事件高八位不算每一位事件的含义幼用户自己决定这些位的值为1是表示事件发生了。任意任务或中断都可以读到这些位可以等待某一位成立或者等待多位同时成立configUSE_16_BIT_TICKS宏如果该宏为1则每个事件组包含8个可用的事件位如果为0则包含24个可用的事件位97。
事件标志组API函数
/*** brief 动态分配内存创建事件组函数* retval 返回成功创建的事件组的句柄返回NULL表示因内存空间不足创建失败*/
EventGroupHandle_t xEventGroupCreate(void);
/*** brief 将事件组某些位置位* param xEventGroup要设置位的事件组* param uxBitsToSet指定要在事件组中设置的一个或多个位的按位值例如设置为0x09表示置位3 和位0* retval 调用 xEventGroupSetBits()返回时事件组的值*/
EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet);/*** brief 将事件组某些位清零* param xEventGroup要在其中清除位的事件组* param uxBitsToSet表示要在事件组中清除一个或多个位的按位值* retval 返回清除指定位之前的事件组的值*/
EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToClear);/*** brief 上述两个函数的中断安全版本* param pxHigherPriorityTaskWoken用于通知应用程序编写者是否应该执行上下文切换* retval 消息已发送到RTOS守护进程任务则返回pdPASS否则将返回pdFAIL*/
BaseType_t xEventGroupSetBitsFromISR(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet,BaseType_t *pxHigherPriorityTaskWoken);BaseType_t xEventGroupClearBitsFromISR(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToClear);/*example1: 将事件组 EventGroup_Test 的位 1 和 3 置位*/
EventBits_t return_value;
return_value xEventGroupSetBits(EventGroup_Test, 0x0A);/*example2: 将事件组 EventGroup_Test 的位 0 和 2 清零*/
EventBits_t return_value;
return_value xEventGroupClearBits(EventGroup_Test, 0x05);/*** brief 读取事件组的当前值* param xEventGroup正在查询的事件组* retval 返回事件组当前的值*/
EventBits_t xEventGroupGetBits(EventGroupHandle_t xEventGroup);/*** brief 上述函数的中断安全版本*/
EventBits_t xEventGroupGetBitsFromISR(EventGroupHandle_t xEventGroup);/*** brief 等待事件组中多个事件位表示的事件成立* param xEventGroup所操作事件组的句柄* param uxBitsToWaitFor所等待事件位的掩码例如设置为0x05表示等待第0位和/或第2位* param xClearOnExitpdTRUE表示事件组条件成立退出阻塞状态时将掩码指定的所有位清零pdFALSE表示事件组条件成立退出阻塞状态时不将掩码指定的所有位清零* param xWaitForAllBitspdTRUE表示等待掩码中所有事件位都置1条件才算成立逻辑与pdFALSE表示等待掩码中所有事件位中一个置1条件就成立逻辑或* param xTicksToWait任务进入阻塞状态等待时间成立的超时节拍数* retval 返回事件位等待完成设置或阻塞时间过期时的事件组值*/
EventBits_t xEventGroupWaitBits(const EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToWaitFor,const BaseType_t xClearOnExit,const BaseType_t xWaitForAllBits,TickType_t xTicksToWait); 事件标志组API实验
void MyEventGroupSetFromISR(uint32_t event_bit)
{//参数event_bit0 表示发生事件bit0//参数event_bit1 表示发生事件bit1//参数event_bit2 表示发生事件bit2//......printf(MyEventGroupSetFromISR Event Bit%d\r\n,event_bit);BaseType_t xHigherPriorityTaskWoken pdFALSE;//在中断中调用xEventGroupSetBitsFromISR(myEventGroup,1event_bit,xHigherPriorityTaskWoken);portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
}#define EVENT_BIT0 (10)
#define EVENT_BIT1 (11)
#define EVENT_BIT2 (12)
#define EVENT_BIT3 (13)void StartMyTask1(void *argument)
{printf(StartMyTask1\r\n);uint32_t event_bits 0;for(;;){event_bits xEventGroupWaitBits(myEventGroup,EVENT_BIT0|EVENT_BIT1|EVENT_BIT2|EVENT_BIT3,pdTRUE,pdFALSE,portMAX_DELAY);printf(event_bits%d\r\n,event_bits);if((event_bits EVENT_BIT0) ! 0){printf(EVENT_BIT0... \r\n);}else if((event_bits EVENT_BIT1) ! 0){printf(EVENT_BIT1... \r\n);}else if((event_bits EVENT_BIT2) ! 0){printf(EVENT_BIT2... \r\n);}vTaskDelay(pdMS_TO_TICKS(500));//500ms}
}MyEventGroupSetFromISR Event Bit0
event_bits1
EVENT_BIT0...
MyEventGroupSetFromISR Event Bit1
event_bits2
EVENT_BIT1...
MyEventGroupSetFromISR Event Bit2
event_bits4
EVENT_BIT2...
MyEventGroupSetFromISR Event Bit3
event_bits8
MyEventGroupSetFromISR Event Bit2
event_bits4
EVENT_BIT2...
MyEventGroupSetFromISR Event Bit1
event_bits2
EVENT_BIT1...
MyEventGroupSetFromISR Event Bit0
event_bits1
EVENT_BIT0... 上述实验中是某一比特的事件发生后都会解除阻塞。如果我们改为如下 event_bits xEventGroupWaitBits(myEventGroup,EVENT_BIT0|EVENT_BIT1|EVENT_BIT2|EVENT_BIT3,pdTRUE,pdTRUE,portMAX_DELAY);则表示所有比特位事件都发生后才会解除阻塞。
MyEventGroupSetFromISR Event Bit0
MyEventGroupSetFromISR Event Bit1
MyEventGroupSetFromISR Event Bit2
MyEventGroupSetFromISR Event Bit3
event_bits15