"); //-->
很多朋友都问我不会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()
今天的内容就分享到这里了
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
长虹R2118A型彩电开关电源(LA单片机)电路
用单片机制作的纯正弦波逆变电源电路
MSP430x2xx4xx系列
语音合成芯片T6668和单片机8031的接口电路图
基于物联网的电池组均衡充电与监控系统
Kwikset:超低功耗Wi-Fi解锁无缝体验
AVR 单片机专栏,资料下载!之二
16位语言函数工具库
MSP430 电表解决方案
《AVR单片机C语言库》
《ATmega8原理及应用手册》
MSP430单片机TIMER_A在产品设计中的应用
利用PIC12C508单片机来实现加密狗技术[转帖]
[转帖]从Cygnal C8051F看8位单片机发展之路
5V 单片机与5V 耐压单片机有何区别,为什么至关重要
被收购后的芯科实验室:物联网与人工智能的未来走向
AVR 单片机专栏,资料下载!
单片机语言C51应用实战集锦
边缘计算与人工智能(Edge AI)如何引领新一轮技术革命
GD32E230F6V6实用指南:为下一个项目选择合适单片机
物联网与RFID芯片
纳米电力将nPZero集成电路推向超低功耗物联网的量产
TDK 发布 SensorStage 传感器评估平台,大幅加速 IMU 开发进程
芯科科技驱动和重塑智能门锁行业格局
SmartDV展示完整的边缘与连接IP解决方案,以高速和低功耗特性赋能移动、物联网和媒体处理设备创新
倾情奉献:MSP430汇编指令集(中文),详解带实例!
创维数码5000系列彩电开关电源(AN单片机)电路
用AT89C2051单片机实验合弦乐
嵌入式系统与物联网
超低功率高性能新一代产品MSP430F5xx