精简 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:
@@ -0,0 +1,59 @@
|
||||
/******************************************************************************
|
||||
* @file app_defer.h
|
||||
* @brief ISR→任务上下文的延后执行标志位(统一收口 2026-08-31 复位事故教训)
|
||||
* @author cyWu <1917507415@qq.com>
|
||||
* @date 2026.08.31
|
||||
* @version V1.0.0,首次发布
|
||||
*
|
||||
* @note ⚠ 硬约束:flash 擦写(syscfg_write)、BLE 广播切换、关机收口等"重活"
|
||||
* 禁止在 usr_timer_add 的中断上下文回调(本产品 20ms usr_timer_tick /
|
||||
* 按键长按回调)里直接执行,只能在 usr_timer_loop(BLE 线程,任务
|
||||
* 上下文,栈充足)里执行。之前每个模块各自发明一个 pending 标志
|
||||
* (off_pending/pair_pending/ota_pending/nvm 的 s_need_save),
|
||||
* 容易被后来的功能遗漏这条红线——本模块把"打标志"这一步收成统一
|
||||
* 接口:ISR 只准调 app_defer_request(),真正执行永远在
|
||||
* app_function_loop() 里用 app_defer_take() 消费。
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __APP_DEFER_H__
|
||||
#define __APP_DEFER_H__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/** 延后动作位,新增一种"需要写flash/切广播/关机"的动作就加一项 */
|
||||
typedef enum {
|
||||
APP_DEFER_NVM_SAVE = 0, /**< VM 防抖到点,需要落盘 */
|
||||
APP_DEFER_PAIR, /**< 长按 5s 松手,需要清绑定进配对 */
|
||||
APP_DEFER_OTA, /**< 长按 12s 到点,需要进 OTA */
|
||||
APP_DEFER_MAX
|
||||
} AppDeferBit_t;
|
||||
|
||||
/**
|
||||
* @brief 中断上下文调用:只置位,不做任何实际动作
|
||||
* @param bit 要延后的动作
|
||||
* @return 无
|
||||
*/
|
||||
void app_defer_request(AppDeferBit_t bit);
|
||||
|
||||
/**
|
||||
* @brief 任务上下文调用:查询并清除标志(取出即消费,最多处理一次)
|
||||
* @param bit 要消费的动作
|
||||
* @return 1=之前挂起过(现在可以执行真正动作),0=没挂起
|
||||
*/
|
||||
uint8_t app_defer_take(AppDeferBit_t bit);
|
||||
|
||||
/**
|
||||
* @brief 任务上下文调用:只查询是否挂起,不清除(多个动作互斥判断用)
|
||||
* @param bit 要查询的动作
|
||||
* @return 1=挂起中,0=未挂起
|
||||
*/
|
||||
uint8_t app_defer_is_pending(AppDeferBit_t bit);
|
||||
|
||||
/**
|
||||
* @brief 任务上下文调用:撤销挂起(如 OTA 触发时要撤销配对)
|
||||
* @param bit 要撤销的动作
|
||||
* @return 无
|
||||
*/
|
||||
void app_defer_cancel(AppDeferBit_t bit);
|
||||
|
||||
#endif /* __APP_DEFER_H__ */
|
||||
Reference in New Issue
Block a user