一级a做爰小说免费网站做程序网站需要什么代码吗
2026/2/24 6:28:38 网站建设 项目流程
一级a做爰小说免费网站,做程序网站需要什么代码吗,株洲网站平台搭建,wordpress post编辑当LuatOS-Air脚本无法在LuatOS上正常运行#xff0c;开发者常归咎于固件问题#xff0c;实则多数故障源于代码层面的不兼容。本文系统归因常见错误#xff0c;如使用已废弃接口、误用任务模型、忽略硬件抽象差异等#xff0c;帮助开发者快速定位问题源头。 一、lua版本不一…当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_id2068这里又分为了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接下来举个例子首先封装一个函数我们新建一个文件叫tools.lua把这个函数放进去现在整个文件如下面这样现在我们封装的这个函数就能在其他文件(例如main.lua)里被调用了具体代码如下当调用了require接口后Lua虚拟机会自动加载你调用的文件执行文件的内容然后返回你文件里return的结果。为了更好地理解这段话我们可以看下面两个文件其中main.lua是被运行的那个入口文件此处为第一种调用方法简单来说被调用文件头部将module(..., package.seeall)换成文件名{}文件末尾处加return {本文件中写的函数名本文件中写的函数名}有多个函数的时候可以添加多个元素名 元素名进table里。第二种调用方法依旧是在文件开头写上文件名{}不同的是需要被调用的函数名可以写成文件名.函数名的形式最后的return不需要return一个很长的table了只需要return 文件名例如需要在main.lua 中调用test.lua的test函数那么除了固定格式以外的main.lua可以写成具体可参考https://gitee.com/openLuat/LuatOS/tree/master/script/libs这里所有的demo四、实例以uart的demo为例笔者将带着用户将LuatOS-Air uart的demo移植到luatos上仅讲解uart1的移植过程其他串口通用除去无关本次移植过程的部分LuatOS-Air的uart1完整demo如下是一个自发自收的测试demoluatos完整的demo也会放在最后方便用户对比。LuatOS-Air_uart.zip开始移植main.lua的改造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就被我们改造成了下面这样testUart1.lua的改造接下来进入testUart1.lua中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_id2250#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就被我们改造成了这样至此 整个改造过程结束改造后的文件我也放在下面方便用户对比luatos_uart.zip今天的内容就分享到这里了~

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询