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

    文章

    4384

    浏览量

    65130
  • LuatOS
    +关注

    关注

    0

    文章

    104

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    遇到LuatOS开发难题?或许你忽略了这三关键常识。它们看似简单,却能破解资源管理、效率提升等瓶颈问题,为你的项目注入新活力,实现技术跃迁。 本期一起来了解
    的头像 发表于 06-23 15:05 ?100次阅读
    突破<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 ?241次阅读
    支持<b class='flag-5'>二次开发</b>的工业级<b class='flag-5'>二</b>维码扫码读头选购指南

    云MES系统源码,支持 SaaS 多租户,支持二次开发

    万界星空科技MES生产制造执行系统源码,有演示,多个项目应用案例,成熟稳定。支持二次开发,商业授权后可商用。
    的头像 发表于 05-07 11:14 ?276次阅读
    云MES系统源码,支持 SaaS 多租户,支持<b class='flag-5'>二次开发</b>

    血泪教训总结:Air780EPM的LuatOS二次开发——OneWire协议调试注意事项

    在物联网设备开发中,精准且稳定的数据传输是构建智能系统的核心。通过本文,开发者不仅能掌握规避常见陷阱的方法,还能学习如何利用Air780EPM的硬件特性与LuatOS的灵活API设计,
    的头像 发表于 03-20 17:52 ?579次阅读
    血泪教训总结:Air780EPM的<b class='flag-5'>LuatOS</b><b class='flag-5'>二次开发</b>——OneWire协议调试注意事项

    DLP6500想调用API进行自主二次开发,怎么构建开发环境?

    请问一下,我购置了DLP6500型号产品,想利用该产品进行开发,实现高速投影的功能。 但是我现在只找到了GUI界面,请问一下,如果我想调用API进行自主二次开发,怎么构建开发环境? 最好有相关的技术指导文件,谢谢。
    发表于 03-03 07:03

    怎么配置dlp6500二次开发的环境,可以使用VS2013吗?

    我想请问一下,怎么配置dlp6500二次开发的环境,可以使用VS2013吗?有没有什么可以参考的文件,感谢!
    发表于 02-28 06:39

    请问LDC1312EVM和TI提供的软件GUI能被二次开发吗?

    请问LDC1312EVM和TI提供的软件GUI能被二次开发吗,想做个测试台供车间员工使用。
    发表于 02-26 06:35

    DLP4500-C350REF如何在linux下借助SDK二次开发

    请问在哪里有二次开发环境配置文档
    发表于 02-18 08:24

    深居浅出AutoCAD二次开发

    深居浅出AutoCAD二次开发,net版
    发表于 01-06 14:12 ?9次下载

    TSW14J56EVM板卡提供二次开发的接口怎么使用的?

    TSW14J56EVM板卡提供二次开发的接口怎么使用的,有没有详细的使用说明文档?
    发表于 01-03 07:29

    SOLIDWORKS二次开发参数化设计工具? 慧德敏学

    SOLIDWORKS二次开发参数化设计工具?涵盖选型、建模、装配、出图、编码、报表、集成等众多环节和任务的整合,我们除了提供专业培训,还可针对实际产品提供项目导入,实现交钥匙工程,消除企业的所有风险
    的头像 发表于 12-20 16:21 ?532次阅读

    SOLIDWORKS二次开发应用范围与实例

    SOLIDWORKS二次开发为企业和设计师们提供了广阔的定制化空间,能够更好地满足复杂多变的设计需求,帮助工程师和设计师提高工作效率,实现更复杂的自动化任务。如您有SOLIDWORKS二次开发需求,欢迎咨询Solidkits
    的头像 发表于 12-13 16:33 ?1091次阅读

    可以改TSW1405内部程序或者是修改HSDC PRO的程序做二次开发吗?

    可以改TSW1405内部程序或者是修改HSDC PRO 的程序做二次开发吗?
    发表于 11-27 07:29

    什么~FPGA可以自行二次开发了?

    什么!FPGA可以自行二次开发了? 目前市场上的标准采集卡通常不支持用户自行开发FPGA。但因为应用环境的需要,不仅仅只需要单一的数据采集流程,往往还需要在其中嵌入更复杂的运行和分析逻辑。为了解
    的头像 发表于 10-14 15:47 ?647次阅读
    什么~FPGA可以自行<b class='flag-5'>二次开发</b>了?

    ARMxy ARM工业边缘计算网关带Ubuntu OS支持二次开发

    ARMxy系列工业边缘计算网关,搭载Ubuntu操作系统,不仅提供了强大的数据处理能力,而且通过支持二次开发,为企业提供了定制化解决方案的可能性。本文将深入探讨ARMxy网关的技术特性、Ubuntu
    的头像 发表于 08-19 15:32 ?813次阅读
    ARMxy ARM工业边缘计算网关带Ubuntu OS支持<b class='flag-5'>二次开发</b>