php网站制作 青岛,河池公司网站开发价格,wordpress 页面空白,制作旅游网站网页的代码事件组概述
事件组的作用#xff1a;
可以等待某一个事件发生可以等待若干个事件发生可以等待若干个事件中的某一个事件发生
同步点是事件组的另一个使用方式#xff0c;它可以让多个任务进行阻塞等待#xff0c;当全部事件完成后#xff0c;再一起解除任务的阻塞。常常…事件组概述
事件组的作用
可以等待某一个事件发生可以等待若干个事件发生可以等待若干个事件中的某一个事件发生
同步点是事件组的另一个使用方式它可以让多个任务进行阻塞等待当全部事件完成后再一起解除任务的阻塞。常常用于合作关系的情况。
相关函数
创建事件组
函数声明如下
EventGroupHandle_t xEventGroupCreate( void )
返回值事件组的句柄
设置事件组
函数声明如下
EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet )
xEventGroup事件组的句柄设置哪一个事件组
uxBitsToSet 设置哪一个事件以bit传入设置bit3就传入 (13)设置多个可用 ‘ | ’实现
等待事件组
函数声明如下
EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToWaitFor,const BaseType_t xClearOnExit,const BaseType_t xWaitForAllBits,TickType_t xTicksToWait )
xEventGroup事件组的句柄设置哪一个事件组
uxBitsToWaitFor要等待的事件以bit传入
xClearOnExit当函数返回之前是否清除这个事件。传入pdFALSE、pdTRUE
xWaitForAllBits是否等待全部
传入pdFALSE代表有一个事件发生即可解除阻塞传入pdTRUE代表必须全部事件发生才可解除阻塞
xTicksToWait 超时时间
同步点
函数声明如下
EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet,const EventBits_t uxBitsToWaitFor,TickType_t xTicksToWait )
xEventGroup事件组的句柄设置哪一个事件组
uxBitsToSet设置自己做完了哪一个事件以bit传入
uxBitsToWaitFor要等待哪些事件完成以bit传入只有当全部等待的事件完成后才可退出阻塞
xTicksToWait 超时
uxBitsToWaitFor设置的事件都完成后多个任务会同时从这个函数退出来不再阻塞。退出函数之后会自动清除uxBitsToWaitFor设置的事件的位
验证实验
现在有3个任务任务1在做一件很长时间的事情任务2也在做一个很长时间的事情任务3在等待这两个任务中其中一个完成后打印task finish字符串。
具体代码实现如下
EventGroupHandle_t xEventHandle_Test;/* 事件组句柄 */
void TaskAFunction(void *param){int i0;int j0;while(1){/* 做一个很长时间的任务 */for(i0;i10000;i){j;}/* 设置事件0 */xEventGroupSetBits(xEventHandle_Test,10);}
}void TaskBFunction(void *param){int i0;int j0;while(1){/* 做一个很长时间的任务 */for(i0;i20000;i){j;}/* 设置事件1 */xEventGroupSetBits(xEventHandle_Test,11);}
}
void TaskCFunction(void *param){while(1){/* 等待事件组pdFALSE代表等待的事件有一个发生即可解除阻塞 */xEventGroupWaitBits(xEventHandle_Test,(10)|(11),pdTRUE,pdFALSE,portMAX_DELAY);printf(task finish\r\n);}
}int main( void )
{TaskHandle_t xHandleTask1;TaskHandle_t xHandleTask2;TaskHandle_t xHandleTask3;prvSetupHardware();SerialPortInit();printf(UART TEST\r\n);/* 创建事件组 */xEventHandle_Test xEventGroupCreate();xTaskCreate(TaskAFunction,TaskA,100,(void*)NULL,1,xHandleTask1);xTaskCreate(TaskBFunction,TaskB,100,(void*)NULL,1,xHandleTask2);xTaskCreate(TaskCFunction,TaskC,100,(void*)NULL,1,xHandleTask3);vTaskStartScheduler();return 0;
}