refactor(event): replace global 60s inactivity timer with per-second tick event
Adds KEY_EVENT_SECOND_TICK, generated once per real second from Clock_IncMS() via a new second_tick_flag and pushed through the normal event queue, so every foreground App's onEvent() receives it and decides independently whether to act. Removes the old global inactivity_timer (60s sleep from anywhere) entirely. HomeApp now accumulates its own idle-second counter and sleeps after 10s idle specifically while on the home screen; MenuApp's existing 10s auto-close is converted from onRun() polling to the same tick+reset pattern for consistency. Any non-tick key event resets each app's own counter to 0.
This commit is contained in:
@@ -13,6 +13,12 @@
|
|||||||
extern SystemState current_state;
|
extern SystemState current_state;
|
||||||
extern volatile u16 ms_tick;
|
extern volatile u16 ms_tick;
|
||||||
|
|
||||||
|
// 待机时钟界面闲置多久自动进入低功耗休眠的门限 (秒)
|
||||||
|
#define HOME_IDLE_SLEEP_SEC 10
|
||||||
|
|
||||||
|
// 本应用私有变量:累计未按任何键的秒数 (由 KEY_EVENT_SECOND_TICK 驱动,任意按键事件清零)
|
||||||
|
static u8 home_idle_sec = 0;
|
||||||
|
|
||||||
// 声明本应用的生命周期回调函数
|
// 声明本应用的生命周期回调函数
|
||||||
static void HomeApp_OnStart(void);
|
static void HomeApp_OnStart(void);
|
||||||
static void HomeApp_onRun(void);
|
static void HomeApp_onRun(void);
|
||||||
@@ -34,6 +40,7 @@ WristbandApp home_app = {
|
|||||||
*/
|
*/
|
||||||
static void HomeApp_OnStart(void)
|
static void HomeApp_OnStart(void)
|
||||||
{
|
{
|
||||||
|
home_idle_sec = 0; // 重新进入待机主页 (开机/从菜单退回/休眠唤醒) 都清零闲置计数
|
||||||
current_state = STATE_NORMAL; // 系统切入正常待机状态
|
current_state = STATE_NORMAL; // 系统切入正常待机状态
|
||||||
RF_SetMode(1); // 开启天线并置为接收模式,监听无线探测器
|
RF_SetMode(1); // 开启天线并置为接收模式,监听无线探测器
|
||||||
|
|
||||||
@@ -80,6 +87,21 @@ static void HomeApp_onClose(void)
|
|||||||
*/
|
*/
|
||||||
static EventResult HomeApp_onEvent(SystemEvent *evt)
|
static EventResult HomeApp_onEvent(SystemEvent *evt)
|
||||||
{
|
{
|
||||||
|
// 0. 整秒滴答:累计闲置秒数,达到门限就进入低功耗休眠
|
||||||
|
if (evt->key_event == KEY_EVENT_SECOND_TICK) {
|
||||||
|
home_idle_sec++;
|
||||||
|
if (home_idle_sec >= HOME_IDLE_SLEEP_SEC) {
|
||||||
|
home_idle_sec = 0;
|
||||||
|
current_state = STATE_SLEEP; // 系统置为休眠状态
|
||||||
|
Enter_Low_Power_Sleep(); // 阻塞函数,MCU 在此挂起,唤醒后自动继续往下执行
|
||||||
|
AppManager_SwitchToForeground(&home_app); // 强制重新走一遍 OnStart,刷新画面和背光
|
||||||
|
}
|
||||||
|
return EVENT_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 收到任意其它按键事件,说明用户仍在活动,清零闲置计数
|
||||||
|
home_idle_sec = 0;
|
||||||
|
|
||||||
// 1. 长按 ■ 确认键,打开设置主菜单 MenuApp
|
// 1. 长按 ■ 确认键,打开设置主菜单 MenuApp
|
||||||
if (evt->key_event == KEY_EVENT_CONFIRM_LONG) {
|
if (evt->key_event == KEY_EVENT_CONFIRM_LONG) {
|
||||||
AppManager_SwitchToForeground(&menu_app);
|
AppManager_SwitchToForeground(&menu_app);
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
#include "system.h"
|
#include "system.h"
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
#include "language.h"
|
#include "language.h"
|
||||||
#include "clock.h"
|
|
||||||
#include "../Drivers/rf.h"
|
#include "../Drivers/rf.h"
|
||||||
|
|
||||||
// 外部全局变量引用
|
// 外部全局变量引用
|
||||||
@@ -16,12 +15,11 @@ extern u8 menu_select;
|
|||||||
// 菜单闲置自动关闭超时 (秒):无任何按键操作达到这个时长,自动退出菜单返回时钟主页
|
// 菜单闲置自动关闭超时 (秒):无任何按键操作达到这个时长,自动退出菜单返回时钟主页
|
||||||
#define MENU_IDLE_TIMEOUT_SEC 10
|
#define MENU_IDLE_TIMEOUT_SEC 10
|
||||||
|
|
||||||
// 本应用私有变量:记录最近一次按键活动时的秒计时快照
|
// 本应用私有变量:累计未按任何键的秒数 (由 KEY_EVENT_SECOND_TICK 驱动,任意按键事件清零)
|
||||||
static u8 menu_idle_start_sec = 0;
|
static u8 menu_idle_sec = 0;
|
||||||
|
|
||||||
// 声明本应用的生命周期回调函数
|
// 声明本应用的生命周期回调函数
|
||||||
static void MenuApp_OnStart(void);
|
static void MenuApp_OnStart(void);
|
||||||
static void MenuApp_onRun(void);
|
|
||||||
static void MenuApp_onClose(void);
|
static void MenuApp_onClose(void);
|
||||||
static EventResult MenuApp_onEvent(SystemEvent *evt);
|
static EventResult MenuApp_onEvent(SystemEvent *evt);
|
||||||
|
|
||||||
@@ -30,7 +28,7 @@ WristbandApp menu_app = {
|
|||||||
APP_ID_MENU,
|
APP_ID_MENU,
|
||||||
"Menu",
|
"Menu",
|
||||||
MenuApp_OnStart,
|
MenuApp_OnStart,
|
||||||
MenuApp_onRun,
|
NULL,
|
||||||
MenuApp_onClose,
|
MenuApp_onClose,
|
||||||
MenuApp_onEvent
|
MenuApp_onEvent
|
||||||
};
|
};
|
||||||
@@ -41,7 +39,7 @@ WristbandApp menu_app = {
|
|||||||
static void MenuApp_OnStart(void)
|
static void MenuApp_OnStart(void)
|
||||||
{
|
{
|
||||||
menu_select = 0;
|
menu_select = 0;
|
||||||
menu_idle_start_sec = current_sec;
|
menu_idle_sec = 0;
|
||||||
current_state = STATE_PAIR_MENU; // 系统运行状态设为对码配置菜单
|
current_state = STATE_PAIR_MENU; // 系统运行状态设为对码配置菜单
|
||||||
RF_SetMode(0); // 关闭射频接收芯片,防止接收杂波干扰屏幕绘制
|
RF_SetMode(0); // 关闭射频接收芯片,防止接收杂波干扰屏幕绘制
|
||||||
UI_ShowMainMenu(menu_select); // 绘制主菜单
|
UI_ShowMainMenu(menu_select); // 绘制主菜单
|
||||||
@@ -49,20 +47,6 @@ static void MenuApp_OnStart(void)
|
|||||||
XTELL_LOG("[MenuApp] Started\r\n");
|
XTELL_LOG("[MenuApp] Started\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief MenuApp 轮询主回调:检测闲置超时,无操作达到 MENU_IDLE_TIMEOUT_SEC 秒自动退出
|
|
||||||
*/
|
|
||||||
static void MenuApp_onRun(void)
|
|
||||||
{
|
|
||||||
u8 elapsed = (current_sec >= menu_idle_start_sec)
|
|
||||||
? (current_sec - menu_idle_start_sec)
|
|
||||||
: (60 + current_sec - menu_idle_start_sec);
|
|
||||||
if (elapsed >= MENU_IDLE_TIMEOUT_SEC) {
|
|
||||||
XTELL_LOG("[MenuApp] Idle timeout, closing.\r\n");
|
|
||||||
AppManager_SwitchToForeground(&home_app);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief MenuApp 退出清理回调
|
* @brief MenuApp 退出清理回调
|
||||||
*/
|
*/
|
||||||
@@ -78,7 +62,19 @@ static void MenuApp_onClose(void)
|
|||||||
*/
|
*/
|
||||||
static EventResult MenuApp_onEvent(SystemEvent *evt)
|
static EventResult MenuApp_onEvent(SystemEvent *evt)
|
||||||
{
|
{
|
||||||
menu_idle_start_sec = current_sec; // 任意按键活动都刷新闲置计时起点
|
// 0. 整秒滴答:累计闲置秒数,达到门限就自动关闭菜单退回待机主页
|
||||||
|
if (evt->key_event == KEY_EVENT_SECOND_TICK) {
|
||||||
|
menu_idle_sec++;
|
||||||
|
if (menu_idle_sec >= MENU_IDLE_TIMEOUT_SEC) {
|
||||||
|
menu_idle_sec = 0;
|
||||||
|
XTELL_LOG("[MenuApp] Idle timeout, closing.\r\n");
|
||||||
|
AppManager_SwitchToForeground(&home_app);
|
||||||
|
}
|
||||||
|
return EVENT_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 收到任意其它按键事件,说明用户仍在操作,清零闲置计数
|
||||||
|
menu_idle_sec = 0;
|
||||||
|
|
||||||
if (evt->key_event == KEY_EVENT_UP_CLICK) {
|
if (evt->key_event == KEY_EVENT_UP_CLICK) {
|
||||||
// 短按 ▲ 键向上移动焦点,允许循环切换 (到顶绕到底)
|
// 短按 ▲ 键向上移动焦点,允许循环切换 (到顶绕到底)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ u8 current_hour = 10; // 系统软时钟:小时 (默认初
|
|||||||
u8 current_min = 35; // 系统软时钟:分钟 (默认初始化为 35 分)
|
u8 current_min = 35; // 系统软时钟:分钟 (默认初始化为 35 分)
|
||||||
u8 current_sec = 0; // 系统软时钟:秒
|
u8 current_sec = 0; // 系统软时钟:秒
|
||||||
volatile u8 clock_updated = 0; // 分钟跳变标志位,置位后用于驱动 UI 刷新时间显示
|
volatile u8 clock_updated = 0; // 分钟跳变标志位,置位后用于驱动 UI 刷新时间显示
|
||||||
|
volatile bit second_tick_flag = 0; // 整秒滴答标志位,每次秒进位置 1,由主循环转换为 KEY_EVENT_SECOND_TICK 事件
|
||||||
|
|
||||||
// 毫秒计数器 (Timer1 每 1ms 累加)
|
// 毫秒计数器 (Timer1 每 1ms 累加)
|
||||||
static u16 ms_cnt = 0;
|
static u16 ms_cnt = 0;
|
||||||
@@ -20,6 +21,7 @@ void Clock_IncMS(void)
|
|||||||
if (ms_cnt >= 1000) {
|
if (ms_cnt >= 1000) {
|
||||||
ms_cnt = 0; // 1秒时间到
|
ms_cnt = 0; // 1秒时间到
|
||||||
current_sec++;
|
current_sec++;
|
||||||
|
second_tick_flag = 1; // 整秒滴答,通知主循环生成 KEY_EVENT_SECOND_TICK 事件
|
||||||
if (current_sec >= 60) {
|
if (current_sec >= 60) {
|
||||||
current_sec = 0; // 1分钟时间到
|
current_sec = 0; // 1分钟时间到
|
||||||
current_min++;
|
current_min++;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ extern u8 current_hour;
|
|||||||
extern u8 current_min;
|
extern u8 current_min;
|
||||||
extern u8 current_sec;
|
extern u8 current_sec;
|
||||||
extern volatile u8 clock_updated;
|
extern volatile u8 clock_updated;
|
||||||
|
extern volatile bit second_tick_flag; // 整秒滴答标志位,每次 current_sec 递增时置 1,供主循环转换为事件
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 系统软时钟毫秒递增更新 (在 1ms 中断中调用)
|
* @brief 系统软时钟毫秒递增更新 (在 1ms 中断中调用)
|
||||||
|
|||||||
@@ -81,7 +81,8 @@ typedef enum {
|
|||||||
KEY_EVENT_UP_DOWN_COMB, // ▲ 与 ▼ 双键组合按下事件
|
KEY_EVENT_UP_DOWN_COMB, // ▲ 与 ▼ 双键组合按下事件
|
||||||
KEY_EVENT_CONFIRM_CLICK, // ■ 确认键短按事件 (保存设置或进入子菜单)
|
KEY_EVENT_CONFIRM_CLICK, // ■ 确认键短按事件 (保存设置或进入子菜单)
|
||||||
KEY_EVENT_CONFIRM_LONG, // ■ 确认键长按事件 (打开主菜单)
|
KEY_EVENT_CONFIRM_LONG, // ■ 确认键长按事件 (打开主菜单)
|
||||||
KEY_EVENT_POWER_OFF // 长按 KEY_DOWN 开关机触发事件
|
KEY_EVENT_POWER_OFF, // 长按 KEY_DOWN 开关机触发事件
|
||||||
|
KEY_EVENT_SECOND_TICK // 整秒滴答事件,每秒派发一次,各 App 自行决定是否用它累计闲置时长
|
||||||
} KeyEvent;
|
} KeyEvent;
|
||||||
|
|
||||||
/* ====== 事件优先级枚举 ====== */
|
/* ====== 事件优先级枚举 ====== */
|
||||||
@@ -141,6 +142,7 @@ extern u8 current_hour; // 当前系统时间:小时
|
|||||||
extern u8 current_min; // 当前系统时间:分钟
|
extern u8 current_min; // 当前系统时间:分钟
|
||||||
extern u8 current_sec; // 当前系统时间:秒
|
extern u8 current_sec; // 当前系统时间:秒
|
||||||
extern volatile u8 clock_updated; // 时钟分钟更新标志 (1表示需要刷新待机页时间)
|
extern volatile u8 clock_updated; // 时钟分钟更新标志 (1表示需要刷新待机页时间)
|
||||||
|
extern volatile bit second_tick_flag; // 整秒滴答标志位,每秒置 1,由主循环转换为 KEY_EVENT_SECOND_TICK 事件
|
||||||
|
|
||||||
extern u8 menu_select; // 当前菜单高亮的选中项索引
|
extern u8 menu_select; // 当前菜单高亮的选中项索引
|
||||||
extern u32 captured_addr; // 对码或报警时,当前捕获到的传感器 24 位射频地址
|
extern u32 captured_addr; // 对码或报警时,当前捕获到的传感器 24 位射频地址
|
||||||
@@ -151,7 +153,6 @@ extern Sensor_Slot xdata sensor_list[16];// 传感器数据库数组 (存储在
|
|||||||
|
|
||||||
// 系统滴答与定时计数器 (均为 1ms 中断服务中更新)
|
// 系统滴答与定时计数器 (均为 1ms 中断服务中更新)
|
||||||
extern volatile u16 ms_tick; // 毫秒滴答计数器 (0~999循环)
|
extern volatile u16 ms_tick; // 毫秒滴答计数器 (0~999循环)
|
||||||
extern volatile u16 inactivity_timer; // 用户闲置计时器 (用作无操作自动休眠,单位10ms)
|
|
||||||
extern volatile u32 pair_timeout_ms; // 对码等待搜寻超时毫秒计数器
|
extern volatile u32 pair_timeout_ms; // 对码等待搜寻超时毫秒计数器
|
||||||
extern volatile u16 alarm_timer_ms; // 报警振动与闪烁定时计数器
|
extern volatile u16 alarm_timer_ms; // 报警振动与闪烁定时计数器
|
||||||
extern volatile u16 motor_timer_ms; // 马达单次震动定时计时器
|
extern volatile u16 motor_timer_ms; // 马达单次震动定时计时器
|
||||||
|
|||||||
22
App/event.c
22
App/event.c
@@ -117,12 +117,12 @@ void Event_Dispatcher_Loop(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
inactivity_timer = 0; // 捕获到有效事件,清零休眠计时器,重置闲置超时
|
// 串口打印调试信息 (整秒滴答事件每秒都会触发一次,不打印以免刷屏)
|
||||||
|
if (evt.key_event != KEY_EVENT_SECOND_TICK) {
|
||||||
// 串口打印调试信息
|
XTELL_LOG("[EVENT] key=");
|
||||||
XTELL_LOG("[EVENT] key=");
|
XTELL_LOG_HEX8((u8)evt.key_event);
|
||||||
XTELL_LOG_HEX8((u8)evt.key_event);
|
XTELL_LOG("\r\n");
|
||||||
XTELL_LOG("\r\n");
|
}
|
||||||
|
|
||||||
// SOS 按键紧急处理:若当前前台不为 SOS 应用,接收到 SOS 键动作,立即强行切入到 SOS_APP 并执行求救
|
// SOS 按键紧急处理:若当前前台不为 SOS 应用,接收到 SOS 键动作,立即强行切入到 SOS_APP 并执行求救
|
||||||
if ((evt.key_event == KEY_EVENT_SOS_CLICK || evt.key_event == KEY_EVENT_SOS_LONG) &&
|
if ((evt.key_event == KEY_EVENT_SOS_CLICK || evt.key_event == KEY_EVENT_SOS_LONG) &&
|
||||||
@@ -181,16 +181,6 @@ void Event_KeyScan_Poll(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检测到有任意按键处于下压状态,立即将无操作闲置休眠计时器归零
|
|
||||||
if (raw_up || raw_down || raw_confirm || raw_sos) {
|
|
||||||
inactivity_timer = 0;
|
|
||||||
} else {
|
|
||||||
// 如果在常态下(非休眠、非报警、非紧急求救),累加闲置时间
|
|
||||||
if (current_state != STATE_SLEEP && current_state != STATE_ALARM && current_state != STATE_SOS_EMITTED) {
|
|
||||||
inactivity_timer++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 默认将派发事件重置为空
|
// 默认将派发事件重置为空
|
||||||
evt.key_event = KEY_EVENT_NONE;
|
evt.key_event = KEY_EVENT_NONE;
|
||||||
evt.priority = EVENT_PRIORITY_NORMAL;
|
evt.priority = EVENT_PRIORITY_NORMAL;
|
||||||
|
|||||||
31
App/main.c
31
App/main.c
@@ -49,7 +49,6 @@ Sensor_Slot xdata sensor_list[16];
|
|||||||
|
|
||||||
// 全局滴答与定时中断计数变量,位于 volatile 防止被编译器优化
|
// 全局滴答与定时中断计数变量,位于 volatile 防止被编译器优化
|
||||||
volatile u16 ms_tick = 0; // 定时中断 1ms 基准滴答累加器
|
volatile u16 ms_tick = 0; // 定时中断 1ms 基准滴答累加器
|
||||||
volatile u16 inactivity_timer = 0; // 用户闲置计时器,用于无操作判定(单位: 10ms)
|
|
||||||
volatile u32 pair_timeout_ms = 0; // 传感器配对对码超时毫秒计时器 (上限 30000ms 即 30s)
|
volatile u32 pair_timeout_ms = 0; // 传感器配对对码超时毫秒计时器 (上限 30000ms 即 30s)
|
||||||
volatile u16 alarm_timer_ms = 0; // 入侵报警马达震动时序计数器
|
volatile u16 alarm_timer_ms = 0; // 入侵报警马达震动时序计数器
|
||||||
volatile u16 motor_timer_ms = 0; // 独立马达震动时长计数器
|
volatile u16 motor_timer_ms = 0; // 独立马达震动时长计数器
|
||||||
@@ -120,7 +119,6 @@ void RGB_Diagnostic_Test(void)
|
|||||||
void Debug_ProcessCommand(char cmd)
|
void Debug_ProcessCommand(char cmd)
|
||||||
{
|
{
|
||||||
SystemEvent debug_evt;
|
SystemEvent debug_evt;
|
||||||
inactivity_timer = 0; // 收到指令,立即重置用户的无操作闲置计时器
|
|
||||||
debug_evt.extra_data = 0;
|
debug_evt.extra_data = 0;
|
||||||
debug_evt.extra_size = 0;
|
debug_evt.extra_size = 0;
|
||||||
|
|
||||||
@@ -206,8 +204,11 @@ void Debug_ProcessCommand(char cmd)
|
|||||||
}
|
}
|
||||||
Uart_SendString("[UART] State: DISARMED\r\n");
|
Uart_SendString("[UART] State: DISARMED\r\n");
|
||||||
} else if (cmd == 'z' || cmd == 'Z') {
|
} else if (cmd == 'z' || cmd == 'Z') {
|
||||||
inactivity_timer = 6000; // 模拟闲置 60 秒超时,强制触发主循环深度休眠
|
// 直接强制进入低功耗休眠,测试用 (原来靠伪造全局闲置计时器触发,现改为直接调用)
|
||||||
Uart_SendString("[UART] Force Entering Sleep mode!\r\n");
|
Uart_SendString("[UART] Force Entering Sleep mode!\r\n");
|
||||||
|
current_state = STATE_SLEEP;
|
||||||
|
Enter_Low_Power_Sleep();
|
||||||
|
AppManager_SwitchToForeground(&home_app); // 唤醒后强制重绘时钟画面
|
||||||
} else if (cmd == 'q' || cmd == 'Q') {
|
} else if (cmd == 'q' || cmd == 'Q') {
|
||||||
RGB_Diagnostic_Test(); // 启动 RGB 物理颜色通道排查测试
|
RGB_Diagnostic_Test(); // 启动 RGB 物理颜色通道排查测试
|
||||||
} else if (cmd == 't' || cmd == 'T') {
|
} else if (cmd == 't' || cmd == 'T') {
|
||||||
@@ -316,6 +317,21 @@ void main(void)
|
|||||||
Event_KeyScan_Poll();
|
Event_KeyScan_Poll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 0.5 检查整秒滴答标志 (由 Clock_IncMS 每秒置位一次),转换为事件入队分发;
|
||||||
|
* 各 App 自行决定要不要用它累计自己的闲置时长 (收到任何按键事件就清零),
|
||||||
|
* 不再由主循环维护一个全局的休眠倒计时。 */
|
||||||
|
if (second_tick_flag) {
|
||||||
|
second_tick_flag = 0;
|
||||||
|
{
|
||||||
|
SystemEvent tick_evt;
|
||||||
|
tick_evt.key_event = KEY_EVENT_SECOND_TICK;
|
||||||
|
tick_evt.priority = EVENT_PRIORITY_LOW;
|
||||||
|
tick_evt.extra_data = 0;
|
||||||
|
tick_evt.extra_size = 0;
|
||||||
|
EventQueue_Push(tick_evt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* 1. 串口非阻塞指令捕获 -> 装配为事件方式入队 */
|
/* 1. 串口非阻塞指令捕获 -> 装配为事件方式入队 */
|
||||||
cmd = Uart_RxChar();
|
cmd = Uart_RxChar();
|
||||||
if (cmd != '\0') {
|
if (cmd != '\0') {
|
||||||
@@ -329,15 +345,6 @@ void main(void)
|
|||||||
|
|
||||||
/* 3. 应用调度中心:运行当前处于前台活跃状态的应用(集成了 CPU 运行时间超时挂起保护) */
|
/* 3. 应用调度中心:运行当前处于前台活跃状态的应用(集成了 CPU 运行时间超时挂起保护) */
|
||||||
AppManager_RunActiveApp();
|
AppManager_RunActiveApp();
|
||||||
|
|
||||||
/* 4. 自动休眠判定:常态无操作闲置达到 60 秒 (6000 * 10ms = 60s) 时,切入低功耗停机休眠 */
|
|
||||||
if (inactivity_timer >= 6000) {
|
|
||||||
inactivity_timer = 0;
|
|
||||||
current_state = STATE_SLEEP; // 系统置为休眠状态
|
|
||||||
Enter_Low_Power_Sleep(); // 该函数是阻塞的,MCU 将在此挂起。唤醒后将自动从其后继续执行
|
|
||||||
current_state = STATE_NORMAL; // 唤醒后重新置为正常待机状态
|
|
||||||
AppManager_StartApp(APP_ID_HOME); // 重新开启时钟应用以刷新画面和背光
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -443,9 +443,6 @@ void Wakeup_Restore(void)
|
|||||||
// 6. 延时 200ms 等待液晶稳压板上电稳定后,重新对 LCD 寄存器初始化
|
// 6. 延时 200ms 等待液晶稳压板上电稳定后,重新对 LCD 寄存器初始化
|
||||||
Delay_ms(200);
|
Delay_ms(200);
|
||||||
LCD_Init();
|
LCD_Init();
|
||||||
|
|
||||||
// 7. 充零闲置计时器
|
|
||||||
inactivity_timer = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user