0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Open开发新方法!Lua语言快速学习

青山老竹农 ? 来源:jf_82863998 ? 作者:jf_82863998 ? 2024-12-11 09:31 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

很多朋友都问我不会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.创建多个并行的任务

如下代码创建了两个任务,每个任务都是一个循环,只要循环不结束,任务就一直在运行。

wKgZPGdYMoCAHRmHAALWt0MeVjw818.png

02.多任务之间互相等待

通过sys模块的publish和waitUntil调用,实现多个任务之间的同步。

wKgZO2dYMpGAbX98AAUt1xAU9UM238.pngwKgZPGdYMp-AR-EfAAEfXHwnNoA434.png

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

wKgZPGdYMr2ABNwkAATt5uFKVsE824.pngwKgZO2dYMsqANlgKAAGvs9UtsUc364.png

04.传统定时器

wKgZPGdYMtqAV6SWAAPuf2s8jH8811.png

三、sys库接口文档

01.sys.wait(ms)

Task任务延时函数,只能用于任务函数中。

参数:

wKgZO2dYMvGASzA3AADbVmVQdzM993.png

返回值:

定时结束返回nil,被其他线程唤起返回调用线程传入的参数。

例子:
sys.wait(30)

02.sys.waitUntil(id, ms)

Task任务的条件等待函数(包括事件消息和定时器消息等条件),只能用于任务函数中。

参数:

wKgZPGdYMwSAT8KFAAFRFKeYio8983.png

返回值:

result接收到消息返回true,超时返回false data,接收到消息返回消息参数。

例子:
result, data = sys.waitUntil("SIM_IND", 120000)

03.sys.waitUntilExt(id, ms)

Task任务的条件等待函数扩展(包括事件消息和定时器消息等条件),只能用于任务函数中。

参数:

wKgZO2dYMxSAcFSoAAFOs7P9W4Y882.png

返回值:

message接收到消息返回message,超时返回false data,接收到消息返回消息参数。

例子:
result, data = sys.waitUntilExt("SIM_IND", 120000)

04.sys.taskInit(fun, ...)

创建一个任务线程,在模块最末行调用该函数并注册模块中的任务函数,main.lua导入该模块即可。

参数:

wKgZO2dYMyOAX-tlAAFXTRpCxpA882.png

返回值:

co返回该任务的线程号。

例子:
sys.taskInit(task1,'a','b')

05.sys.timerStop(val, ...)

关闭定时器。

参数:

wKgZPGdYMzSAOLD6AAGItXvo3RQ017.png

返回值:

例子:
timerStop(1)

06.sys.timerStopAll(fnc)

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

参数:

wKgZO2dYM0KAKNeEAADCdAncYFg485.png

返回值:

例子:
timerStopAll(cbFnc)

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

开启一个定时器。

参数:

wKgZO2dYM1KAGEt4AAGTNNgA7u8830.png

返回值:

number定时器ID,如果失败,返回nil。

例子:

wKgZPGdYM2KAITQGAADwzK05LqA524.png

08.sys.timerLoopStart(fnc, ms, ...)

开启一个循环定时器。

参数:

wKgZPGdYM3GAVYq-AAGUoqZzmuw417.png

返回值:

number定时器ID,如果失败,返回nil。

例子:

wKgZO2dYM3uABlRjAADgfKOO5JE583.png


09.sys.timerIsActive(val, ...)

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

参数:

wKgZO2dYM4qAdY7YAAKmgbpS5mA931.png

返回值:

number开启状态返回true,否则nil。

例子:

wKgZPGdYM5OAfAq2AAFsnBIZaNc386.png

10.sys.subscribe(id, callback)

订阅消息

参数:

wKgZPGdYM6OAIWrGAAEO9KjKi5s190.png

返回值:

例子:
subscribe("NET_STATUS_IND", callback)

11.sys.unsubscribe(id, callback)

取消订阅消息

参数:

wKgZO2dYM7qABQSxAAEL425CoPg850.png

返回值:

例子:
unsubscribe("NET_STATUS_IND", callback)

12.sys.publish(...)

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

参数:

