硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1099|回复: 4
收起左侧

[FreeRTOS] 关于FREERtos下时间片调度和死循环线程的问题

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2024-11-26 10:51:51 | 显示全部楼层 |阅读模式
本帖最后由 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都试过了,都达不到时间片调度的效果:


求大佬帮我看看,感谢


企业微信截图_17325898409691.png
回复

使用道具 举报

354

主题

2162

回帖

3229

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3229
发表于 2024-11-26 16:22:05 | 显示全部楼层
本帖最后由 caicaptain2 于 2024-11-26 16:23 编辑

可能是cubemx生成的代码不合适。去FreeRTOSConfig.h里面看看具体的代码,是不是真的启用了时间片调度。另外,使用时间片的话,最好把 configtick_rate_hz改小一些。

百度了一下,这个页面可参考: https://blog.csdn.net/m0_5216204 ... m_relevant_index=10
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2024-11-26 17:46:46 | 显示全部楼层
caicaptain2 发表于 2024-11-26 16:22
可能是cubemx生成的代码不合适。去FreeRTOSConfig.h里面看看具体的代码,是不是真的启用了时间片调度。另外 ...

收到,感谢大佬费心,我再研究研究,有结果了跟帖
回复

使用道具 举报

3

主题

422

回帖

431

积分

高级会员

积分
431
发表于 2024-11-26 18:14:40 | 显示全部楼层
同优先级线程是时间片调度,不同优先级之间是抢占。如果任意高优先级线程存在使cpu饥饿的死循环,那比它低的优先级线程永远也别想得到运行机会!这就是绝大多数RTOS的调度方式。
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2024-11-29 08:44:12 | 显示全部楼层
emm,我也是刚移植好一个裸机工程到Freertos,可能说的不对。  首先你的这个app_main_task任务,我没有看到osDelay,那么你两个运行任务如果是cubemx创建优先级应该是low,两个任务一样,那么这个app_main_task任务因为没有osDelay就会一直运行,另一个任务运行不了,解决方法的话你把他的优先级调低,比 StartDefaultTask 低,或者 StartDefaultTask优先级调高都可以,再一个是给app_main_task加一点osDelay就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-26 00:26 , Processed in 0.249588 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表