本帖最后由 strving-kx 于 2024-11-26 10:59 编辑
最近调试FREERtos遇到了一个问题,请教大佬一下,非常感谢!问题如下:
我创建了3个同优先级的线程:[C] 纯文本查看 复制代码
void StartDefaultTask(void *argument)
{
for(;;)
{
osDelay(1000);
printf("111\r\n");
}
}
void app_main_task(void *argument)
{
/* USER CODE BEGIN StartDefaultTask */
for(;;)
{
}
}
还有一个线程被osEventFlagsWait(shell_evt_id, EVENT_MASK_RX_DATA, osFlagsWaitAny, osWaitForever);给阻塞
调试之后发现,只要有app_main_task这个死循环存在,会导致其余2个线程运行异常,第一个线程无法打印数据,被阻塞的线程在我触发了任务事件的情况下,仍然无法执行,只有osWaitForever改为具体的时间才能触发。
我的问题是:在FREERtos中,就算有个线程是空的死循环,在时间片调度的情况下,不是也会调度到其他线程执行任务吗,为什么会出现这样的情况?
另外,STM32CUBEMX中,这个配置(USE_PREEMPTION)我enable和disable都试过了,都达不到时间片调度的效果:

求大佬帮我看看,感谢
|