一种降低ucos-ii系统功耗的方法

文档序号:6635848阅读:1687来源:国知局
一种降低ucos-ii系统功耗的方法
【专利摘要】本发明公开了一种降低ucos-ii系统功耗的方法,包括步骤:A1、进入空闲任务idle;A2、查找具有最小延时的等待任务;A3、设置定时器的时长为该最小延时。本发明根据ucos-ii系统任务的繁忙程度,使处理器尽量长时间处于低功耗模式,从而降低了ucos-ii系统功耗,且所有操作均在空闲任务idle里面实现,不会影响任务调度,提高了系统效率。
【专利说明】 —种降低ucos-1i系统功耗的方法

【技术领域】
[0001]本发明涉及ucos-1i系统【技术领域】,具体涉及一种降低ucos-1i系统功耗的方法。

【背景技术】
[0002]ucos-1i是一个实时操作系统,主要运用于工控、汽车、通信、移动、物联网等嵌入式设备。某些嵌入式设备对功耗有比较高的要求,需要一个稳定安全而且功耗低的操作系统。现在大部分处理器都支持低功耗模式(例如WFI),要达到最低功耗的目的,应该尽量使处理器处于低功耗模式。而ucos-1i的时钟频率是固定的,即以一个固定的周期产生一个定时中断唤醒已经休眠的操作系统。这样不根据系统任务的繁忙程度,频繁地唤醒处理器,会导致系统功耗增加。
[0003]一个操作系统需要一个滴答时钟作为系统的心跳时钟,该时钟驱动整个系统的任务管理和调度,而该心跳时钟都是用硬件的定时器产生的。在软件设计上,UCOS-1i的时钟频率是固定,即以一个固定的周期产生一个定时中断唤醒已经休眠的操作系统。没有根据系统任务的繁忙程度,频繁地唤醒处理器,导致处理器进入低功耗模式的时间变短,功耗增力口。假如UC0S-1i有几个任务,而且此时进入idle任务,距离任务就绪的最小延时大于固定时钟的周期,这样就算处理器被唤醒,也会再次进入idle任务,那么就是说明在最小延时期间的唤醒动作都是无意义,这样只会导致系统功耗的增加。如图1所示,ucos-1i有三个任务,假设现在是在tick7这个时刻,那么taskl距离下次调度到taskl还有5个tick,task2距离下次调度到task2还有2个tick, task3距离下次调度task3还有7个tick,即所有任务的最小延时是2个tick,那么在tick8的产生定时中断是没有意义的,只会唤醒处理器,增加功耗。


【发明内容】

[0004]本发明要解决的技术问题在于,针对现有技术的不足,提供一种降低ucos-1i系统功耗的方法,克服现有技术UCOS-1i系统因处理器根据静态时钟被频繁唤醒,导致系统功耗增加的缺陷。
[0005]本发明为解决上述技术问题所采用的技术方案为:
[0006]一种降低ucos-1i系统功耗的方法,包括步骤:
[0007]Al、进入空闲任务idle ;
[0008]A2、查找具有最小延时的等待任务;
[0009]A3、设置定时器的时长为该最小延时。
[0010]根据本发明的实施例,还包括步骤:
[0011]A4、所述定时器在该最小延时后触发中断服务函数;
[0012]A5、所述中断服务函数将当前系统时钟基数加上该最小延时,把所述等待任务的延时减去该最小延时;
[0013]A6、退出所述中断服务函数。
[0014]根据本发明的实施例,所述步骤A2包括步骤:在空闲任务idle里遍历等待任务链表,获取该最小延时。
[0015]根据本发明的实施例,在进入所述空闲任务idle后首先关闭中断,在设置所述定时器后开启中断。
[0016]实施本发明的技术方案,具有以下有益效果:本发明根据ucos-1i系统任务的繁忙程度,使处理器尽量长时间处于低功耗模式,从而降低了 ucos-1i系统功耗,且所有操作均在空闲任务idle里面实现,不会影响任务调度,提高了系统效率。

【专利附图】

【附图说明】
[0017]下面通过参考附图并结合实例具体地描述本发明,本发明的优点和实现方式将会更加明显,其中附图所示内容仅用于对本发明的解释说明,而不构成对本发明的任何意义上的限制,在附图中:
[0018]图1为现有技术任务调度时序示意图;
[0019]图2为本发明流程图;
[0020]图3为本发明查找最小延时的具体流程图;
[0021]图4为本发明执行定时器启动的中断服务函数流程图。

