@[TOC]
模块功能:Luat协程调度框架
软件重启
|名称|传入值类型|释义| |-|-|-| |r|string|重启原因,用户自定义,一般是string类型,重启后的trace中会打印出此重启原因|
无
例子
sys.restart('程序超时软件重启')
task任务延时函数
只能直接或者间接的被task任务主函数调用,如果定时器创建成功,则本task会挂起
|名称|传入值类型|释义|
|-|-|-|
|ms|number|延时时间,单位毫秒,最小1,最大0x7FFFFFFF
实际上支持的最小超时时间是5毫秒,小于5毫秒的时间都会被转化为5毫秒|
result,分为如下三种情况:
1、如果定时器创建失败,本task不会被挂起,直接返回nil
2、如果定时器创建成功,本task被挂起,超时时间到达后,会激活本task,返回nil
3、如果定时器创建成功,本task被挂起,在超时时间到达之前,其他业务逻辑主动激活本task,
返回激活时携带的可变参数(如果不是故意为之,可能是写bug了)
例子
task延时5秒:
sys.taskInit(function()
sys.wait(5000)
end)
task任务条件等待函数(支持事件消息和定时器消息)
只能直接或者间接的被task任务主函数调用,调用本接口的task会挂起
|名称|传入值类型|释义|
|-|-|-|
|id|string|消息ID,建议使用string类型|
|ms|number|可选参数,默认为nil 延时时间,单位毫秒,最小1,最大0x7FFFFFFF
实际上支持的最小超时时间是5毫秒,小于5毫秒的时间都会被转化为5毫秒|
result,data,分为如下三种情况:
1、如果存在超时时间参数:
(1)、在超时时间到达之前,如果收到了等待的消息ID,则result为true,data为消息ID携带的参数(可能是多个参数)
(2)、在超时时间到达之前,如果没收到等待的消息ID,则result为false,data为nil
2、如果不存在超时时间参数:如果收到了等待的消息ID,则result为true,data为消息ID携带的参数(可能是多个参数)
(1)、如果收到了等待的消息ID,则result为true,data为消息ID携带的参数(可能是多个参数)
(2)、如果没收到等待的消息ID,则task一直挂起
3、还存在一种特殊情况,本task挂起时,可能被task的外部应用逻辑给主动激活(如果不是故意为之,可能是写bug了)
例子
task延时120秒或者收到"SIM_IND"消息:
sys.taskInit(function()
local result, data = sys.waitUntil("SIM_IND",120000)
end)
Task任务的条件等待函数扩展(包括事件消息和定时器消息等条件),只能用于任务函数中。
|名称|传入值类型|释义| |-|-|-| |id|param|消息ID| |ms|number|等待超时时间,单位ms,最大等待126322567毫秒|
message 接收到消息返回message,超时返回false data 接收到消息返回消息参数
例子
result, data = sys.waitUntilExt("SIM_IND", 120000)
创建一个任务并且运行该任务
|名称|传入值类型|释义| |-|-|-| |fun|param|任务主函数,激活task时使用| |...|param|任务主函数fun的可变参数|
co 返回该任务的线程ID
例子
sys.taskInit(task1,'a','b')
Luat平台初始化
|名称|传入值类型|释义| |-|-|-| |mode|param|充电开机是否启动GSM协议栈,1不启动,否则启动| |lprfnc|param|用户应用脚本中定义的“低电关机处理函数”,如果有函数名,则低电时,本文件中的run接口不会执行任何动作,否则,会延时1分钟自动关机|
无
例子
sys.init(1,0)
关闭sys.timerStart和sys.timerLoopStart创建的定时器
有两种方式可以唯一标识一个定时器:
1、定时器ID
2、定时器回调函数和可变参数
|名称|传入值类型|释义|
|-|-|-|
|val|param|有两种形式:
1、为number类型时,表示定时器ID
2、为function类型时,表示定时器回调函数|
|...|param|可变参数,当val为定时器回调函数时,此可变参数才有意义,表示定时器回调函数的可变回调参数|
nil
例子
-- 通过定时器ID关闭一个定时器:
local timerId = sys.timerStart(publicTimerCbFnc,8000,"second")
sys.timerStop(timerId)
-- 通过定时器回调函数和可变参数关闭一个定时器:
sys.timerStart(publicTimerCbFnc,8000,"first")
sys.timerStop(publicTimerCbFnc,"first")
关闭sys.timerStart和sys.timerLoopStart创建的某个回调函数的所有定时器
|名称|传入值类型|释义| |-|-|-| |fnc|function|定时器回调函数|
nil
例子
-- 关闭回调函数为publicTimerCbFnc的所有定时器
local function publicTimerCbFnc(tag)
log.info("publicTimerCbFnc",tag)
end
sys.timerStart(publicTimerCbFnc,8000,"first")
sys.timerStart(publicTimerCbFnc,8000,"second")
sys.timerStart(publicTimerCbFnc,8000,"third")
sys.timerStopAll(publicTimerCbFnc)
创建并且启动一个单次定时器
有两种方式可以唯一标识一个定时器:
1、定时器ID
2、定时器回调函数和可变参数
|名称|传入值类型|释义|
|-|-|-|
|fnc|param|定时器回调函数,必须存在,不允许为nil
当定时器超时时间到达时,回调函数的调用形式为fnc(...),其中...为回调参数|
|ms|number|定时器超时时间,单位毫秒,最小1,最大0x7FFFFFFF
实际上支持的最小超时时间是5毫秒,小于5毫秒的时间都会被转化为5毫秒|
|...|param|可变参数,回调函数fnc的回调参数|
number timerId,创建成功返回定时器ID;创建失败返回nil
例子
-- 创建一个5秒的单次定时器,回调函数打印"timerCb",没有可变参数:
sys.timerStart(function() log.info("timerCb") end, 5000)
-- 创建一个5秒的单次定时器,回调函数打印"timerCb"和"test",可变参数为"test":
sys.timerStart(function(tag) log.info("timerCb",tag) end, 5000, "test")
创建并且启动一个循环定时器
有两种方式可以唯一标识一个定时器:
1、定时器ID
2、定时器回调函数和可变参数
|名称|传入值类型|释义|
|-|-|-|
|fnc|param|定时器回调函数,必须存在,不允许为nil
当定时器超时时间到达时,回调函数的调用形式为fnc(...),其中...为回调参数|
|ms|number|定时器超时时间,单位毫秒,最小1,最大0x7FFFFFFF
实际上支持的最小超时时间是5毫秒,小于5毫秒的时间都会被转化为5毫秒|
|...|param|可变参数,回调函数fnc的回调参数|
number timerId,创建成功返回定时器ID;创建失败返回nil
例子
-- 创建一个5秒的循环定时器,回调函数打印"timerCb",没有可变参数:
sys.timerLoopStart(function() log.info("timerCb") end, 5000)
-- 创建一个5秒的循环定时器,回调函数打印"timerCb"和"test",可变参数为"test":
sys.timerLoopStart(function(tag) log.info("timerCb",tag) end, 5000, "test")
判断“通过timerStart或者timerLoopStart创建的定时器”是否处于激活状态
|名称|传入值类型|释义|
|-|-|-|
|val|param|定时器标识,有两种表示形式
1、number类型,通过timerStart或者timerLoopStart创建定时器时返回的定时器ID,此情况下,不需要传入回调参数...就能唯一标识一个定时器
2、function类型,通过timerStart或者timerLoopStart创建定时器时的回调函数,此情况下,如果存在回调参数,需要传入回调参数...才能唯一标识一个定时器|
|...|param|回调参数,和“通过timerStart或者timerLoopStart创建定时器”的回调参数保持一致|
status,定时器激活状态;根据val的表示形式,有不同的返回值:
1、val为number类型时:如果处于激活状态,则返回function类型的定时器回调函数;否则返回nil
2、val为function类型时:如果处于激活状态,则返回bool类型的true;否则返回nil
例子
-- 定时器ID形式标识定时器的使用参考:
local timerId1 = sys.timerStart(function() end,5000)
sys.taskInit(function()
sys.wait(3000)
log.info("after 3 senonds, timerId1 isActive?",sys.timerIsActive(timerId1))
sys.wait(3000)
log.info("after 6 senonds, timerId1 isActive?",sys.timerIsActive(timerId1))
end)
-- 回调函数和回调参数标识定时器的使用参考:
local function timerCbFnc2(tag)
log.info("timerCbFnc2",tag)
end
sys.timerStart(timerCbFnc2,5000,"test")
sys.taskInit(function()
sys.wait(3000)
log.info("after 3 senonds, timerCbFnc2 test isActive?",sys.timerIsActive(timerCbFnc2,"test"))
sys.wait(3000)
log.info("after 6 senonds, timerCbFnc2 test isActive?",sys.timerIsActive(timerCbFnc2,"test"))
end)
订阅消息
|名称|传入值类型|释义| |-|-|-| |id|param|消息id| |callback|param|消息回调处理|
无
例子
subscribe("NET_STATUS_IND", callback)
取消订阅消息
|名称|传入值类型|释义| |-|-|-| |id|param|消息id| |callback|param|消息回调处理|
无
例子
unsubscribe("NET_STATUS_IND", callback)
发布内部消息,存储在内部消息队列中
|名称|传入值类型|释义| |-|-|-| |...|param|可变参数,用户自定义|
无
例子
publish("NET_STATUS_IND")
注册rtos消息回调处理函数
|名称|传入值类型|释义| |-|-|-| |id|number|消息类型id| |handler|param|消息处理函数|
无
例子
rtos.on(rtos.MSG_KEYPAD, function(param) handle keypad message end)
run()从底层获取core消息并及时处理相关消息,查询定时器并调度各注册成功的任务线程运行和挂起
无
无
例子
sys.run()