1、修复CBR0寿命与31天记录落盘失败(比较缓冲128→256)
2、APP换灯直接写DP3,DP4本版忽略;上电用restore灌RAM;读/全量打包权威剩余秒数
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
/******************************************************************************
|
||||
* @file app_light_life.c
|
||||
* @brief 灯泡剩余寿命(规格书 13.2 节):实际吸合扣秒 / DP4 复位 /
|
||||
* 到期告警 / DP3 60s 节流上报 / 边沿立刻落盘
|
||||
* @brief 灯泡剩余寿命(规格书 13.2 节):实际吸合扣秒 / APP 写 DP3 /
|
||||
* 到期告警 / 60s 节流上报 / 边沿立刻落盘
|
||||
* @author cyWu <1917507415@qq.com>
|
||||
* @date 2026.09.08
|
||||
* @version V1.0.0
|
||||
* @version V1.0.1
|
||||
*
|
||||
* @note 扣秒与运行记录同口径:只看 app_relay_get_actual()==1(过零后已吸合)。
|
||||
* 上下文分工(避免 ISR 写 VM / 切 BLE):
|
||||
@@ -13,7 +13,7 @@
|
||||
* - loop(500ms 任务):60s 节流同步 gDevData.lighe_remain_time;
|
||||
* 边沿立刻同步 + 推导 gDevData.alarm_code + 立刻落盘。
|
||||
* BOARD_LIGHT_LIFE_ENABLE=0:不扣秒、不置到期告警;DP3 走 VM/默认
|
||||
* 值原样上报(规格书 0.4 条)。
|
||||
* 值原样上报(规格书 13.2 / 第 0 章第 8 条)。
|
||||
******************************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
@@ -54,8 +54,10 @@ static void life_sync_gdata(uint8_t immediate)
|
||||
gDevData.alarm_code = (s_life.remain == 0) ? 1 : 0;
|
||||
|
||||
if (immediate) {
|
||||
app_nvm_save_runrec(); /* 寿命随 runrec item 落盘(规格书 13.2 边沿) */
|
||||
local_irq_disable();
|
||||
s_life.since_save = 0;
|
||||
local_irq_enable();
|
||||
app_nvm_save_runrec(); /* 寿命随 runrec item 落盘(规格书 13.2 边沿) */
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -147,15 +149,19 @@ void app_light_life_loop(void)
|
||||
}
|
||||
|
||||
/* 平时落盘节奏:累计点灯满 600s 写一次(与运行记录同次可接受误差) */
|
||||
local_irq_disable();
|
||||
if (s_life.since_save >= BOARD_RUN_RECORD_SAVE_SEC) {
|
||||
s_life.since_save = 0;
|
||||
local_irq_enable();
|
||||
app_nvm_save_runrec();
|
||||
} else {
|
||||
local_irq_enable();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置剩余寿命(APP 写 DP3 / VM 恢复 / 出厂复位,任务上下文)
|
||||
* @brief 设置剩余寿命(APP 写 DP3 / 出厂复位,任务上下文)
|
||||
* @param remain 剩余寿命秒,0~0xFFFFFFFF 不封顶
|
||||
* @return 无
|
||||
*/
|
||||
@@ -165,6 +171,7 @@ void app_light_life_set_remain(uint32_t remain)
|
||||
local_irq_disable();
|
||||
s_life.remain = remain;
|
||||
s_life.since_sync = 0;
|
||||
s_life.since_save = 0;
|
||||
s_life.ms = 0;
|
||||
local_irq_enable();
|
||||
|
||||
@@ -172,19 +179,39 @@ void app_light_life_set_remain(uint32_t remain)
|
||||
gDevData.lighe_remain_time = remain;
|
||||
gDevData.alarm_code = (remain == 0) ? 1 : 0;
|
||||
app_nvm_save_runrec();
|
||||
s_life.since_save = 0;
|
||||
log_info("life set remain=%lu alarm=%d\n", (unsigned long)remain, gDevData.alarm_code);
|
||||
#else
|
||||
/* 模块关闭:仅按值回填(VM/默认原样上报,不扣秒不置告警,规格书 0.4) */
|
||||
/* 模块关闭:只回填 DP3,不因寿命置告警(规格书 13.2) */
|
||||
gDevData.lighe_remain_time = remain;
|
||||
if (remain == 0) {
|
||||
gDevData.alarm_code = 1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 灯泡复位(DP4 写 1 / 出厂复位):回额定值、告警清 0
|
||||
* @brief 上电从 VM 灌回剩余寿命(只改 RAM,不写 flash)
|
||||
* @param remain VM 中的剩余寿命秒
|
||||
* @return 无
|
||||
*/
|
||||
void app_light_life_restore(uint32_t remain)
|
||||
{
|
||||
#if BOARD_LIGHT_LIFE_ENABLE
|
||||
local_irq_disable();
|
||||
s_life.remain = remain;
|
||||
s_life.since_sync = 0;
|
||||
s_life.since_save = 0;
|
||||
s_life.ms = 0;
|
||||
s_life.need_sync = 0;
|
||||
s_life.need_edge = 0;
|
||||
local_irq_enable();
|
||||
gDevData.lighe_remain_time = remain;
|
||||
gDevData.alarm_code = (remain == 0) ? 1 : 0;
|
||||
log_info("life restore remain=%lu alarm=%d\n", (unsigned long)remain, gDevData.alarm_code);
|
||||
#else
|
||||
gDevData.lighe_remain_time = remain;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 寿命回到额定值(仅出厂复位 DP26 调用;APP 换灯请写 DP3)
|
||||
* @return 无
|
||||
*/
|
||||
void app_light_life_reset(void)
|
||||
|
||||
Reference in New Issue
Block a user