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

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

3天内不再提示

解锁LuatOS新世界:二次开发必备的3个核心常识

青山老竹农 来源:jf_82863998 作者:jf_82863998 2025-06-23 16:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

踏入LuatOS的二次开发领域,掌握关键常识是开启高效编程之旅的第一步。本文将揭示三个不可或缺的核心要点,助你快速突破技术壁垒,深度挖掘系统潜力,让开发效率与创造力同步飙升。

本期一起来了解LuatOS开发需要熟悉的几个常识。

一、匿名函数

在Lua代码里面,经常看到没有名字的函数。

这种函数定义之后,要么马上运行,要么作为另一个函数的返回值赋给其他变量,所以并不需要一个函数名字——称为匿名函数。

匿名函数基础语法结构:

wKgZO2hY6qmAP2AIAAGzy0dgvG0913.png

匿名函数可以某些时候简化代码,初学者写代码可以先不考虑匿名函数。但是由于匿名函数在你能阅读到的Lua代码里面出现的频次实在是太高了,所以你也不得不重视和习惯匿名函数。

二、闭包

闭包的实现通常是通过在外部函数内部定义一个函数,并将这个内部函数作为外部函数的返回值。

这样一来,内部函数就可以访问外部函数作用域中的变量,即使外部函数已经执行完毕,这些变量依然可以被内部函数访问——从而形成闭包。

常见的闭包实现模式如下:

wKgZPGhY6vSACcZOAADU2E88r5s901.png

这样的好处是,可以定义一个函数,能够在一定范围内,访问外部的变量,实现可控的持续行为。

很多初学者会被这段代码迷惑,会被绕晕。

这里做一下解释:

z函数里面声明的变量,z是函数的参数;

在代码里面因为f=outer(10),所以f(5)就意味着是调用了两次函数,传入了两个函数的参数:outer(10)(5);

第一次调用,out(10) ,意味着在outer函数里面,y = x这句,x换成10,就是:y = 10;

outer(10)(5)意味着5是内部匿名函数的参数,就是替代z的;

匿名函数返回y+z,这里y是10,z是5,返回的就是10+5=15。

这里比较绕的,就是给了两次参数,一个是10对应x,一个是5对应z。

匿名函数和闭包,对初学者确实有点绕。很多读者不明白:为什么z是outer的第二个参数?

这里需要特别搞清楚的是,outer这个函数的返回值是个函数,而且这个函数是有参数的。

那么,这个带参数的函数赋值给f之后,f就是个函数了。于是给f一个参数5,这个5自然就是返回的函数的参数了,也就是z了。

虽然并不是所有的闭包都是上面这种代码的实现形式,但是初学者可以先记住这样的闭包形式。

如果不习惯闭包,初学者可以先避免在代码里面体现闭包的代码形式。

三、回调函数

3.1 回调函数是什么

回调函数是在LuatOS编程过程中经常用到的一个技术。理解LuatOS的回调函数,可以从“事件驱动”和“函数作为参数”两个角度来把握:

回调函数(Callback)——是在特定事件发生时,由系统或框架自动调用你事先定义好的函数。你只需要把自己的函数注册给系统,等事件触发时,系统就会帮你调用它。

本质上,回调函数就是一个普通函数,但它被作为参数传递或注册到其他地方,由系统或其他代码在合适的时机自动执行。

回调函数的作用是实现事件响应,异步处理。

消息到来,定时器到点,网络收发等功能都经常会用到回调函数的处理。

总之,LuatOS的回调函数,就是你注册给系统的,在特定事件发生时自动被调用的函数。

回调函数让事件响应、异步处理、任务解耦变得简单灵活,是LuatOS事件驱动编程的核心机制之一。

3.2 回调函数做消息订阅与发布

LuatOS支持通过sys.subscribe订阅消息并注册回调函数,消息发布时自动调用回调:

wKgZO2hY64CAdpLjAAEDn_nWVYk880.png

当sys.publish("TEST", 123) 被调用时,LuatOS内部会遍历订阅者列表,找到所有订阅了"TEST" 的回调函数,并自动把参数123传给这些回调函数。

通过这样的处理,事件触发和处理逻辑就被解耦,方便扩展和维护。

3.3 回调函数做定时器和异步操作

定时器到点后自动调用注册的回调函数:

wKgZPGhY67qAYWNaAACGhUJebhI933.png

3.4 任务和协程场景的回调函数使用

在多任务,也就是LuatOS的协程场景下,回调函数也常用于任务唤醒、事件响应等。

解耦调用者与被调用者:调用者只需知道“有回调”,不用关心回调具体做什么,提升灵活性。

你只需更换回调函数,就能实现不同的处理逻辑,无需修改底层框架代码。

任务和协程的详细信息,后续再讲解。

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

