luoyiming1984 发表于 2011-2-15 10:56:26

RTOS在等待时可否让其CPU休眠?

最近在耍RTX,UCOS,也耍了Z-stack。
然后发现Z-stack有个厉害的地方,直接用RTC来做系统时钟。如果所有的任务都在延时等待,则进入休眠任务。在进休眠任务前先查看最近即将运行的任务还剩多少时间,再把唤醒定时器设置成那个时间。这样的效果就是:如果多个任务都在延时等待,那么系统进入低功耗模式,到了超时时间才唤醒。
UCOS不是也有个IDEL任务吗?这个任务可否有类似功能?

258963519 发表于 2011-2-15 11:10:22

可以的,我就这么用过,在cpu负担小的时候降低功耗的效果还是很明显的

ba_wang_mao 发表于 2011-2-15 11:48:49

UCOS不是也有个IDEL任务吗?这个任务可否有类似功能?

    应该可以在空闲任务中实现上述功能。

SL456688i 发表于 2011-2-16 00:44:04

IdleTask里面用Hook来实现休眠

luoyiming1984 发表于 2011-2-16 17:06:35

不上OS的系统会用RTC来做睡眠定时唤醒,低功耗可以到几个微安。
如果上了OS,假如有几个任务都在Delay或者处于等待状态,可否让CPU休眠?休眠了怎么唤醒?能否在Delay到来后或者有其它信号量触发后唤醒?

windy__xp 发表于 2011-2-16 17:27:59

是不是这样?用RTC定时器做系统滴答定时,空闲任务中,关闭主时钟,进入休眠模式即可,RTC唤醒后(系统滴答),检测是否有任务就绪,无则切换到空闲任务,进入休眠模式,有任务就绪再检测是否是休眠模式,如果是休眠模式,就唤醒后,切换到就绪任务……。

windy__xp 发表于 2011-2-16 17:37:59

如果工作任务是等待其他事件而进入等待模式,那么这个事件应该具有唤醒功能才行。

YFM_LMM 发表于 2011-2-16 21:38:35

LZ CPU唤醒是需要时钟启动时间的。

luoyiming1984 发表于 2011-2-19 01:22:08

我的设想是通过RTC和tick混合使用,通常任务延时,记录延时时的tick,然后再计算延时到达后的tick。如果进入了IDEL任务,就将剩下的延时交给中断唤醒,再sleep。唤醒后立即触发那个任务

xuefeihumei 发表于 2011-3-1 16:58:08

我认为要看个人用的硬件了,如果可以唤醒当然可以 如果不具有唤醒功能当然就不可以
页: [1]
查看完整版本: RTOS在等待时可否让其CPU休眠?