OpenEdv-开源电子网

标题: ucos时间片轮转调度例程,对时间片的一些理解问题 [打印本页]

作者: 杨进的爸爸    时间: 2019-11-25 22:44
标题: ucos时间片轮转调度例程,对时间片的一些理解问题
刚刚看了原子哥ucos关于时间片轮转调度,对于例程有一些疑惑。在原子哥的视频里,创建任务时,如果时间片的数不够(是1或2)的时候,就会在串口打印出现一些问题。在例程中,每个任务连续打印5次,自定义的字符串。我的疑问是当时间片为2时候,也有10ms一个时间执行一次任务,按理说应该是足够的(因为我看了一下连续打印5次到串口没有用到延时之类的函数,按理说是一瞬间,应该比10ms短),为什么会出现执行时间不足,不能完整打印完字符串,是什么在制约它。而且时间片再短(为1时),每个任务都还是执行断开打印出来都是”task1:“和“1234/r/n”这样隔开,为什么呢,不能是“task1:12”和“34/r/n”这样随机断开呢,原因又是什么。

作者: 一介丨布衣    时间: 2020-5-5 13:27
我也写过你一样的程序,时间片给很长也同样断开,有个很奇怪的现象,把printf里面加个%d,取i的值,时间片给够的话,能正常打印。但同样的我还是没解决这样的问题,建议尽量不使用相同优先级写程序。容易发生错误。
作者: ruopan    时间: 2020-5-19 09:43
(OS_TICK          )0,        //当使能时间片轮转时的时间片长度,为0时为默认长度,你设置为3是时间片整体为3MS不是三个时间片时间片太短导致任务没有完成就进行时间片轮转调度启用下一个任务,加长时间片保证整个任务完成,建议你看看UCOS开发手册6.1.1章节和6.3.3章节

如有不对情指正。
作者: 降龙    时间: 2021-5-6 10:47
帮顶!
作者: 聚四氟乙烯    时间: 2021-7-24 13:34
同问,帮顶




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4