2025-2-11 17:12
35 次阅读|
0 个评论
很多朋友都问我不会Lua又想open开发,怎么办?我的答复是Lua先学起来,再看LuatOS具体应用示例,上手极快,感兴趣的朋友们,可以参照本文一起学。 Lua视频教程 无废话30分钟Lua快速入门教程: https://b23.tv/DMaAHQ1 LuatOS文档教程 资料中心: https://docs.openluat.com LuatOS支持的主要模组型号: Air780E/Air780EX/Air780EP/Air780EPS/ Air201… 可通过资料中心查看对应型号模组的LuatOS二次开发快速入门教程,内容持续更新中。 今天,我们先一起看看LuatOS基础知识: LuatOS系统通过Lua虚拟机,支持Lua脚本在4G模组的的运行。LuatOS系统还实现了一套多任务的机制,这套机制是在sys库实现的。 一、sys模块简述 sys模块利用了Lua语言的协程机制,实现了实时多任务的调度。开发者可以在业务代码中,新建多个任务,而不用像单片机的开发方式一样,只能用定时器进行延时。 在开发LuatOS业务代码时,需要在代码中引用sys库(_G.sys=require("sys")),并且在代码的最后一行,调用sys.run()以启动主程序,使得框架内的任务代码会在sys.run()中运行。 二、sys模块的实时多任务机制详解 01.创建多个并行的任务 如下代码创建了两个任务,每个任务都是一个循环,只要循环不结束,任务就一直在运行。 02.多任务之间互相等待 通过sys模块的publish和waitUntil调用,实现多个任务之间的同步。 03.多任务之间互相等待并传递数据 04.传统定时器 三、sys库接口文档 01.sys.wait(ms) Task任务延时函数,只能用于任务函数中。 参数: 返回值: 定时结束返回nil,被其他线程唤起返回调用线程传入的参数。 例子: sys.wait(30) 02.sys.waitUntil(id, ms) Task任务的条件等待函数(包括事件消息和定时器消息等条件),只能用于任务函数中。 参数: 返回值: result接收到消息返回true,超时返回false data,接收到消息返回消息参数。 例子: result, data = sys.waitUntil("SIM_IND", 120000) 03.sys.waitUntilExt(id, ms) Task任务的条件等待函数扩展(包括事件消息和定时器消息等条件),只能用于任务函数中。 参数: 返回值: message接收到消息返回message,超时返回false data,接收到消息返回消息参数。 例子: result, data = sys.waitUntilExt("SIM_IND", 120000) 04.sys.taskInit(fun, ...) 创建一个任务线程,在模块最末行调用该函数并注册模块中的任务函数,main.lua导入该模块即可。 参数: 返回值: co返回该任务的线程号。 例子: sys.taskInit(task1,'a','b') 05.sys.timerStop(val, ...) 关闭定时器。 参数: 返回值: 无 例子: timerStop(1) 06.sys.timerStopAll(fnc) 关闭同一回调函数的所有定时器。 参数: 返回值: 无 例子: timerStopAll(cbFnc) 07.sys.timerStart(fnc, ms, ...) 开启一个定时器。 参数: 返回值: number定时器ID,如果失败,返回nil。 例子: 08.sys.timerLoopStart(fnc, ms, ...) 开启一个循环定时器。 参数: 返回值: number定时器ID,如果失败,返回nil。 例子: 09.sys.timerIsActive(val, ...) 判断某个定时器是否处于开启状态。 参数: 返回值: number开启状态返回true,否则nil。 例子: 10.sys.subscribe(id, callback) 订阅消息 参数: 返回值: 无 例子: subscribe("NET_STATUS_IND", callback) 11.sys.unsubscribe(id, callback) 取消订阅消息 参数: 返回值: 无 例子: unsubscribe("NET_STATUS_IND", callback) 12.sys.publish(...) 发布内部消息,存储在内部消息队列中。 参数: 返回值: 无 例子: publish("NET_STATUS_IND") 13.sys.run() 从底层获取core消息并及时处理相关消息,查询定时器并调度各注册成功的任务线程运行和挂起。 参数: 无 返回值: 无 例子: sys.run() 今天的内容就分享到这里了