LuaTask框架

当使用LuaTask框架时,需要在代码中引用sys库(_G.sys=require("sys")),并且在代码的最后一行,调用sys.run()以启动LuaTask框架,框架内的任务代码会在sys.run()中运行。

多任务

sys = require("sys")
--第一个任务
sys.taskInit(function()
    while true do
        log.info("task1","wow")
        sys.wait(1000) --延时1秒,这段时间里可以运行其他代码
    end
end)

--第二个任务
sys.taskInit(function()
    while true do
        log.info("task2","wow")
        sys.wait(500) --延时0.5秒,这段时间里可以运行其他代码
    end
end)

sys.run()

多任务之间互相等待

sys = require("sys")
--第一个任务
sys.taskInit(function()
    while true do
        log.info("task1","wow")
        sys.wait(1000) --延时1秒,这段时间里可以运行其他代码
        sys.publish("TASK1_DONE")--发布这个消息,此时所有在等的都会收到这条消息
    end
end)

--第二个任务
sys.taskInit(function()
    while true do
        sys.waitUntil("TASK1_DONE")--等待这个消息,这个任务阻塞在这里了
        log.info("task2","wow")
    end
end)

--第三个任务
sys.taskInit(function()
    while true do
        local result = sys.waitUntil("TASK1_DONE",500)--等待超时时间500ms,超过就返回false而且不等了
        log.info("task3","wait result",result)
    end
end)

--单独订阅,可以当回调来用
sys.subscribe("TASK1_DONE",function()
    log.info("subscribe","wow")
end)

sys.run()

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

sys = require("sys")
--第一个任务
sys.taskInit(function()
    while true do
        log.info("task1","wow")
        sys.wait(1000) --延时1秒,这段时间里可以运行其他代码
        sys.publish("TASK1_DONE","balabala")--发布这个消息,并且带上一个数据
    end
end)

--第二个任务
sys.taskInit(function()
    while true do
        local _,data = sys.waitUntil("TASK1_DONE")--等待这个消息,这个任务阻塞在这里了
        log.info("task2","wow receive",data)
    end
end)

--第三个任务
sys.taskInit(function()
    while true do
        local result,data = sys.waitUntil("TASK1_DONE",500)--等待超时时间500ms,超过就返回false而且不等了
        log.info("task3","wait result",result,data)
    end
end)

--单独订阅,可以当回调来用
sys.subscribe("TASK1_DONE",function(data)
    log.info("subscribe","wow receive",data)
end)

sys.run()

传统定时器

sys = require("sys")
--第一个任务
sys.taskInit(function()
    while true do
        log.info("task1","wow")
        sys.wait(1000) --延时1秒,这段时间里可以运行其他代码
        sys.publish("TASK1_DONE")--发布这个消息,此时所有在等的都会收到这条消息
    end
end)

--第二个任务
sys.taskInit(function()
    while true do
        sys.waitUntil("TASK1_DONE")--等待这个消息,这个任务阻塞在这里了
        log.info("task2","wow")
    end
end)

--第三个任务
sys.taskInit(function()
    while true do
        local result = sys.waitUntil("TASK1_DONE",500)--等待超时时间500ms,超过就返回false而且不等了
        log.info("task3","wait result",result)
    end
end)

--单独订阅,可以当回调来用
sys.subscribe("TASK1_DONE",function()
    log.info("subscribe","wow")
end)

sys.run()

这是一个函数 `osalInitTasks`,用于初始化任务。函数中的代码逐个初始化不同的任务,并分配任务ID。以下是代码的解析: 1. `tasksEvents` 是一个指向 `uint16` 类型数组的指针,用于存储任务事件。通过调用 `osal_mem_alloc` 函数动态分配内存空间,并将其初始化为0。`sizeof( uint16 ) * tasksCnt` 表示需要分配的内存空间大小,`osal_memset` 函数用于将分配的内存空间初始化为0。 2. `macTaskInit` 函数用于初始化 MAC 任务,`taskID++` 表示当前任务的 ID,然后自增。 3. `nwk_init` 函数用于初始化网络任务,同样通过 `taskID++` 分配任务 ID。 4. `Hal_Init` 函数用于初始化硬件抽象层任务,同样通过 `taskID++` 分配任务 ID。 5. 如果定义了 `MT_TASK`,则调用 `MT_TaskInit` 函数初始化 MT 任务,并分配任务 ID。 6. `APS_Init` 函数用于初始化 APS 任务,同样通过 `taskID++` 分配任务 ID。 7. 如果定义了 `ZIGBEE_FRAGMENTATION`,则调用 `APSF_Init` 函数初始化 APSF 任务,并分配任务 ID。 8. `ZDApp_Init` 函数用于初始化 ZDApp 任务,同样通过 `taskID++` 分配任务 ID。 9. 如果定义了 `ZIGBEE_FREQ_AGILITY` 或者 `ZIGBEE_PANID_CONFLICT`,则调用 `ZDNwkMgr_Init` 函数初始化 ZDNwkMgr 任务,并分配任务 ID。 10. 最后调用 `SampleApp_Init` 函数初始化 SampleApp 任务,不再分配任务 ID。 这样,通过调用 `osalInitTasks` 函数可以完成对所有任务的初始化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值