Lua语言简易教程:Open开发的新途径!

不会Lua又想open开发,怎么办?关于模组Open开发,我采用的是LuatOS方式,相对C-SDK入门更简单,开发更方便,开发时间上也更快。首先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()

今天的内容就分享到这里了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值