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

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

3天内不再提示

LuatOS-Air转LuatOS常见故障排查手册

青山老竹农 来源:jf_82863998 作者:jf_82863998 2026-01-13 19:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

LuatOS-Air脚本在LuatOS环境中运行失败,问题往往集中在几个关键模块:任务调度、外设驱动、网络配置和固件版本匹配。本文以故障排查的逻辑为主线,列出常见报错现象、可能原因及快速修复方案,打造一份实用的“不翻车”操作指南。

一、lua版本不一样


LuatOS-Air使用的是lua5.1版本,本身不支持位移运算符。

LuatOS使用的是lua5.3版本,取消了module(..., package.seeall)这种形式的跨文件调用。


二、api不同


首先说明,core和脚本有所不同,用户可以理解为,core是安卓/ios系统,脚本为一个又一个的app,只有core+脚本,才能支撑起完整的一个二次开发项目。

LuatOS-Air的api:

在https://doc.openluat.com/wiki/21?wiki_page_id=2068这里,又分为了5.1原生接口,提供的额外接口两种。

在额外的接口其中,又分为了底层接口和二次封装接口,底层接口叫做core api,二次封装接口叫做script lib api,下面会简称为lib层api。

core api实现过程不可见,封装在了core里,受限于和RDA的协议,这部分实现过程不开源,而lib层的api,实现过程可见,用户可以自行修改。

lib层api一般是将底层提供的接口进行合并与封装,更加的简单与易用,也有部分lib层api是直接给core发送AT指令然后处理AT指令的返回值,并且以函数返回值的形式返回给调用该api的位置。

LuatOS的api:

在https://docs.openluat.com/osapi/这里,和LuatOS-Air一样,分为了5.3原生接口和提供的额外接口两种。

在额外的接口其中,又分为了核心库接口和扩展库接口,核心库接口叫做core api,扩展库接口叫做script lib api,下面会简称为lib层api。

core api实现过程不可见,封装在了core里,这部分实现过程不开源,而lib层的api,实现过程可见,用户可以自行修改。

LuatOS 核心库是在底层实现的功能库,调用核心库无需代码使用 require 操作;

LuatOS 扩展库是用 Lua 脚本实现的功能库,必须用 requre 调用才能够使用扩展库。

三、跨文件调用方式不同


LuatOS-Air跨文件调用方式

LuatOS-Air在每一个非main.lua的文件头部,第一行可执行代码永远是module(..., package.seeall),主要作用是将该文件中所有的全局变量/全局函数,加入到一张名为 _G的table中方便其他.lua文件调用,在这里不做过多讲解,能有转移需求的客户,基本都会LuatOS-Air的跨文件调用方法。

luatos跨文件调用方式

luatos跨文件调用方式有两种,一种和LuatOS-Air类似,不过是在文件第一行,新建一个和文件名相同的table,文件结尾处return这个table,接下来举个例子

首先封装一个函数

wKgZO2lmJLWAKu8bAAFwYM2G-SA233.png

我们新建一个文件叫tools.lua,把这个函数放进去,现在,整个文件如下面这样:

wKgZPGlmH4SAVMEPAAAdZ3zZFlI871.png

wKgZPGlmJGuAO-jjAAH4oeicbEc615.png

现在,我们封装的这个函数就能在其他文件(例如main.lua)里被调用了,具体代码如下:

wKgZPGlmJXiAPx9xAAB3HYnwGAs922.png

当调用了require接口后,Lua虚拟机会自动加载你调用的文件,执行文件的内容,然后返回你文件里return的结果。

为了更好地理解这段话,我们可以看下面两个文件,其中main.lua是被运行的那个入口文件,

wKgZPGlmIEmAbid1AAAcS1zkoR0941.pngwKgZO2lmJcyAN3u2AAI1coDF6J0495.png

wKgZO2lmII2ADeHZAAAa-syHKac083.pngwKgZPGlmJmSAVOcVAAO3GV3LH0E924.png

此处为第一种调用方法,简单来说,被调用文件头部,将module(..., package.seeall)换成文件名={},文件末尾处加return {本文件中写的函数名=本文件中写的函数名},有多个函数的时候,可以添加多个元素名= 元素名进table里。

