LuatOS——LuaTask框架

luatos

框架说明

Lua支持多任务的功能,开发者可以用最简单的方式,新建多个任务,而不是像传统的开发方式一样,只能用定时器进行延时。
当使用LuaTask框架时候,需要调用sys库,并且在代码最后一行,调用sys.run()以启动LuaTask框架,框架内的代码回在run()内运行。

框架示例

多任务

sys = require("sys")

--创建第一个
sys.taskInit(
    function ()
        while true do
            sys.wait(1000)
            print("task1 running\n")
        end
    end
)

--创建第二个
sys.taskInit(
   function ()
        while true do
            sys.wait(2000)
            print("task2 running\n")
        end
    end
)

sys.run()

多任务之间互相等待

sys = require("sys")

--第一个
sys.taskInit(
    function ()
        while true do
            sys.wait(1000)
            print("task1 running")
            sys.publish("task1")
        end
    end
)

--第二个
sys.taskInit(
    function ()
        while true do
            sys.waitUntil("task1")
            print("take2 running")
        end
    end
)

--第三个
sys.taskInit(
    function ()
        while true do
            local rekey = sys.waitUntil("task1",  200)
            if rekey then 
                print("take3 running")
            else
                print("take3 ")
            end
        end
    end
)

--回调函数
sys.subscribe("take1",
    function()
        print("subscribe running")
    end
)

sys.run()
sys = require("sys")

--第一个
sys.taskInit(
    function ()
        while true do
            sys.wait(1000)
            print("task1 running")
            sys.publish("task1")
        end
    end
)

--第二个
sys.taskInit(
    function ()
        while true do
            sys.waitUntil("task1")
            print("take2 running")
        end
    end
)

--第三个
sys.taskInit(
    function ()
        while true do
            local rekey = sys.waitUntil("task1",  200)
            if rekey then 
                print("take3 running")
            else
                print("take3 ")
            end
        end
    end
)

--回调函数
sys.subscribe("take1",
    function()
        print("subscribe running")
    end
)

sys.run()

多任务之间互相等待并传递数据

sys = require("sys")

--第一个
sys.taskInit(
    function ()
        takedate = "liustu"
        while true do
            sys.wait(1000)
            print("task1 running")
            sys.publish("task1", takedate)
        end
    end
)

--第二个
sys.taskInit(
    function ()
        while true do
            local _,take2data = sys.waitUntil("task1")
            print("take2 running ", take2data)
        end
    end
)

--第三个
sys.taskInit(
    function ()
        while true do
            local rekey, take3data = sys.waitUntil("task1",  200)
            if rekey then 
                print("take3 running ", take3data)
            else
                print("take3 ")
            end
        end
    end
)

--回调函数
sys.subscribe("take1",
    function(data)
        print("subscribe running ", data)
    end
)

sys.run()

传统定时器

sys = require("sys")

-- 定时器1s后执行某个函数
sys.timerStart(log.info, 1000, "定时器1s后执行某个函数")
sys.timerStart(
    function()
        log.info("定时器", "1s后执行某个函数")
    end,
    1000
)

-- 定时器循环执行
sys.timerLoopStart(log.info, 1000, "定时器循环执行")

sys.timerStart(
    function()
        sys.timerStop()
        log.info("定时器停止")
    end,
    10000    
)

sys.run()

sys库接口文档

sys.wait(ms)

Task任务延时函数,只能用于任务函数中,参数为延时的ms数,定时结束返回nil。

sys.waitUntil(id, ms)

Task任务的条件等待函数,包括等待事件消息或者定时器消息等条件,只能用于任务函数中。接收到消息返回true,超时返回false data接收到消息返回消息参数。

sys.waitUntilExt(id, ms)

Task任务的条件等待函数扩展。

sys.taskInit(fun, ...)

创建一个任务线程,在模块最末行调用该函数并注册模块中的任务函数。

sys.timerStop(val, ...)

关闭定时器。

sys.timerStopAll(fnc)

关闭同一回调函数的所有定时器。

sys.timerStart(fnc, ms, ...)

开启一个定时器。

sys.timeLoopStart(fnc, ms)

开启循环定时器。

sys.timerIsActive(val, ...)

判断某个定时器是否处于开启状态。

sys.subscribe(id, callback)

订阅消息,id为消息ID,callback为回调函数。

sys.unsubscibe(id, callback)

取消订阅消息。

sys.publish(...)

发布内部消息,存储在内部消息队列中。

sys.run()

run()从底层获取core消息并及时处理相关消息,查询定时器并调度各注册成功的任务线程运行和挂起。

相关文章

LuatOS——基础语法

认识lua lua是一种轻量小巧的脚本语言,它用标准C语言编写并以源代码形式开放。**标志Lua虚拟机可以很方便的嵌入别的程序中**,从而为应用程序提供灵活的扩展功能。而整个Lua虚拟机编译后仅仅100余k,经过适当的裁剪可能做到更小,十分适合嵌入式的开发。 Lua的运行速度占有绝对优势,这些都决定了Lua作为嵌入式脚本的最佳选择。 输出 在Lua中,可以使用print函数打印出你想要的...

luatos

合宙主流通信模组梳理

合宙作为我第一家实习公司,其在行业上是一位佼佼者,我们合宙推出多种产品,满足了几乎所有客户对通信模组的需求。 并且,合宙有一个特色`Luatos`,是一种基于`lua`的开发脚本。它是一种针对嵌入式的脚本运行框架。针对资源较少的嵌入式环境进行了优化,极大提升了运行效率。 >但是对于习惯C的嵌入式开发者,就需要拿出时间去学习、熟悉该脚本 我一直认为`一个公司的销售不了解产品那一定会让去问开...

flushbonading

嵌入式存储器(ROM/RAM/Flash)知识梳理

作为嵌入式开发者,存储器是我们开发过程中最频繁的硬件组件之一。从微小的8位单片机到复杂的嵌入式Linux系统,每个设备都用到了各种类型的存储器。 概念 **存储器主要分为ROM和RAM**,RAM和ROM的最大区别是`RAM在断电以后保存的数据会自动消失,ROM不会消失`。 当然我们可以把所有的存储器按两种方式分类,`易失性`和`功能用途`。 按易失性划分(最核心分类) - **非易失...

flushbonading