1、修复CBR0寿命与31天记录落盘失败(比较缓冲128→256)

2、APP换灯直接写DP3,DP4本版忽略;上电用restore灌RAM;读/全量打包权威剩余秒数
This commit is contained in:
2026-09-08 12:29:02 +08:00
parent 974c0f57cb
commit e65b2b22b6
11 changed files with 121 additions and 86 deletions
+19 -12
View File
@@ -1,17 +1,16 @@
/******************************************************************************
* @file app_light_life.h
* @brief 灯泡剩余寿命(规格书 13.2 节,DP2/DP3/DP4/DP25
* @brief 灯泡剩余寿命(规格书 13.2 节,DP2/DP3/DP25DP4 本版不用
* @author cyWu <1917507415@qq.com>
* @date 2026.09.08
* @version V1.0.0
* @version V1.0.1
*
* @note 额定工时 2592000s(30 天),按继电器**实际吸合**每秒扣 1;
* 扣到 0 停住不回绕,置 alarm_code=1(灯泡到期告警,粘住)但**不互锁**,
* 灯仍可手动/定时/联动再开(第 12 章仲裁不参与)。
* DP3 上报节流:平时满 60s 才同步一次 gDevData(协议层 2s 防抖后
* 自然最多 60s 一包);到期 / DP4 / APP 写 DP3 / 出厂复位走边沿
* **立刻**同步 + 落盘(任务上下文,禁止 ISR 写 VM)。
* 剩余寿命持久化随运行记录 item(与 runrec 同写节奏 600s,边沿立刻)。
* APP 换灯:直接写 DP3(通常写 2592000),不走 DP4。
* DP3 上报节流:平时满 60s 才同步一次 gDevData;到期 / APP 写 DP3 /
* 出厂复位走边沿立刻同步 + 落盘(任务上下文,禁止 ISR 写 VM)。
******************************************************************************/
#ifndef __APP_LIGHT_LIFE_H__
@@ -21,7 +20,7 @@
/**
* @brief 初始化剩余寿命:RAM 复位为额定值,告警按值推导
* @note 之后 app_nvm_load 若 VM 有效会调 app_light_life_set_remain 覆盖
* @note 之后 app_nvm_load 若 VM 有效会调 app_light_life_restore 覆盖
* @return 无
*/
void app_light_life_init(void);
@@ -41,17 +40,25 @@ void app_light_life_tick(uint16_t dt);
void app_light_life_loop(void);
/**
* @brief 设置剩余寿命(APP 写 DP3 / VM 恢复 / 出厂复位共用,任务上下文)
* @brief 设置剩余寿命(APP 写 DP3 / 出厂复位,任务上下文)
* @param remain 剩余寿命秒,范围 0~0xFFFFFFFF 不封顶
* @note 立刻生效:同步 gDevData + 推导 alarm_code + 立刻落盘 + 变化上报由
* 协议层差分自动发出(2s 防抖后);remain>0 清到期告警,=0 置告警
* @note 立刻生效:同步 gDevData + 推导 alarm_code + 立刻落盘
* remain>0 清到期告警,=0 置告警。上电灌 VM 请用 restore。
* APP 换灯:写 DP3=2592000,不要写 DP4。
* @return 无
*/
void app_light_life_set_remain(uint32_t remain);
/**
* @brief 灯泡复位(DP4 写 1):剩余寿命回到额定值、告警清 0
* @note WO 不上报;由 jb_product DP4 调用;边沿立刻落盘
* @brief 上电从 VM 恢复剩余寿命(只改 RAM,不写 flash)
* @param remain VM 中的剩余寿命秒
* @return 无
*/
void app_light_life_restore(uint32_t remain);
/**
* @brief 寿命回到额定值(仅出厂复位内部调用)
* @note APP 换灯请写 DP3,本函数不接 DP4
* @return 无
*/
void app_light_life_reset(void);