搜索
bottom↓
回复: 3

最近新学RT-Thread,有个关于tick的小疑问

[复制链接]

出0入0汤圆

发表于 2011-9-20 13:09:18 | 显示全部楼层 |阅读模式
假设设定的时间片长度是 2ms
我的线程1只运行了0.5ms就sleep了,此时任务调度器会调度到线程2,但是这个时间片还剩下1.5ms。
如果其他任务是一个死循环,那么下一次调度是发生在1.5ms后,还是2ms后?
tick的长度是不变的吗?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-9-20 14:37:33 | 显示全部楼层
时间片作用于:
当线程1和线程2的优先级相同,CPU只可能同时运行其中一个.
而当两个线程都没有主动sleep时.某个线程会一直运行下去.
时间片用于限定当前线程的最大单次运行时间长度.

参考链接: 请教rt_thread_create()参数rt uint32 t tick的具体作用?  http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4233111

出0入0汤圆

 楼主| 发表于 2011-9-20 16:20:03 | 显示全部楼层
回复【1楼】aozima  
看了你给的帖子,大概弄懂了,谢谢~

出0入0汤圆

发表于 2011-9-20 17:03:04 | 显示全部楼层
有几个问题需要搞清楚:
1)系统定时器ticks周期是多少
2)“其他任务”优先级是否比线程2的还高
3)sleep多长时间
没有条件这里就假设系统定时器周期0.1ms,
1 假设有其他线程(非线程1)优先级比2还高,在线程2运行期间就绪了,那么下一次调度发生在下一次定时器ticks中断期间。
2 在线程2运行的2ms期间没有其他高优先级线程就绪,线程1和线程2同优先级,或者线程1比2的低,那么下一次调度发生在2ms后而不管sleep多长时间。
3 在线程2运行的2ms期间没有其他高优先级线程就绪,线程1优先级比线程2高,那就看sleep时间如果<2ms那么就会在sleep结束后立刻调度,如果sleep>2ms,那么就会在2ms后调度。

暂时只想到这几种情况,欢迎补充!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-15 23:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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