我在我的 STM32F303VCx 上集成了 FreeRTOS cmsis_v2 并遇到了一个问题,然后在阻止任务以等待另一个任务的操作批准时使用事件标志。
如果任务执行以下代码,所有其他任务的运行时间最短(可以理解,因为 OS 不断检查 evt_flg):
for(;;)
{
flag = osEventFlagsWait (evt_flg, EventOccured, osFlagsWaitAny, 0);
if (flag == EventOccured)
{
/* Task main route */
osEventFlagsClear (evt_flg,EventOccured);
}
}
但是如果将超时设置为osWaitForver
: osEventFlagsWait (evt_flg, EventOccured, osFlagsWaitAny, osWaitForver )
,整个程序就会进入 HardFault。
这种行为的最佳解决方案是什么?我需要任务等待一个标志并且不阻止其他标志运行,例如终端输入读取。