wKgZPGdYM8uAMBTWAAC73x-6jZM150.png

返回值:

例子:
publish("NET_STATUS_IND")

13.sys.run()

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

参数:

返回值:

例子:sys.run()

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

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发
    +关注

    关注

    0

    文章

    373

    浏览量

    41648
  • Open
    +关注

    关注

    0

    文章

    22

    浏览量

    11275
  • Lua语言
    +关注

    关注

    0

    文章

    9

    浏览量

    1588
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    运用于matlab中的矩阵求逆的新方法有哪些啊(不是函数inv)

    运用于matlab中的矩阵求逆的新方法有哪些啊或者考虑矩阵的特殊性质,比如稀疏、对称性,有哪些求逆的新方法可以运用啊?求助!
    发表于 01-21 17:10

    采用CCS5+controlSUIT的模式,请同志 们谈谈这种新方法的感受。

    从CCS5版以后,抛弃了过去CCS3.3的开发方法,普通采用CCS5+controlSUIT的模式,请同志们谈谈这种新方法的感受。
    发表于 05-15 13:36

    测电阻,新方法,不加激励

    测电阻,新方法,不加激励的办法有没有。
    发表于 03-26 10:44

    一种标定陀螺仪的新方法

    一种标定陀螺仪的新方法
    发表于 08-17 12:17

    求大佬分享按键扫描的新方法

    求大佬分享按键扫描的新方法
    发表于 01-17 06:50

    利用C语言和GEL语言的Flash编程新方法

    利用C语言和GEL语言的Flash编程新方法 以TMS320VC5402为例,探讨一种综合运用C语言、数据文件及GEL语言的Flash编程
    发表于 03-29 15:13 ?1800次阅读
    利用C<b class='flag-5'>语言</b>和GEL<b class='flag-5'>语言</b>的Flash编程<b class='flag-5'>新方法</b>

    开发以3D打印随选制药的新方法

    研究团队,开发出用化学数码代码和3D打印机制造药物的新方法,该团队认为,这种新方法将重新定义便携式工厂模式。
    发表于 02-07 13:11 ?904次阅读

    AD采集的新方法资料分享

    AD采集的新方法
    发表于 03-23 09:44 ?10次下载

    利用激光脉冲以快速产生强磁场的新方法

    来自渥太华大学和加拿大国家研究委员会的一组研究人员共同开发了一种使用激光脉冲产生快速强磁场的新方法
    的头像 发表于 04-08 16:42 ?4295次阅读

    四元数姿态更新方法公示版C语言版免费下载

    本文档的主要内容详细介绍的是四元数姿态更新方法公示版C语言版免费下载。
    发表于 05-21 08:00 ?0次下载

    研究人员开发出用于光子处理器的新方法

    一个国际研究人员团队开发了一种用于光子处理器的新方法和体系结构,可加快机器学习领域的复杂数学任务。
    的头像 发表于 01-08 14:00 ?2226次阅读

    并联APF直流侧电压选择新方法

    并联APF直流侧电压选择新方法(肇庆理士电源技术)-并联APF直流侧电压选择新方法? ? ? ? ? ? ??
    发表于 09-17 16:47 ?6次下载
    并联APF直流侧电压选择<b class='flag-5'>新方法</b>

    VLSI系统设计的最新方法

    电子发烧友网站提供《VLSI系统设计的最新方法.pdf》资料免费下载
    发表于 11-20 11:10 ?0次下载
    VLSI系统设计的最<b class='flag-5'>新方法</b>

    IC封装中快速创建结构的新方法

    IC封装中快速创建结构的新方法
    的头像 发表于 12-06 16:34 ?914次阅读
    IC封装中<b class='flag-5'>快速</b>创建结构的<b class='flag-5'>新方法</b>

    不会Lua又想Open开发,怎么办?

    本次我把收藏已久的LuatOS具体应用示例特分享个大家,希望不会Lua又想Open开发的朋友有收获。
    的头像 发表于 12-09 14:43 ?572次阅读
    不会<b class='flag-5'>Lua</b>又想<b class='flag-5'>Open</b><b class='flag-5'>开发</b>,怎么办?