fix(vd960Air): 修复上电反复复位, 打通测试服务器连接
现象: 上电后 Lua VM 报 uart_app.lua:28 attempt to index a boolean value
→ VM exit → 15s 后自动复位, 死循环, 永远走不到 MQTT 连接
根因(4 处叠加, 第 1 处致命):
1. config.lua 末尾漏 return —— require 对无返回值模块返回 true,
local CFG = require "config" 后访问 CFG.CFG_xxx 直接报错
2. 全工程 10 处调用 mstick(), 但 LuatOS 并无此 API(正确为 mcu.ticks())
3. MQTT 服务器仍是合宙官方测试服 lbsmqtt.airm2m.com:1884
4. MQTT 鉴权用户名/密码硬编码为空串
修复:
1. config.lua 末尾加 return _G(配置项本就是全局变量);
另: ClientID 的 mobile.imei() 加空值防护(or "unknown")
2. 新增 mstick.lua: 全局 mstick() = mcu.ticks() 封装(回退 os.time()*1000),
原 10 处调用点零改动; main.lua 在 require "config" 之后 require "mstick"
3. 服务器改为 110.41.131.144:1883(明文非 TLS), 新增 CFG_MQTT_USER/PASS,
mqtt_main 改为 auth(CLIENT_ID, CFG_MQTT_USER, CFG_MQTT_PASS, true)
4. .gitignore 放行 vd960Air/tools/ —— 官方 tools/ 忽略规则导致自检脚本
无法入库(sim_frame_test.py 自 8/31 起一直未入库)
新增工具:
- tools/sim_load_test.lua: 离线加载+冒烟自检(lua5.3 + LuatOS API 桩 + 严格全局
检查), 按 main.lua 真实顺序加载全部模块并冒烟调用关键函数, 用于抓取
"require 返回值缺失""调用了不存在的 API"这类语法检查抓不到的运行时问题
验证:
- luac5.3 -p 全部 14 个 lua 文件通过
- 离线自检: 16 项断言 + 8 项冒烟全部通过
- Python 帧协议参考验证全部通过
- readme Markdown 表格列数 0 异常
文档: readme 补 §8 板级问题修复记录, 更新文件结构/待确认清单/计划表
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
--[[
|
||||
@module mstick
|
||||
@summary 统一毫秒时基(全局 mstick()): 封装 LuatOS mcu.ticks()
|
||||
@version 0.1
|
||||
@date 2026.09.10
|
||||
@usage
|
||||
背景: 工程内原有 10 处调用 mstick(), 但 LuatOS 并未提供该 API
|
||||
(正确写法是 mcu.ticks(), 单位 1/mcu.hz() 秒; hz 通常 1000),
|
||||
上板运行必然报 "attempt to call a nil value (global 'mstick')"。
|
||||
|
||||
本模块提供全局函数 mstick() 作为工程唯一时基入口:
|
||||
- 优先 mcu.ticks(); 无 mcu 库时回退 os.time()*1000(便于 PC 侧离线自检)
|
||||
- 约定单位毫秒。差值判据(now - marked)保持不变即可, 无需关心绝对基准
|
||||
- ⚠ mcu.ticks() 为 32 位计数, 约 49.7 天回绕一次; 超时判定均为差值比较,
|
||||
回绕瞬间最坏推迟一次触发(秒级), 对 5s/60s 级超时无实质影响
|
||||
|
||||
用法: 在 main.lua 中 require "mstick"(只 require, 不要用 local 接返回值,
|
||||
否则会遮蔽同名全局函数, 导致后续 mstick() 调用报错)
|
||||
]]
|
||||
|
||||
local function now_ms()
|
||||
if mcu and type(mcu.ticks) == "function" then
|
||||
return mcu.ticks()
|
||||
end
|
||||
return os.time() * 1000
|
||||
end
|
||||
|
||||
-- 全局函数: 工程内既有 10 处 mstick() 调用点依赖此全局名
|
||||
_G.mstick = now_ms
|
||||
|
||||
return { now = now_ms }
|
||||
Reference in New Issue
Block a user