Task Notifications#

  • 同一时间多次发送任务通知,会被覆盖
void TaskA(void *argument)
{
    osThreadFlagsSet(TaskBHandle,START_SEND_CMD);
    osDelay(1);
    osThreadFlagsSet(TaskBHandle,START_SEND_CMD);
    osDelay(1);
    osThreadFlagsSet(TaskBHandle,START_SEND_CMD);
    osDelay(1);

  for(;;)
  {
    osDelay(1000);
  }
}
void TaskB(void *argument)
{

  /* 延时3秒,等待任务A发送完任务通知 */
  osDelay(3000);

  for(;;)
  {
    osThreadFlagsWait(START_SEND_CMD,osFlagsWaitAll,osWaitForever;
    osDelay(3000);
    cnt++;
  }

}

假设TaskA的优先级不小于TaskB,则TaskA将优先发送完3次任务通知给TaskB,试验结果是TaskB的任务只会执行1次。