第二种调用方法依旧是在文件开头写上文件名={},不同的是,需要被调用的函数名,可以写成文件名.函数名的形式,最后的return不需要return一个很长的table了,只需要return 文件名,例如:

需要在main.lua 中调用test.lua的test函数,那么除了固定格式以外的main.lua可以写成

wKgZO2lmJruAAh4nAAD0W6D6yws770.png

具体可参考https://gitee.com/openLuat/LuatOS/tree/master/script/libs这里所有的demo

四、实例

uart的demo为例,笔者将带着用户,将LuatOS-Air uart的demo,移植到luatos上(仅讲解uart1的移植过程,其他串口通用),除去无关本次移植过程的部分,LuatOS-Air的uart1完整demo如下,是一个自发自收的测试demo,luatos完整的demo也会放在最后,方便用户对比。

LuatOS-Air_uart.zip

开始移植

main.lua的改造

wKgZPGlmIRaAO57PAAC00UF5fh0626.png

PROJECT和VERSION这两个参数不变,下载时候需要这两个参数

require "log"这句可以删除,底层已经写好了log库,并提供了和LuatOS-Air lib层api几乎一致的core api,查看对应的 luatos log库api https://docs.openluat.com/osapi/core/log/

后得知,几种日志模式的常量有所不同,所以LOG_LEVEL = log.LOGLEVEL_TRACE这句,可以改成LOG_LEVEL = log.LOG_INFO,再添加一句log.setLevel(LOG_LEVEL )

因为主逻辑都在testUart1文件中,不需要在main.lua中调用,所以保持 require "testUart1" 原样即可,为了用户更直观的看出跨文件调用的不同,所以我在testUart1中又写了一个名为function_name的函数,然后在main.lua中进行循环调用。sys.init函数不需要,直接删去即可

完成上述步骤以后,main.lua就被我们改造成了下面这样

wKgZPGlmIZ6ATNlfAADrIEaVs-s833.png

testUart1.lua的改造

接下来进入testUart1.lua中

wKgZPGlmIhOAc8A3AACu6oloN5g476.png

module(...,package.seeall)改为 testUart1 ={},pm和utils两个库,utils不需要,直接删除,pm库底层提供了,无需require,也删除。

