neilxiang 发表于 2010-8-27 09:44:42

请教rt_thread_create()参数rt uint32 t tick的具体作用?

请教rt_thread_create()参数rt uint32 t tick的具体作用?

rt_thread_t rt_thread_create (const char* name,
                           void (*entry)(void* parameter),
                           void* parameter,
                           rt_uint32_t stack_size,
                           rt_uint8_t priority,
                           rt_uint32_t tick
                            )
中最后一个参数 tick编程手册中说:"时间片(tick) 的单位是操作系统的时钟节拍,当系统中存在相同优先级线程时,这个参数指
定线程一次调度能够运行的最大时间长度,这段时间片运行结束后,调度器自动选择下一个就绪的同优先级线程进行运行",

按手册的理解,此参数只对任务优先级相同的任务有影响,这样理解对吗?
那么如果创建的是不同优先级的任务,这个参数对不同优先级的任务有什么具体的意义呢,

ffxz 发表于 2010-8-27 11:40:15

是的,基本上只对同优先级线程有影响。这个参数至少要大于一定数值(例如2),因为时间片轮转调度有个误差,误差是1个时钟节拍。

cat_li 发表于 2010-8-27 13:36:18

想问一下,如果又同优先级的线程,是不是当前线程的时间到了之后,会强制退出当前线程,然后去调用其他的线程。如果没有相同优先级的线程,那么当前线程是否会受时间影响,还是说先退出,然后判断没有线程需要执行,在重新载入当前线程

ffxz 发表于 2010-8-27 16:26:34

同优先级调度,采用的是时间片轮转算法(且每个线程的时间片可配置):

当有多个相同优先级线程运行时,将各自消耗掉自己的时间片,例如T1、T2、T3,每个线程执行的代码都是while(1);

那么T1、T2、T3将各自在运行完它们的时间片后,让出处理机(让给相同优先级的就绪线程)。让出处理机以后,它的可执行时间片又恢复成它初始设置的时间片大小。如果此时没有其他相同优先级的就绪线程存在,那么它将继续运行(可用时间片是初始设置的时间片大小),在Cortex-M3上,并没有这个线程上下文切入再切出的动作。

luxinsun 发表于 2010-8-28 23:58:21

那么,我的任务优先级都是不同的,这个参数建议设为多少?0可以吗?

ffxz 发表于 2010-8-29 06:04:14

回复【1楼】ffxz
是的,基本上只对同优先级线程有影响。这个参数至少要大于一定数值(例如2),因为时间片轮转调度有个误差,误差是1个时钟节拍。
-----------------------------------------------------------------------

cat_li 发表于 2010-8-29 11:00:40

明白了,多谢ffxz的讲解。也就是说如果我的程序中如果没有相同优先级的线程,那么时间片就没什么影响,调度器会一次性的执行完当前线程,
页: [1]
查看完整版本: 请教rt_thread_create()参数rt uint32 t tick的具体作用?