|
|
@@ -12,6 +12,18 @@ _G.sys = require("sys")
|
|
|
-- 注意:本demo使用luatools下载!!!
|
|
|
-- 注意:本demo使用luatools下载!!!
|
|
|
|
|
|
+
|
|
|
+-- 启动时对rtc进行判断和初始化
|
|
|
+local t = rtc.get()
|
|
|
+log.info("rtc", json.encode(t))
|
|
|
+if t["year"] == 1900 then
|
|
|
+ -- 对air101/air103来说
|
|
|
+ -- 若复位启动, 那rtc时间必然是1900年, 设置时间就行
|
|
|
+ -- 若为唤醒, 那rtc时间必然已经设置过, 肯定不是1900, 就不用设置了
|
|
|
+ rtc.set({year=2022,mon=9,day=1,hour=0,min=0,sec=0})
|
|
|
+end
|
|
|
+t = nil -- 释放t这个变量
|
|
|
+
|
|
|
--添加硬狗防止程序卡死
|
|
|
wdt.init(15000)--初始化watchdog设置为15s
|
|
|
sys.timerLoopStart(wdt.feed, 10000)--10s喂一次狗
|
|
|
@@ -20,6 +32,7 @@ local LEDA = gpio.setup(24, 0, gpio.PULLUP) -- PB8输出模式
|
|
|
local LEDB = gpio.setup(25, 0, gpio.PULLUP) -- PB9输出模式
|
|
|
local LEDC = gpio.setup(26, 0, gpio.PULLUP) -- PB10输出模式
|
|
|
|
|
|
+
|
|
|
-- 这里启动的task也是闪灯, 用于展示休眠状态
|
|
|
sys.taskInit(function()
|
|
|
local count = 0
|
|
|
@@ -47,20 +60,24 @@ sys.taskInit(function()
|
|
|
-- 先演示LIGHT模式休眠, RAM不掉电, IO保持, 唤醒后代码继续跑
|
|
|
-- 设置休眠时长
|
|
|
log.info("pm", "轻休眠15秒", "要么rtc唤醒,要么wakeup唤醒", "RAM不掉电")
|
|
|
+ log.info("rtc", json.encode(rtc.get()))
|
|
|
pm.dtimerStart(0, 15000)
|
|
|
pm.request(pm.LIGHT)
|
|
|
-- 后面的语句, 正常情况下会在15000ms后执行
|
|
|
log.info("pm", "轻睡眠唤醒", "代码继续跑")
|
|
|
-- 这里等待3000ms,模拟业务执行,期间gpio的闪灯task将继续运行
|
|
|
+ log.info("rtc", json.encode(rtc.get()))
|
|
|
sys.wait(3000)
|
|
|
|
|
|
-- 接着演示 DEEP模式休眠, RAM掉电, IO失效, 唤醒相当于复位重启
|
|
|
-- 因为已经唤醒过,dtimer已经失效, 重新设置一个
|
|
|
- log.info("pm", "深休眠15秒", "要么rtc唤醒,要么wakeup唤醒", "RAM掉电")
|
|
|
- pm.dtimerStart(0, 15000)
|
|
|
+ log.info("rtc", json.encode(rtc.get()))
|
|
|
+ log.info("pm", "深休眠5秒", "要么rtc唤醒,要么wakeup唤醒", "RAM掉电")
|
|
|
+ pm.dtimerStart(0, 5000)
|
|
|
pm.request(pm.DEEP)
|
|
|
-- 后面代码都不会执行, 如果执行了, 那100%是wakeup电平有问题
|
|
|
log.info("pm", "这里的代码不会被执行")
|
|
|
+ log.info("rtc", json.encode(rtc.get()))
|
|
|
end)
|
|
|
|
|
|
-- 用户代码已结束---------------------------------------------
|