审核编辑 黄宇

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

    关注

    3

    文章

    4423

    浏览量

    68074
  • LuatOS
    +关注

    关注

    0

    文章

    180

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【请教】FPGA烧录软件工具二次开发问题

    请教各位大佬: Vivado 2018.3和Pango Design Suite 2025.1 这两款FPGA烧录软件工具能够二次开发吗?实现上位机控制软件调用它们,实现自动化的FPGA测试程序烧录和烧录成功的反馈信号。
    发表于 03-17 16:34

    UV胶可以二次固化吗?

    程中,用户常常会遇到一问题:UV胶是否可以进行“二次固化”?本文将从原理、适用条件及限制因素等方面,系统分析UV胶的二次固化可能性。一、什么是“二次固化”?所谓
    的头像 发表于 01-27 11:27 717次阅读
    UV胶可以<b class='flag-5'>二次</b>固化吗?

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

    的跨文件调用。 、api不同 首先说明,core和脚本有所不同,用户可以理解为,core是安卓/ios系统,脚本为一个又一个的app,只有core+脚本,才能支撑起完整的一二次开发
    的头像 发表于 01-17 14:48 1308次阅读
    <b class='flag-5'>LuatOS</b>-Air脚本移植到<b class='flag-5'>LuatOS</b>版本注意事项

    讲透二次回流工艺的核心逻辑

    二次回流工艺是通过两分步高温焊接,解决复杂封装中多层级器件互连、敏感器件与大功率器件共存焊接难题的核心技术,核心逻辑为“高温打底、低温叠加”。其主要应用于PoP堆叠封装、SiP系统级
    的头像 发表于 12-25 11:37 1970次阅读
    一<b class='flag-5'>次</b>讲透<b class='flag-5'>二次</b>回流工艺的<b class='flag-5'>核心</b>逻辑

    宇树人形机器人的配置,核心代码,调试方法,二次开发接口

    宇树人形机器人的配置,核心代码,调试方法,二次开发接口
    的头像 发表于 12-10 09:05 6917次阅读

    PMC-AX3100边缘网关:高效采集、边缘可视、二次开发更简单

    协议并在本地智能处理数据?在强光或断网环境下,产品能保证现场清晰可视、可靠操作吗?产品能实现设备就地化显示与监控吗?产品能否开放二次开发接口,便于快速植入已有代码
    的头像 发表于 12-02 18:04 869次阅读
    PMC-AX3100边缘网关:高效采集、边缘可视、<b class='flag-5'>二次开发</b>更简单

    先楫芯片赋能HPM生态灵巧手二次开发,工业控制/实验室原型速落地

    手动作精准度,更有HPMSDK提供FreeRTOS/ROS等丰富中间件,从底层驱动到应用层开发全流程覆盖,配合100万空载开合测试验证的稳定硬件,让二次开发既高效又可靠
    的头像 发表于 12-02 10:01 934次阅读
    先楫芯片赋能HPM生态灵巧手<b class='flag-5'>二次开发</b>,工业控制/实验室原型速落地

    新手必备LuatOS MCU核心库功能测试与实践指南

    新手如何快速掌握MCU芯片级开发?本文通过LuatOS的MCU核心库,全面演示时钟频率获取、唯一ID读取、高精度计时、IO复用配置等核心功能的测试流程,并提供实用示例,帮助
    的头像 发表于 11-12 14:26 518次阅读
    新手<b class='flag-5'>必备</b>:<b class='flag-5'>LuatOS</b> MCU<b class='flag-5'>核心</b>库功能测试与实践指南

    将蜂鸟E203的内核移植到fpga之后该怎么进行二次开发呢?

    你们好!请问一下我将蜂鸟E203的内核移植到fpga之后该怎么进行二次开发呢?比如我想点亮板子上的led?驱动摄像头进行图像识别?这些该如何进行呢?蜂鸟有类似freedom studio这样的嵌入式开发平台吗?
    发表于 11-10 07:09

    直播回顾 | 掌握车载通信核心技术,虹科CAN总线实战:PCAN二次开发技术直播助您轻松拿捏总线开发“创新引擎

    •1CAN总线二次开发:构建智能汽车“神经网络”的核心能力在“软件定义汽车”的时代,整车电子电气架构正从分布走向集中,车载网络的数据量和复杂度呈指数级增长。基于PCAN等专业工具的二次开发能力
    的头像 发表于 10-09 17:33 871次阅读
    直播回顾 | 掌握车载通信<b class='flag-5'>核心</b>技术,虹科CAN总线实战:PCAN<b class='flag-5'>二次开发</b>技术直播助您轻松拿捏总线<b class='flag-5'>开发</b>“创新引擎

    【离线语音】安信可VC-01/02二次开发篇:自定义音频播放控制

    系列教程 【二次开发篇】虚拟开发环境搭建和分享 安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】事件和GPI
    的头像 发表于 09-25 16:34 1066次阅读
    【离线语音】安信可VC-01/02<b class='flag-5'>二次开发</b>篇:自定义音频播放控制

    安信可VC-01/02二次开发篇: PWM输出

    系列教程 【二次开发篇】虚拟开发环境搭建和分享 安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】事件和GPI
    的头像 发表于 08-27 16:06 1248次阅读
    安信可VC-01/02<b class='flag-5'>二次开发</b>篇: PWM输出

    安信可VC-01/02二次开发篇: 事件和GPIO控制

    系列教程 【二次开发篇】虚拟开发环境搭建和分享 安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】事件和GPIO控
    的头像 发表于 08-19 14:02 1512次阅读
    安信可VC-01/02<b class='flag-5'>二次开发</b>篇: 事件和GPIO控制

    突破LuatOS开发瓶颈:三二次开发必备知识揭秘!

    遇到LuatOS开发难题?或许你忽略了这三关键常识。它们看似简单,却能破解资源管理、效率提升等瓶颈问题,为你的项目注入新活力,实现技术跃迁。 本期一起来了解
    的头像 发表于 06-23 15:05 567次阅读
    突破<b class='flag-5'>LuatOS</b><b class='flag-5'>开发</b>瓶颈:三<b class='flag-5'>个</b><b class='flag-5'>二次开发</b><b class='flag-5'>必备</b>知识揭秘!

    支持二次开发的工业级维码扫码读头选购指南

    在快节奏的工业环境中,如何让维码识别速度提升200%?面对复杂多变的扫码需求,普通扫码设备往往力不从心,而支持二次开发的工业级扫码读头正成为企业降本增效的秘密武器。本文将为您揭开选购工业级扫码读头
    的头像 发表于 06-11 16:05 915次阅读
    支持<b class='flag-5'>二次开发</b>的工业级<b class='flag-5'>二</b>维码扫码读头选购指南