硬汉嵌入式论坛

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

[μCOS-III] RTOS中当所有任务优先级一致时,按照时间片调度的话和while(1)循环有何区别呢?

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2024-7-31 15:20:33 | 显示全部楼层 |阅读模式
RTOS新人求助
回复

使用道具 举报

21

主题

481

回帖

544

积分

金牌会员

积分
544
发表于 2024-7-31 16:10:46 | 显示全部楼层
按分配的时间片切换
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115894
QQ
发表于 2024-8-1 08:59:51 | 显示全部楼层
全部按照分配的时间片大小执行,任务可以提前释放剩余时间片,切换到另一个任务。
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2024-8-5 17:02:26 | 显示全部楼层
eric2013 发表于 2024-8-1 08:59
全部按照分配的时间片大小执行,任务可以提前释放剩余时间片,切换到另一个任务。

感谢硬汉回复,如果程序按照分配的时间片执行的话,会不会出现实时性比不上While(1)的情况呢?毕竟死循环中是按顺序执行,时间片可能会存在人为分配的过长或过短的情况。这样的话感觉RTOS的优势不是很明显,毕竟还会引入调试问题以及占用部分内存问题,还望硬汉能指点一下
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115894
QQ
发表于 2024-8-6 08:27:29 | 显示全部楼层
bacdfdx 发表于 2024-8-5 17:02
感谢硬汉回复,如果程序按照分配的时间片执行的话,会不会出现实时性比不上While(1)的情况呢?毕竟死循环 ...

这个看场景,一类的任务适合设置到一个优先级下,比如多个GUI任务,多个USB任务,多个以太网任务,他们之间适合同优先级。
回复

使用道具 举报

5

主题

244

回帖

259

积分

高级会员

积分
259
发表于 2024-8-6 09:34:00 | 显示全部楼层
优先级相同的任务不一定是严格按时间片长度执行的,也不一定按创建顺序执行,具体要看是否有操作系统函数,比如系统的延时函数或者阻塞函数,这些也会切换任务

比如有3个任务,时间片都是10ms,任务1执行了5ms后调用了task_delay(25),此时它会立刻让出cpu给其他任务
假设现在切到了任务2,任务2需要执行11ms才调用task_delay(5),但是10ms时间片已经到了,就切到任务3
任务3里面有个阻塞等待函数,此时还不满足条件,所以直接跳过,继续切回任务1

此时任务1的delay时间还没到,而任务2的delay时间到了,所以会先切到任务2
任务2从上一轮切走的地方开始运行,所以这一次只执行了1ms就遇到了task_delay(),然后又继续切到任务3
任务3的阻塞条件也满足了,就开始执行任务3剩下的部分
如此往复

如果任务就按照裸机的形式写,完全不用task_delay和其他任何操作系统函数,这种情况下就看任务执行时间
比如还是上面的3个任务,任务1刚好10ms执行完,这时切到任务2,任务需要20ms才执行完,时间片到了之后会直接切到任务3,任务3不到10ms,在时间片切换之前会执行第2轮
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-25 14:19 , Processed in 0.287413 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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