init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
-- 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
|
||||
Reference in New Issue
Block a user