sys#

本章介绍LuatOS的sys系统调度

简介#

sys库是LuatOS进行系统调度的内置库,通过sys库可以创建LuatOS任务,新建定时器,在系统内发送和订阅消息

硬件准备#

任意LuatOS-SOC开发板一块

软件部分#

接口文档可参考:SYS库

初始化一个LuatOS任务并启动#

代码如下

PROJECT = "SYS"
VERSION = "1.0.0"

-- 引入sys库
sys = require("sys")

function test()
    log.info(PROJECT, "test running...")
end

-- 创建任务test并执行
sys.taskInit(test)

-- 启动系统调度
sys.run()

日志如下

I/user.SYS test running...

在任务中创建循环并使用延时函数#

代码如下

PROJECT = "SYS"
VERSION = "1.0.0"

-- 引入sys库
sys = require("sys")

function test()
    while true do
        log.info(PROJECT, "test running...")
        -- 在任务函数中使用wait进行1S延时
        sys.wait(1000)
    end
end

-- 创建任务test并执行
sys.taskInit(test)

-- 启动系统调度
sys.run()

日志如下

I/user.SYS test running...
I/user.SYS test running...
I/user.SYS test running...
I/user.SYS test running...
I/user.SYS test running...
...
...

启动一个单次定时器或循环定时器#

代码如下

PROJECT = "SYS"
VERSION = "1.0.0"

-- 引入sys库
sys = require("sys")

function test1(arg)
    log.info(PROJECT, "test1 running...")
    log.info("TEST1-ARG", arg)

end

function test2(arg)
    log.info(PROJECT, "test2 running...")
    log.info("TEST2-ARG", arg)
end

-- 创建一个单次定时器
sys.timerStart(test1, 2000, "TEST1")

-- 创建一个循环定时器
sys.timerLoopStart(test2, 2000, "TEST2")

sys.run()

日志如下

I/user.SYS test1 running...
I/user.TEST1-ARG TEST1
I/user.SYS test2 running...
I/user.TEST2-ARG TEST2
I/user.SYS test2 running...
I/user.TEST2-ARG TEST2
I/user.SYS test2 running...
I/user.TEST2-ARG TEST2
...
...

停止一个定时器#

代码如下

PROJECT = "SYS"
VERSION = "1.0.0"

-- 引入sys库
sys = require("sys")

function test(arg)
    log.info(PROJECT, "test running...")
    log.info("TEST-ARG", arg)
end

sys.taskInit(function()
    -- 创建一个循环定时器
    local tid = sys.timerLoopStart(test, 1000, "TEST_DATA")
    log.info(PROJECT, "5S后循环定时器将停止运行")
    sys.wait(5000)
    -- 停止循环定时器
    log.info(PROJECT, "停止循环定时器")
    sys.timerStop(tid)
end)

sys.run()

日志如下

I/user.SYS 5S后循环定时器将停止运行
I/user.SYS test running...
I/user.TEST-ARG TEST_DATA
I/user.SYS test running...
I/user.TEST-ARG TEST_DATA
I/user.SYS test running...
I/user.TEST-ARG TEST_DATA
I/user.SYS test running...
I/user.TEST-ARG TEST_DATA
I/user.SYS test running...
I/user.TEST-ARG TEST_DATA
I/user.SYS 停止循环定时器

发送和订阅用户消息#

代码如下

PROJECT = "SYS"
VERSION = "1.0.0"

-- 引入sys库
sys = require("sys")

local count = 1

sys.subscribe("USER_MSG", function(arg)
    log.info(PROJECT, "receive data : " .. arg)
end)

sys.timerLoopStart(function()
    sys.publish("USER_MSG", "DATA" .. count)
    count = count + 1
end, 3000)

sys.run()

日志如下

I/user.SYS receive data : DATA1
I/user.SYS receive data : DATA2
I/user.SYS receive data : DATA3
I/user.SYS receive data : DATA4
I/user.SYS receive data : DATA5
...
...

在任务中等待一个消息#

PROJECT = "SYS"
VERSION = "1.0.0"

-- 引入sys库
sys = require("sys")

local count = 1

sys.taskInit(function()
    local res, data
    while true do
        res, data = sys.waitUntil("USER_MSG")
        log.info(PROJECT, res, data)
    end
end)

sys.timerLoopStart(function()
    sys.publish("USER_MSG", "DATA" .. count)
    count = count + 1
end, 3000)

sys.run()

日志如下

I/user.SYS true DATA1
I/user.SYS true DATA2
I/user.SYS true DATA3
I/user.SYS true DATA4
I/user.SYS true DATA5
...
...