【具体实施方式】
[0022]如图2所示,本发明降低ucos-1i系统功耗的方法,包括步骤:
[0023]Al、进入空闲任务idle ;
[0024]A2、查找具有最小延时的等待任务;
[0025]A3、设置定时器的时长为该最小延时。
[0026]本发明是一种基于ucos-1i的动态时钟的设计方法,整个动态时钟的设计都是在系统的空闲任务idle里面实现的,在不影响任务调度执行效率和系统实时稳定的前提下,可以降低系统功耗,通过在idle任务里遍历等待态任务链表,获取所有等待态任务的最小延时,通过在空闲任务idle里动态的修改定时器的下一次定时长度,增加处理器进入低功耗模式的时间,减小动态功耗,以致减小整个系统的功耗。
[0027]本发明技术方案还包括步骤:
[0028]A4、所述定时器在该最小延时后触发中断服务函数;
[0029]A5、所述中断服务函数将当前系统时钟基数加上该最小延时,把所
[0030]述等待任务的延时减去该最小延时;
[0031]A6、退出所述中断服务函数。
[0032]如图3和图4所不,ucos-1i是一个多任务实时操作系统,系统正常运行时有多个任务不断的切换,当任务不繁忙时,便会切到idle任务,之所以选择在idle任务里面做动态时钟的操作,就是在idle任务里面操作对系统的性能的影响是最小的。当任务调度进入idle任务,首先为了保证此操作的原子性,必须先关闭处理的总中断,然后在ucos-1i的所有正在等待的任务里面查找出最小延时的任务,也就是退出idle任务之后就会切换过去的任务,ucos-1i用一个链表维护着所有等待任务,idle任务是排在链表尾,也就是链表的最后一个任务。void OSGetMinDly(void)首先获取等待链表头,判断是否为idle任务,如果不是,就判断该任务是否被系统主动挂起了,这种挂起跟信号量、邮箱等挂起不一样,这种挂起是系统主动挂起,也就是冻结了该任务,只有恢复该任务才能重新解冻,虽然已经被挂起,但仍在等待队列里面,所以得排除此种任务。然后就遍历整个链表里面的所有任务,找出最小延时。找出来的最小延时有三种情况,一是等待任务链表里面有任务下个tick就会被唤醒,那么就是把OSMinDly赋值为I ;二是最小延时大于定时器所能延时的最大延时数,已经超出了定时器的能力,那么只能把OSMinDly配置为定时器最大延时数;三是最小延时介于O和定时器最大延时数之间,直接赋值给OSMinDly。OSMinDly是一个全局变量,接着根据OSMinDly设置定时器的延时长度。接着使处理器进入低功耗模式,例如wfi。当定时器中断到来时,中断唤醒处理器,处理器退出低功耗模式,开中断,处理器执行定时器中断服务函数,接着退出idle任务。处理器执行定时器中断服务函数void OSTimeTick(void),流程图如图4所示,中断服务函数一进来就把系统的时钟基数加上0SMinDly(0STime+ =OSMinDly),获取等待链表头,然后遍历等待链表里面所有任务,把所有的任务的延时都减去OSMinDly,如果任务的延时为零,证明该任务的延时到期了,先判断该任务是否为事件挂起(信号量、邮箱、消息队列等),如果是的话,就把该任务的状态位都清掉,并把任务挂起状态位标记为延时timeout 了(任务由于信号量等挂起时会指定一个timeout,如果该timeout前还没等到相应的事件,就会被唤醒),如果该任务不是系统主动挂起的,那么就把该任务放到就绪任务里面,当退出中断时,会进行任务切换,就会切换到该任务。
[0033]本领域技术人员不脱离本发明的实质和精神,可以有多种变形方案实现本发明,以上所述仅为本发明较佳可行的实施例而已,并非因此局限本发明的权利范围,凡运用本发明说明书及附图内容所作的等效结构变化,均包含于本发明的权利范围之内。
【权利要求】
1.一种降低uC0S-1i系统功耗的方法,其特征在于,包括步骤: Al、进入空闲任务idle ; A2、查找具有最小延时的等待任务; A3、设置定时器的时长为该最小延时。
2.根据权利要求1所述的降低ucos-1i系统功耗的方法,其特征在于,还包括步骤: A4、所述定时器在该最小延时后触发中断服务函数; A5、所述中断服务函数将当前系统时钟基数加上该最小延时,把所述等待任务的延时减去该最小延时; A6、退出所述中断服务函数。
3.根据权利要求2所述的降低ucos-1i系统功耗的方法,其特征在于,所述步骤A2包括步骤:在空闲任务idle里遍历等待任务链表,获取该最小延时。
4.根据权利要求3所述的降低ucos-1i系统功耗的方法,其特征在于:在进入所述空闲任务idle后首先关闭中断,在设置所述定时器后开启中断。
【文档编号】G06F9/48GK104375620SQ201410691290
【公开日】2015年2月25日 申请日期:2014年11月25日 优先权日:2014年11月25日
【发明者】吴晓鹏 申请人:珠海全志科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1