【问题标题】:FreeRTOS Event posted but not handledFreeRTOS 事件已发布但未处理
【发布时间】:2021-12-05 16:09:23
【问题描述】:

我有一个任务在处理每个事件之前等待设置事件位。事件完成后,我手动清除单个事件标志。但是,在极少数情况下,会发布事件但未处理。如何确保不会错过任何活动?

while(1)
{
  event = xEventGroupWaitBits(measurement_task_event,
        MEASUREMENTTASK_EVENT_ALL, false, false, portMAX_DELAY);

  if (event & EVENT_BIT1)
    {
      //handle event
      xEventGroupClearBits(measurement_task_event, EVENT_BIT1);

    }
} 

事件 1 从 50 毫秒定时器的中断中调用,是迄今为止最频繁的事件。其他事件由其他任务和中断混合调用。

我目前的理论是,当任务正在处理其他事件时,中断正在发布一个事件。原来我有

  event = xEventGroupWaitBits(measurement_task_event,
        MEASUREMENTTASK_EVENT_ALL, true, false, portMAX_DELAY);

完成后自动清除所有标志。我曾希望手动清除的更改可以解决此问题。

确保处理所有事件的正确方法是什么?

【问题讨论】:

  • 错过了哪些事件,EVENT_BIT1 还是其他?显示处理其他事件的代码。您共享的代码很简单,我在这里没有看到问题。

标签: c event-handling embedded freertos


【解决方案1】:

看起来您已经建立了竞争条件,因为您正在等待一段时间并单独清除该位。看看ClearOnExit parameter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-27
    • 2023-04-04
    • 1970-01-01
    • 2016-11-11
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多