【发布时间】: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