搜索
bottom↓
回复: 3

请教版主,多任务中如何实现MCU睡眠以节省能量?

[复制链接]

出0入0汤圆

发表于 2011-6-21 20:23:57 | 显示全部楼层 |阅读模式
请教版主,多任务中如何实现MCU睡眠以节省能量?

最近在做一些电池供电的项目,在使用多任务时却不知如何让MCU休眠?
网上也有一些常用的方法,比如:
在OS的Idle任务中让MCU休眠,也就是说MCU休眠到下一个时钟节拍的
时间,而我的时钟节拍的间隔也就几个毫秒,而MCU从休眠到唤醒估计也
在毫秒级别,这样显然不合适。但是时钟节拍又不能太长这样会影响实时性,
而程序时钟节拍也不能停,如果停止可能有系统永远也醒不来了。

因此我想一个方法,各位看看行不行?
在Idle任务中得到最少需要唤醒任务的时间(这个时间就是每个任务挂起的最小
超时时间比如OSTimeDly服务,OSSemPend等设置的超时间),记录此时需要
的时钟节拍数,然后让TICK延时这个时间,等到时间到,在ISR中根据前面记录的
时钟数,来进行多次OS的时钟节拍函数的调用。

以上是我个人一的些想法,各位看看能否实现!
不知各位没有更好的方法,说来大家学习学习!!

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

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

出0入0汤圆

 楼主| 发表于 2011-6-21 20:38:49 | 显示全部楼层
当然,这里还要注意,如果在时钟节拍的时间未到之前,有了其它
的中断产生,使用系统唤醒,这时要注意在中断程序的入口需判断
当前的时钟节拍已过了多少时间,也即已过了几个时钟节拍,以确定
调用几次时钟节拍函数。这样做就显得比较麻烦了,还是希望能有其它更好的
方法出现!!!

出0入0汤圆

发表于 2011-6-21 22:53:21 | 显示全部楼层
基本就是这个思想

另外最好能够找一个32768的定时器做参考时钟,进睡眠前,取当前系统最小定时器,然后设置到那个时刻才醒来。

当醒来时,读取32k计数器以做系统tick补偿,然后再行处理唤醒中断。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-23 10:34

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

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