创建两个任务
接收者优先级比较高
static TaskHandle_t xHandlerTaskHandle = NULL;
xTaskCreate(vEventHandlerTask,"Handler",configMINIMAL_STACK_SIZE,NULL,2,&xHandlerTaskHandle);
xTaskCreate(vEventGeneratorTask,"Generator",configMINIMAL_STACK_SIZE,NULL,1,NULL);
通知发送者
static void vEventGeneratorTask(void *pvParameters)
{
(void)pvParameters;
for (;;)
{
vTaskDelay(pdMS_TO_TICKS(500));
xTaskNotifyGive(xHandlerTaskHandle); //就是给一个简单的通知
}
}
通知接收者
static void vEventHandlerTask(void *pvParameters)
{
(void)pvParameters;
for (;;)
{
ulTaskNotifyTake(pdTRUE, portMAX_DELAY); //返回值为1
}
}
如果当前没有通知:
Handler:Running → Blocked
时序
Handler开始运行
→ 没有通知
→ ulTaskNotifyTake()
→ Handler进入Blocked
Generator延时结束
→ Generator运行
→ xTaskNotifyGive()
→ Handler通知值加一
→ Handler恢复Ready
Handler优先级更高
→ Handler抢占Generator
→ ulTaskNotifyTake()返回1
→ Handler处理事件
→ Handler再次等待
→ Handler进入Blocked
Generator恢复运行
→ 输出“continues after give”
→ 再次延时500ms