创建两个任务

接收者优先级比较高

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