LuatOS基础全攻略!

连夜做的LuatOS攻略,速看!值得收藏!

1、LuatOS 概述

LuatOS系统,通过Lua虚拟机,支持Lua脚本在4G模组的的运行。 LuatOS系统,还实现了一套多任务的机制,这套机制是在sys库实现的。

2、LuatOS_Air 支持的模组型号

- Air780E, 780EX,780EP,780EPS,780EQ,780EG- Air700ECQ,700EAQ,700EMQ- Air201

3、LuatOS的sys模块介绍

3.1 sys 模块简述

sys 模块利用了 Lua 语言的协程机制,实现了实时多任务的调度。

开发者可以在业务代码中,新建多个任务,而不用像单片机的开发方式一样,只能用定时器进行延时。

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

3.2 sys 模块的实时多任务机制详解

3.2.1 创建多个并行的任务

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


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()

3.2.2 多任务之间互相等待

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


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()

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


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()

3.2.4 传统定时器


sys = require("sys")

--一秒后执行某函数,可以在后面传递参数

sys.timerStart(log.info,1000,"1s timer")

--之间写个function也行

sys.timerStart(function()

   log.info("1s timer function")

end,1000)

--每秒执行,永久循环,返回定时器编号

local loopId = sys.timerLoopStart(log.info,1000,"1s loop timer")

--10秒后手动停止上面的无限循环定时器

sys.timerStart(function()

   sys.timerStop(loopId)

   log.info("stop 1s loop timer")

end,10000)

sys.run()

3.3 sys库接口文档

3.3.1 sys.wait(ms)

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

  • 参数

传入值类型

释义

number

ms 整数,最大等待126322567毫秒

  • 返回值

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

  • 例子


sys.wait(30)

3.3.2 sys.waitUntil(id, ms)

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

  • 参数

传入值类型

释义

param

id 消息ID

number

ms 等待超时时间,单位ms,最大等待126322567毫秒

  • 返回值

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

  • 例子


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

3.3.3 sys.waitUntilExt(id, ms)

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

  • 参数

传入值类型

释义

param

id 消息ID

number

ms 等待超时时间,单位ms,最大等待126322567毫秒

  • 返回值

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

  • 例子


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

3.3.4 sys.taskInit(fun, ...)

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

  • 参数

传入值类型

释义

param

fun 任务函数名,用于resume唤醒时调用

param

... 任务函数fun的可变参数

  • 返回值

co 返回该任务的线程号

  • 例子


sys.taskInit(task1,'a','b')

3.3.5 sys.timerStop(val, ...)

关闭定时器

  • 参数

传入值类型

释义

param

val 值为number时,识别为定时器ID,值为回调函数时,需要传参数

param

... val值为函数时,函数的可变参数

  • 返回值

  • 例子


timerStop(1)

3.3.6 sys.timerStopAll(fnc)

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

  • 参数

传入值类型

释义

param

fnc 定时器回调函数

  • 返回值

  • 例子


timerStopAll(cbFnc)

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

开启一个定时器

  • 参数

传入值类型

释义

param

fnc 定时器回调函数

number

ms 整数,最大定时126322567毫秒

param

... 可变参数 fnc的参数

  • 返回值

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

  • 例子

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

开启一个循环定时器

  • 参数

传入值类型

释义

param

fnc 定时器回调函数

number

ms 整数,最大定时126322567毫秒

param

... 可变参数 fnc的参数

  • 返回值

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

  • 例子

3.3.9 sys.timerIsActive(val, ...)

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

  • 参数

传入值类型

释义

param

val 有两种形式
一种是开启定时器时返回的定时器id,此形式时不需要再传入可变参数...就能唯一标记一个定时器
另一种是开启定时器时的回调函数,此形式时必须再传入可变参数...才能唯一标记一个定时器

param

... 可变参数

  • 返回值

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

  • 例子

3.3.10 sys.subscribe(id, callback)

订阅消息

  • 参数

传入值类型

释义

param

id 消息id

param

callback 消息回调处理

  • 返回值

  • 例子


subscribe("NET_STATUS_IND", callback)

3.3.11 sys.unsubscribe(id, callback)

取消订阅消息

  • 参数

传入值类型

释义

param

id 消息id

param

callback 消息回调处理

  • 返回值

  • 例子


unsubscribe("NET_STATUS_IND", callback)

3.3.12 sys.publish(...)

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

  • 参数

传入值类型

释义

param

... 可变参数,用户自定义

  • 返回值

  • 例子


publish("NET_STATUS_IND")

3.3.13 sys.run()

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

  • 参数

  • 返回值

  • 例子


sys.run()

08-12
LuatOS 是一个专为物联网设备设计的操作系统,支持多种无线通信技术,包括4G、Wi-Fi和蓝牙等。它提供了一套完整的开发工具链,使得开发者可以快速构建出功能丰富的智能设备应用。以下是关于 LuatOS 使用指南、下载及一些相关信息的概述。 ### LuatOS 开发环境搭建 为了开始使用 LuatOS 进行开发,首先需要准备好硬件环境与软件环境。对于基于 Air8000 的项目,确保已经按照官方文档准备好了核心开发板和其他必要的硬件组件。接下来,软件环境的设置则涉及到了 Luatools 的安装与配置。下载 Luatools_v3.exe 后,将其放置在一个新建的文件夹(如命名为 "Luatools")中,并直接运行该程序即可完成安装过程。安装完成后,开发者可以通过 Luatools 来管理项目文件、编译代码以及烧录固件到目标设备上 [^2]。 ### LuatOS 功能特性 LuatOS 不仅支持基本的网络连接功能,还提供了丰富的API接口,用于实现更复杂的应用场景。例如,对于使用 Air8201 定位模组的项目,LuatOS 提供了对 RTC(实时时钟)的支持,允许开发者轻松处理时间相关的任务,比如设置正确的时区信息。在中国地区,通常采用的是东八区(UTC/GMT+08:00),这意味着当格林尼治标准时间为00:00时,本地时间为08:00 [^3]。 ### 下载 LuatOS 和相关资源 想要获取 LuatOS 最新的版本以及详细的开发文档,建议访问官方提供的资源页面。这里不仅有针对不同模组的硬件环境清单,还有详细的软件开发指南,帮助开发者从零开始构建自己的项目。此外,对于希望深入了解 LuatOS 特定功能(如4G模组的通用加解密函数)的用户来说,这些文档同样是非常宝贵的参考资料 [^1]。 ### 示例代码:使用LuatOS创建一个简单的应用程序 下面是一个简单的 Lua 脚本示例,演示了如何在 LuatOS 环境下创建一个打印 "Hello, World!" 的应用。这个例子假设你已经成功安装了 Luatools 并且配置好了开发环境。 ```lua -- main.lua print("Hello, World!") ``` 保存这段代码为 `main.lua` 文件,然后通过 Luatools 将其上传到你的设备上。一旦上传成功,你可以通过串口监视器查看输出结果,确认程序是否正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值