1.创建事件组
EventGroupHandle_t myxEventGroupHandle_t = NULL;
myxEventGroupHandle_t = xEventGroupCreate();
if(myxEventGroupHandle_t == 0)
strcat(temp,"event fail");
else
strcat(temp,"event suc");
2.发布事件(此处为中断中调用所以调用xEventGroupSetBitsFromISR函数)
void ExtInt09_Callback(void)
{
BaseType_t pxHigherPriorityTaskWoken=pdFALSE;
uint32_t ulReturn;
uint16_t event;
ulReturn = taskENTER_CRITICAL_FROM_ISR();//进入临界断
if (SET == EXTINT_GetExtIntStatus(EXTINT_CH09))
{
//Touch_Int();
//vTaskNotifyGiveFromISR();
EXTINT_ClearExtIntStatus(EXTINT_CH09);
// 发送事件请求
pxHigherPriorityTaskWoken=pdFALSE;
event=EVENT7;
xEventGroupSetBitsFromISR(myxEventGroupHandle_t,event,
&pxHigherPriorityTaskWoken);
/// 如果需要就切换任务
portYIELD_FROM_ISR(pxHigherPriorityTaskWoken);
}
taskEXIT_CRITICAL_FROM_ISR( ulReturn ); //退出临界断
}
3. 任务中阻塞等待事件标志.
void vTouchTask(void *pvParameters)
{
BaseType_t r_event;
uint8_t test=0;
while(1)
{
r_event=xEventGroupWaitBits(myxEventGroupHandle_t,EVENT7|EVENT8,pdTRUE,pdFALSE,portMAX_DELAY);
{
Touch_Int();
}
}
}