精简 usr_app 架构:去掉关机/休眠死代码,按键复用 key.c 状态机,ISR 重活统一延后到任务上下文
Type-C 长供电、上电即工作、无软关机,删除 app_boot/app_power 及 DP0 开关相关逻辑, 去掉空占位 app_fan_run 和无效的 usr_timer_pick_mode/rearm(数码管 4ms 扫描已 priority=1, 系统本来就不会进低功耗)。按键 5s 配对 / 12s OTA 改走 key.c 长按分级,去掉自计时与 1~5s 死区。 新增 app_defer,NVM/配对/OTA 只在 ISR 置位、在 500ms 任务上下文落地,避免再在 usr_timer 里写 flash。 规格书与注释同步精简。
This commit is contained in:
+12
-15
@@ -2,11 +2,8 @@
|
||||
* @file app_nvm.c
|
||||
* @brief CBR3 VM 持久化实现(P1):mode/fan_gear/条件/定时/使能
|
||||
* @author cyWu <1917507415@qq.com>
|
||||
* @date 2026.08.29
|
||||
* @version V1.1.0
|
||||
* @history
|
||||
* - V1.0.0, 2026.08.29, cyWu, 首次发布(P0 stub)
|
||||
* - V1.1.0, 2026.08.31, cyWu, P1 实现:3 个 VM item + 防抖 + 立即写
|
||||
* @date 2026.08.31
|
||||
* @version V1.1.0,实现:3 个 VM item + 防抖 + 立即写
|
||||
*
|
||||
* @note VM item 分配在 syscfg 用户自定义区 [1~49](syscfg_id.h 已占用
|
||||
* CFG_USER_PAIR_INFO=2 / CFG_USER_TIM_FLAG=3 / VM_ALARM*=4~24 /
|
||||
@@ -19,7 +16,7 @@
|
||||
* 减少 flash 磨损;首次上电(magic 不符)保持 gDevData 全 0 默认。
|
||||
*
|
||||
* 写入时机(规格书第 13 章):APP 改配置后(mark_dirty)、档位/模式
|
||||
* 稳定变化(500ms 防抖)、软关机前(save 立即写)。
|
||||
* 稳定变化(500ms 防抖)。
|
||||
*
|
||||
* ⚠⚠ 上下文硬约束(2026-08-31 复位事故定论,勿再踩):
|
||||
* usr_timer_add() 是**异步接口**,回调在**硬件定时器中断上下文**执行
|
||||
@@ -29,14 +26,14 @@
|
||||
* 绝对不能调 syscfg_write**(VM 擦写 flash 栈用量大且中断里做
|
||||
* flash 操作 → 栈溢出软复位;实测 APP 下发数据后 500ms 必崩)。
|
||||
* - 真正写入由 app_nvm_flush() 在 usr_timer_loop()(BLE 线程、
|
||||
* 任务上下文、栈充足)执行;usr_poweroff_request_hook 里的
|
||||
* app_nvm_save() 也必须保证在任务上下文被调用(见 app_function_loop)。
|
||||
* 任务上下文、栈充足)执行。
|
||||
* 另:nvm_write_item 的比较缓冲改 static,再省 128B 栈。
|
||||
******************************************************************************/
|
||||
|
||||
#include "app_nvm.h"
|
||||
#include "app_mode.h"
|
||||
#include "app_fan.h"
|
||||
#include "app_defer.h"
|
||||
#include "jb_product.h"
|
||||
#include "board_pin.h"
|
||||
#include "system/includes.h"
|
||||
@@ -81,8 +78,9 @@ typedef struct {
|
||||
|
||||
#if BOARD_NVM_ENABLE
|
||||
static uint8_t s_dirty; /**< 1=防抖计时中 */
|
||||
static uint8_t s_need_save; /**< 1=防抖已满,待任务上下文落盘 */
|
||||
static uint16_t s_deb_ms; /**< 防抖计时 */
|
||||
/* 防抖已满时用 app_defer_request(APP_DEFER_NVM_SAVE) 打标志,真正落盘
|
||||
* 由 app_nvm_flush() 在任务上下文里 app_defer_take() 消费,见文件头说明 */
|
||||
|
||||
/* 上次已同步到 VM 的状态快照:变化检测基准(覆盖按键/APP/模式引擎所有入口) */
|
||||
static uint8_t s_last_gear;
|
||||
@@ -222,7 +220,7 @@ void app_nvm_init(void)
|
||||
}
|
||||
s_dirty = 0;
|
||||
s_deb_ms = 0;
|
||||
s_need_save = 0;
|
||||
app_defer_cancel(APP_DEFER_NVM_SAVE);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -254,7 +252,7 @@ void app_nvm_save(void)
|
||||
nvm_write_time();
|
||||
s_dirty = 0;
|
||||
s_deb_ms = 0;
|
||||
s_need_save = 0;
|
||||
app_defer_cancel(APP_DEFER_NVM_SAVE);
|
||||
nvm_sync_snapshot();
|
||||
#endif
|
||||
}
|
||||
@@ -358,7 +356,7 @@ void app_nvm_tick(uint16_t dt)
|
||||
if (s_deb_ms >= CBR3_VM_DEBOUNCE_MS) {
|
||||
s_deb_ms = 0;
|
||||
s_dirty = 0;
|
||||
s_need_save = 1; /* 只置标志:等任务上下文 app_nvm_flush 真正落盘 */
|
||||
app_defer_request(APP_DEFER_NVM_SAVE); /* 只置标志:真正落盘在 app_nvm_flush */
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -374,10 +372,9 @@ void app_nvm_flush(void)
|
||||
#if !BOARD_NVM_ENABLE
|
||||
return;
|
||||
#else
|
||||
if (!s_need_save) {
|
||||
if (!app_defer_take(APP_DEFER_NVM_SAVE)) {
|
||||
return;
|
||||
}
|
||||
s_need_save = 0;
|
||||
app_nvm_save();
|
||||
#endif
|
||||
}
|
||||
@@ -417,7 +414,7 @@ void app_nvm_reset(void)
|
||||
syscfg_write(CFG_USER_CBR3_TIME, &tf, sizeof(tf));
|
||||
s_dirty = 0;
|
||||
s_deb_ms = 0;
|
||||
s_need_save = 0;
|
||||
app_defer_cancel(APP_DEFER_NVM_SAVE);
|
||||
log_info("nvm factory reset, business vm cleared (pairing kept)\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user