From 4392784368875d9687dd471122d214bc7a2ef099 Mon Sep 17 00:00:00 2001 From: jhchun Date: Thu, 3 Sep 2026 09:22:17 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B0=B0=ED=84=B0=EB=A6=AC=20=EC=A0=80?= =?UTF-8?q?=EC=A0=84=EC=95=95/=EA=B3=A0=EC=98=A8=20=EB=B3=B4=ED=98=B8=20?= =?UTF-8?q?=ED=8C=90=EC=A0=95=20=EC=8B=9C=20=EC=9C=A0=ED=9A=A8=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EA=B0=92=EC=9D=80=20=EB=B3=B4?= =?UTF-8?q?=ED=98=B8=20=ED=8C=90=EC=A0=95=EC=97=90=EC=84=9C=20=EC=A0=9C?= =?UTF-8?q?=EC=99=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 측정 실패 시 실패값을 실제 센서값처럼 취급하지 않고, 보호 카운터 증가 X reset X --- src/drivers/battery/battery_adc.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/drivers/battery/battery_adc.c b/src/drivers/battery/battery_adc.c index 4feaee2..7896cbf 100644 --- a/src/drivers/battery/battery_adc.c +++ b/src/drivers/battery/battery_adc.c @@ -253,21 +253,34 @@ void battery_protection_set_alignment_mode(bool enabled) */ void battery_protection_record_continuous(int batt_mv, int16_t temp_cdeg) { + bool batt_valid = (batt_mv >= 0) && (batt_mv != 0xFFFF); + bool temp_valid = (temp_cdeg != INT16_MIN) && ((uint16_t)temp_cdeg != 0xFFFF); + // 정렬모드 중에는 continuous 보호 판정 제외 if (alignment_mode_active) { return; } + if (!batt_valid && !temp_valid) + { + return; + } + // 15초 후 일반 60초 주기 모니터 재개 continuous_monitor_active_until_ms = k_uptime_get() + CONTINUOUS_MONITOR_ACTIVE_MS; - // periodic 모니터 카운트 초기화 - periodic_low_battery_cnt = 0; - periodic_high_temperature_cnt = 0; + if (batt_valid) + { + periodic_low_battery_cnt = 0; + record_battery_value(batt_mv, &continuous_low_battery_cnt, BATTERY_CONTINUOUS_MONITOR_LIMIT_COUNT, "continuous"); + } - record_battery_value(batt_mv, &continuous_low_battery_cnt, BATTERY_CONTINUOUS_MONITOR_LIMIT_COUNT, "continuous"); - record_temperature_value(temp_cdeg, &continuous_high_temperature_cnt, BATTERY_CONTINUOUS_MONITOR_LIMIT_COUNT, "continuous"); + if (temp_valid) + { + periodic_high_temperature_cnt = 0; + record_temperature_value(temp_cdeg, &continuous_high_temperature_cnt, BATTERY_CONTINUOUS_MONITOR_LIMIT_COUNT, "continuous"); + } } /* k_work 핸들러: 스레드 컨텍스트에서 ADC 읽기 (adc_read는 블로킹이라 ISR 불가) */