从日志中可以明确看出,系统崩溃并触发重启(Lua VM exit!! reboot)的原因是:当前运行的 Lua 固件环境中不存在名为 pm(电源管理)的模块,导致 power_fsm.lua 第 3 行的 require "pm" 发生致命错误。
出现这种情况,通常是因为当前硬件平台或烧录的基础固件(Core)未包含该库,或者你的环境使用了不同的 API 来控制低功耗。
修复方案
你需要将代码中标准的 pm 模块调用,替换为你当前底层框架实际支持的休眠控制机制。
第一步:移除报错的引用
打开 power_fsm.lua,将第 3 行直接删除或注释掉:
local sys = require "sys"
-- local pm = require "pm" -- 删除或注释掉这一行
第二步:修改休眠与唤醒的实现
找到代码中的 keep_awake() 和 allow_sleep() 函数,将原本依赖 pm 模块的代码替换为你的硬件实际使用的控制逻辑:
-- 请求唤醒(保持网络和MCU全速运行)
local function keep_awake()
-- 如果你的框架自动管理唤醒,这里可以留空
-- 或者填入你实际控制唤醒的代码(例如拉高特定 GPIO,或发送特定的唤醒命令)
log.info("FSM", "请求保持唤醒状态")
end
-- 尝试进入低功耗(只有在没有处理交互命令时才允许休眠)
local function allow_sleep()
if not is_processing_cmd then
log.info("FSM", "【状态 A】允许进入低功耗状态")
-- 在此填入你实际控制休眠的代码
-- 例如:sys.publish("ENTER_DEEP_SLEEP"),或者调用当前固件特有的休眠 API
end
end
补充排查建议
由于日志输出了 E/main Luat:,说明大概率使用的是 Luat/LuatOS 框架。如果在你的认知中,该设备应该支持 pm 模块:
- 固件版本问题: 请检查你给模组烧录的底层固件(Core / .soc 文件)是否是精简版。部分定制或精简版固件为了节省空间,会剔除 pm 模块。你需要前往官方重新下载并烧录包含完整功能的标准版基础固件。