接下来会先将proc、read、write、writeOk和我刚刚写的function_name这几个函数会加载到内存中,但是还没有执行,接下来执行的是pm.wake("testUart"),查看luatos的pm接口(https://docs.openluat.com/osapi/core/pm/),可以看到luatos没有wake接口,但是有不休眠模式,所以先设置下不休眠,也就是将pm.wake("testUart")换成pm.request(pm.NONE)

然后执行的是uart.on两个注册函数,当时串口有接收事件产生时候,会去执行read函数,当串口有发送事件产生时,会执行writeOK函数,对比luatos的注册串口收发事件(https://docs.openluat.com/osapi/core/uart/#45-uartonid-event-func),可以看出,这两个芯片收发事件函数一致,无需更改。

最后执行的是串口设置指令,LuatOS-Air和luatos有很大不同,LuatOS-Air的uart设置接口如下(https://doc.openluat.com/wiki/21?wiki_page_id=2250#uartsetup_id_baud_databits_parity_stopbitsmsgmodetxDoneReportflowcontrolpriority_33)

luatos的uart设置接口如下(https://docs.openluat.com/osapi/core/uart/#41-uartsetupid-baud_rate-data_bits-stop_bits-partiy-bit_order-buff_size-rs485_gpio-rs485_level-rs485_delay-debug_enable-error_drop)

这两个接口,LuatOS-Air的和luatos最大区别就是,LuatOS-Air将485半自动收发控制分开了,单独写了一个uart.set_rs485_oe

而luatos将其写在了一起,用户在使用该接口时,一定要注意不同接口之间参数的位置。

当有串口接收事件产生时,模块会进入read函数,在read函数里,打印了data原始数据和转成hex以后的数据后,便进入了proc函数中,并且将串口来的数据传入给proc函数,进行处理。

值得注意的是,read函数里有将串口来的数据通过uart.read函数赋值给data变量这个操作,但是luatos截至当前文章完成时,uart.read函数的第二个参数,只能填number,意为每次接收的字节数,也就是需要将代码中的uart.read(UART_ID,"*l")换成uart.read(UART_ID,1024)后面这个1024,为uart.setup的第7个参数,串口缓冲区你设置的大小,未设置默认为1024字节,如果需要用户自行设置,则最小512,最大4096

而当有串口发送事件产生时,模块会进入writeOk函数,该函数比较简单,就打印了下发送成功字样。

最后一行因为有跨文件调用,所以需要return 文件名,也就是加一句return testUart1

最后整个testUart1.lua就被我们改造成了这样

wKgZPGlmIqWAAxKWAAM6TjRMeec811.png


至此 整个改造过程结束,改造后的文件我也放在下面方便用户对比

luatos_uart.zip

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

审核编辑 黄宇

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

    关注

    0

    文章

    173

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LuatOS:485 总线硬件设计要点与 exmodbus 库开发实战

    在工业物联网通信开发中,485 总线与 Modbus 协议的组合应用十分常见。本文以合宙 Air780EHV 系列模组为实例,围绕 LuatOS 开发环境,详解 485 总线的硬件设计细节,包括其
    的头像 发表于 03-19 17:57 234次阅读
    <b class='flag-5'>LuatOS</b>:485 总线硬件设计要点与 exmodbus 库开发实战

    UPS电源常见故障维修全解析:从排查到修复的实战指南

    ​当UPS不间断电源发生故障时,许多用户会感到手足无措。它不仅是设备断电时的“救命稻草”,其自身的稳定运行更是整个系统可靠性的基石。理解常见故障背后的原因并掌握基础排查方法,能在关键时刻争取宝贵时间
    的头像 发表于 02-05 09:30 576次阅读
    UPS电源<b class='flag-5'>常见故障</b>维修全解析:从<b class='flag-5'>排查</b>到修复的实战指南

    轻松掌握——LuatOS socket基础知识和应用开发

    对于刚接触LuatOS开发的工程师而言,实现设备联网往往是第一个重要目标,而Socket编程正是实现这一目标的核心技术路径。本文以循序渐进的方式,带领读者从最基础的Socket概念入手,逐步掌握在
    的头像 发表于 01-28 20:07 387次阅读
    轻松掌握——<b class='flag-5'>LuatOS</b>  socket基础知识和应用开发

    解锁:LuatOS框架的使用(下篇)

    接上一篇 2.3 LuatOS 的定时器(timer) 对于 LuatOS 应用程序来说,定时器本质上也算是一种特殊的消息,因为定时器太常用了,所以把他单独拎出来,单独的一个章节进行讲解
    的头像 发表于 01-28 13:18 284次阅读
    解锁:<b class='flag-5'>LuatOS</b>框架的使用(下篇)

    LuatOS框架的使用(上)

    在资源受限的物联网终端设备中,如何实现快速开发与稳定运行是关键挑战。LuatOS框架通过将Lua语言与底层硬件抽象层深度融合,提供了一套简洁高效的开发范式。本文将围绕LuatOS框架的使用展开,从
    的头像 发表于 01-27 19:38 385次阅读
    <b class='flag-5'>LuatOS</b>框架的使用(上)

    LuatOS-Air脚本移植到LuatOS版本注意事项

    一、lua版本不一样 LuatOS-Air使用的是lua5.1版本,本身不支持位移运算符。 LuatOS使用的是lua5.3版本,取消了module(..., package.seeall)这种形式
    的头像 发表于 01-17 14:48 1269次阅读
    <b class='flag-5'>LuatOS-Air</b>脚本移植到<b class='flag-5'>LuatOS</b>版本注意事项

    警惕兼容性陷阱:LuatOS-Air脚本在LuatOS中的运行异常分析

    即使语法正确的LuatOS-Air脚本,在LuatOS环境中也可能出现“静默失败”——程序无报错但功能未执行。这类问题多与系统事件循环、模块加载时机或硬件抽象层调用方式有关。本文通过多个真实
    的头像 发表于 01-13 19:20 317次阅读
    警惕兼容性陷阱:<b class='flag-5'>LuatOS-Air</b>脚本在<b class='flag-5'>LuatOS</b>中的运行异常分析

    LuatOS下载实战指南:从流程梳理到常见故障排除

     对于初次接触LuatOS的开发者而言,成功将固件下载至目标设备是迈向项目实现的第一步。然而,下载过程中常因环境配置不当或操作失误而中断。本文将从实际开发角度出发,系统讲解LuatOS下载的完整
    的头像 发表于 12-26 18:55 227次阅读
    <b class='flag-5'>LuatOS</b>下载实战指南:从流程梳理到<b class='flag-5'>常见故障</b>排除

    构建可靠USB应用:硬件设计要点与LuatOS开发技巧!

    指导。 本文以Air780EPM系列低功耗模组为例,分享USB接口的硬件设计要点以及LuatOS高效开发API,帮助开发者在设计中避开常见陷阱,快速构建稳定可靠的USB应用。 01. 模组管脚
    的头像 发表于 12-15 10:46 345次阅读
    构建可靠USB应用:硬件设计要点与<b class='flag-5'>LuatOS</b>开发技巧!

    Keithley吉时利6511常见故障排查及解决方法

    Keithley吉时利6511作为一款精密测量仪器,在长期使用中可能会遇到各种故障。以下是该设备常见故障排查思路及解决方法,帮助用户快速定位问题并恢复设备正常运行。     一、常见故障
    的头像 发表于 11-21 18:47 1334次阅读
    Keithley吉时利6511<b class='flag-5'>常见故障</b><b class='flag-5'>排查</b>及解决方法

    LuatOSAir8000 AGPS辅助定位教程与实践

    本教程演示了Air8000在LuatOS中利用AGPS辅助定位实现快速定位的方法,系统讲解AGPS原理及开发应用时的注意事项。   一、AGPS 概述   AGPS(Assisted GPS,辅助
    的头像 发表于 10-31 16:51 3216次阅读
    <b class='flag-5'>LuatOS</b>下<b class='flag-5'>Air</b>8000 AGPS辅助定位教程与实践

    Task任务:LuatOS实现“任务级并发”的核心引擎

    Task任务通过其强大的并发处理能力,使LuatOS能够在单线程环境中模拟多线程执行,通过协程的挂起与恢复机制,实现任务级的并行操作,显著提升系统效能。 sys核心库是LuatOS运行框架库,也是
    的头像 发表于 08-28 13:49 648次阅读
    Task任务:<b class='flag-5'>LuatOS</b>实现“任务级并发”的核心引擎

    揭秘LuatOS Task:多任务管理的“智能中枢”

    Task任务作为LuatOS的核心组成部分,通过智能化的任务管理机制,实现任务的创建、调度与协同运行,让复杂应用得以高效并行处理,满足实时场景下的严苛需求。 sys核心库是LuatOS运行框架库
    的头像 发表于 08-28 13:48 796次阅读
    揭秘<b class='flag-5'>LuatOS</b> Task:多任务管理的“智能中枢”

    LuatOS编程基础教程:手把手带你入门物联网开发!

    对于渴望进入物联网开发领域的初学者来说,LuatOS是一个理想的起点。本教程将通过由浅入深的教学方式,从搭建开发环境、理解核心API到编写简单应用,逐步引导你掌握LuatOS编程的核心技能,开启智能
    的头像 发表于 06-11 13:03 859次阅读
    <b class='flag-5'>LuatOS</b>编程基础教程:手把手带你入门物联网开发!

    吉时利2400数字源表常见故障排查与校准教程

    。本文将详细介绍吉时利2400数字源表的常见故障排查方法、校准流程及维护注意事项,帮助用户快速解决常见问题,确保仪器稳定运行。   一、常见故障排查
    的头像 发表于 06-10 12:02 1037次阅读
    吉时利2400数字源表<b class='flag-5'>常见故障</b><b class='flag-5'>排查</b>与校准教程