搜索
查看: 1434|回复: 4

[求助] 讨论下FreeRTOS抢占式任务调度

[复制链接]

该用户从未签到

4

主题

8

帖子

0

蝴蝶豆

初级会员

最后登录
2019-6-26
发表于 2019-6-6 17:00:16 | 显示全部楼层 |阅读模式
测试条件:
系统滴答时钟1ms。
FreeRTOS设定为抢占式调度。

两个任务,分别为Task1,任务优先级为2;Task2,任务优先级为1。
Task1任务
{
  xxx算法;
  delay(10);

}
Task2任务
{
  大于10ms的for循环
  delay(10);

}
先执行Task1,执行到delay时,切换到Task2,由于Task2执行“大于10ms的for循环”,这个过程中Task1的延时已经过了,这种情况下FreeRTOS如何调度任务?


点评

1,systick中断中将task1恢复,并且强制task2的cpu使用权,无论是什么情况,系统运行的永远是处于最高优先级的就绪任务,(临界段、中断上下文环境...  发表于 2019-6-18 14:08
回复

使用道具 举报

该用户从未签到

3

主题

16

帖子

1

蝴蝶豆

初级会员

最后登录
2019-10-31
发表于 2019-6-13 13:54:38 | 显示全部楼层
我猜应该是顺延?

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

8

帖子

0

蝴蝶豆

初级会员

最后登录
2019-6-26
 楼主| 发表于 2019-6-17 16:57:59 | 显示全部楼层
测试的情况是在低优先级的任务中,如果有高优先级的任务就绪,会抢占cpu资源去执行高优先级任务
这时候低优先级中即使已经在执行需要时间很长的算法,也会被操作系统的tick时钟或者其他中断给打断
这就是抢占式的调度,配置信息如下:
#define configUSE_PREEMPTION                     1
同时FreeRTOS能支持同优先级任务,可以使用任务间的时间片调度算法(即相同优先级的任务使用时间片轮回调度算法),如下配置:
#define configUSE_TIME_SLICING 1


回复 支持 反对

使用道具 举报

该用户从未签到

14

主题

76

帖子

9

蝴蝶豆

金牌会员

最后登录
2023-12-5
发表于 2020-2-10 22:16:10 | 显示全部楼层
既然Task2的优先级比Task1高,应该是Task1先执行,for循环中要大于10ms,则在10ms后满足条件进入,在执行下一行
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-25 08:33 , Processed in 1.164089 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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