luat_timer.md 1.4 KB

Luat定时器

基本信息

  • 起草日期: 2019-11-25
  • 设计人员: wendal

为什么需要定时器

  1. 单次定时的需要, 例如10分钟后执行温度测量
  2. 循环定时的需要, 每5分钟联网一次,发送心跳
  3. sys.wait的需要, 通过定时器机制实现lua的延时执行

设计思路和边界

  1. 基于rtos的timer API进行设计
  2. 定时器超时后, 生产消息并发送到 消息总线 , 由rtos.receive进行消费
  3. 底层支持循环定时.

C API(平台层)

数据结构

#define LUAT_TIMER_MAXID ((size_t) 0xFFFF)

接口API

uint32_t luat_timer_start(luat_timer_t* timer);
uint32_t luat_timer_stop(luat_timer_t* timer);

Lua API

常量

timer.HW -- 硬件定时器
timer.OS -- 软件定时器

启动定时器

-- timer_id 时钟id, 数值, 0-0xFF, 取决于LUAT_TIMER_MAXID
-- timerout 超时时长, 数值, 1-0xFFFFFFFF, 单位毫秒
local timer_id = timer.start(timer.OS, timeout, _repeat, function(timer_id) end)
if not timer_id then
    -- 启动成功
else
    -- 启动失败, 可能id已满或timeout值错误
end

关闭定时器(含删除)

-- timer_id 时钟id, 数值, 0-0xFF, 取决于LUAT_TIMER_MAXID
timer.stop(timer_id)
-- 只要传入数值型的id, timer_stop总会成功

相关知识点