Files
mobile_comm/luatos/air780epm/module/Air780EPM/demo/wdt/internal_wdt.lua
T
wangfq 173dd6874f init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码
- 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等)
- 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
2026-08-31 08:53:49 +08:00

71 lines
2.1 KiB
Lua

-- internal_wdt.lua
--[[
@summary 内部看门狗演示模块
@version 1.0
@date 2025.10.25
@author 陈媛媛
@usage
本模块演示内部看门狗的正常和异常场景:
1、正常场景:定期喂狗,系统正常运行
2、异常场景:模拟故障导致无法喂狗,触发看门狗复位
3、通过修改 DEMO_MODE 变量来选择演示模式:
- "normal": 正常喂狗模式
- "fault": 异常故障模式
注意:在异常模式下,设备会在运行一段时间后重启
]]
-- 演示模式选择: "normal" 或 "fault"
local DEMO_MODE = "normal" -- 修改这个变量来切换演示模式
-- 喂狗函数
function feed_watchdog()
wdt.feed()
log.info("wdt", "喂狗完成")
end
-- 故障模拟函数
function simulate_fault()
sys.wait(5000) -- 等待5秒,让系统先正常运行一会
-- 在进入死循环前尝试喂狗一次,并检查返回值
local success = wdt.feed()
log.info("wdt", "故障前最后一次喂狗,成功 =", success)
log.info("fault_task", "进入死循环模拟故障")
log.info("fault_task", "看门狗喂狗任务被阻塞,系统将在约20秒后重启")
while true do
-- 模拟故障场景,真的进入死循环
-- 这将导致无法喂狗,最终触发系统重启
end
end
-- 内部看门狗演示函数
function internal_wdt_demo()
-- 检查wdt库是否存在
if wdt == nil then
log.error("wdt", "wdt库不存在")
return
end
log.info("wdt", "硬件看门狗已由底层固件启用")
-- 检查开机原因
local reason1, reason2, reason3 = pm.lastReson()
log.info("reset_reason", "重启原因1:", reason1, "原因2:", reason2, "原因3:", reason3)
-- 定期喂狗,防止系统重启
-- 设置喂狗间隔为3秒,确保在20秒超时前完成喂狗
sys.timerLoopStart(feed_watchdog, 3000) -- 每3秒喂一次狗
end
if DEMO_MODE == "fault" then
-- 创建一个新的任务来模拟故障场景
sys.taskInit(simulate_fault)
end
-- 启动演示
sys.taskInit(internal_wdt_demo)
return internal_wdt_demo