更新时间:2021-07-08 GMT+08:00
分享

概述

基本概念

软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器。当经过设定的Tick数后,会触发用户自定义的回调函数。

硬件定时器受硬件的限制,数量上不足以满足用户的实际需求。因此为了满足用户需求,提供更多的定时器,Huawei LiteOS提供了软件定时器功能,支持如下特性:

  • 创建软件定时器。
  • 启动软件定时器。
  • 停止软件定时器。
  • 删除软件定时器。
  • 获取软件定时器剩余Tick数。
  • 可配置支持的软件定时器个数。

运作机制

软件定时器是系统资源,在模块初始化的时候已经分配了一块连续内存。

软件定时器使用了系统的一个队列和一个任务资源,软件定时器的触发遵循队列规则,先进先出。定时时间短的定时器总是比定时时间长的靠近队列头,满足优先触发的准则。

软件定时器以Tick为基本计时单位,当创建并启动一个软件定时器时,Huawei LiteOS会根据当前系统Tick时间及设置的定时时长确定该定时器的到期Tick时间,并将该定时器控制结构挂入计时全局链表。

当Tick中断到来时,在Tick中断处理函数中扫描软件定时器的计时全局链表,检查是否有定时器超时,若有则将超时的定时器记录下来。Tick中断处理函数结束后,软件定时器任务(优先级为最高)被唤醒,在该任务中调用已经记录下来的定时器的回调函数。

定时器状态

  • OS_SWTMR_STATUS_UNUSED(定时器未使用)

    系统在定时器模块初始化时,会将系统中所有定时器资源初始化成该状态。

  • OS_SWTMR_STATUS_TICKING(定时器处于计数状态)

    在定时器创建后调用LOS_SwtmrStart接口启动,定时器将变成该状态,是定时器运行时的状态。

  • OS_SWTMR_STATUS_CREATED(定时器创建后未启动,或已停止)

    定时器创建后,不处于计数状态时,定时器将变成该状态。

定时器模式

软件定时器提供了三类模式:

  • 单次触发定时器,这类定时器在启动后只会触发一次定时器事件,然后定时器自动删除。
  • 周期触发定时器,这类定时器会周期性的触发定时器事件,直到用户手动停止定时器,否则将永远持续执行下去。
  • 单次触发定时器,但这类定时器超时触发后不会自动删除,需要调用定时器删除接口删除定时器。
分享:

    相关文档

    相关产品