现象(第一批修复后): 模块成功注网(IP_READY 10.38.28.79)并连上 MQTT(conack nil nil /
suback true 0), 随即在组装 initialize 报文时崩溃:
E/user.coroutine.resume link_info.lua:29: attempt to call a nil value (field 'msisdn')
link_info.lua:29 in 'link_info.get'
app_iot.lua:34 in upvalue 'build_initialize'
app_iot.lua:65 in function 'app_iot.on_connected'
E/main Lua VM exit!! reboot in 15000ms
根因: mobile.msisdn() 在 Air780EPM 上不存在。LuatOS 各固件 API 面不一致, 且字段不存在时
"直接调用 = 抛异常崩 VM"(不是返回 nil) —— 与 mstick() 同性质。手机号官方 API 是
mobile.number(simid)(见 demo/mobile/mobile_test.lua), 物联卡普遍也无机号。
修复(防御性, 两层):
1. link_info.lua: 新增 safe(fn, ...) 助手(type(fn)=="function" 判断 + pcall), 所有 mobile.*
调用统一走它 → 字段缺失/调用异常一律返回 nil、不再抛出; msisdn 改用 safe(mobile.number, 0);
csq 兼容 table 返回
2. app_iot.lua: 新增 get_link() 兜底(内部 pcall + 失败时返回全空 link 表), inject_link 与
build_initialize 均改用它 → link 采集失败绝不影响上行, 更不允许崩 VM
自检增强 + 反向验证:
- tools/sim_load_test.lua 的 mobile 桩改为"只含官方 demo 证实存在的 API"(移除 msisdn):
桩面必须与真实固件一致 —— "想当然"多写的桩会掩盖真实 bug
- 反向验证: 把 mobile.msisdn() 注射回代码 → 自检精确报
"✗ link_info.get() [link_info.lua:53: attempt to call a nil value (field 'msisdn')]"(exit 1);
还原后 exit 0 → 该自检可拦住整类"API 面假设错误"
验证: luac5.3 -p 全绿; Lua 离线自检通过; Python 帧协议验证通过; readme 表格列数 0 异常
文档: readme §8 补第二批修复记录, 修正 link.msisdn 字段来源说明
LuatOS,基于强大的Lua引擎架构设计,Lua脚本开发,快速实现业务逻辑;
LuatOS,在合宙历史上经历了两个阶段,一个是LuatOS-Air,一个是LuatOS-SoC,也就是现在的LuatOS;
LuatOS-Air,典型硬件为Air724UG,为合宙上一代的产品;
LuatOS,也就是曾经命名过的LuatOS-SoC,是合宙现在主推的开发方式,所支持的硬件如下:
Air8000系列,包括Air8000/Air8000W/Air8000G/Air8000T/Air8000A/Air8000D等;
Air8101系列,包括Air8101/Air8101A等;
Air780Exx系列,包括Air780EPM/Air780EHM/Air780EHV/Air780EGH等;
LuatOS,现已支持74个核心库,55个扩展库,1000余个API,100多个基于场景的demo,让你开发智能设备像做PPT一样轻松。
本仓库包含如下文件夹:
.github文件夹,Github Action 配置文件, 用于自动化构建和测试components 组件库,,LuatOS在Lua基础上扩展的一系列库的源码lua文件夹,Lua虚拟机5.3系列的源码, 经过合宙优化和测试luat文件夹,LuatOS核心框架代码module文件夹,合宙模组和工业引擎主流型号的固件、demo、project参考代码等script文件夹,LuatOS扩展库tools文件夹,辅助工具.gitignoreGit的文件忽略配置文件
快速入门
- 使用或购买支持的开发板
- 掌握刷机
- 尝试学习LuatOS, 浏览API, 30分钟入门lua语法(视频)
- 愉快地写业务代码
资料大全
- docs@luatos
- 跨平台命令行工具 luatos-cli
授权协议
print("感谢您使用LuatOS ^_^")
print("Thank you for using LuatOS ^_^")