From 308119a45c7d989f09f042c617cdc2ef506154a7 Mon Sep 17 00:00:00 2001 From: helei Date: Sat, 8 Aug 2026 22:51:10 +0800 Subject: [PATCH] =?UTF-8?q?V1.4=EF=BC=9A=E4=BF=AE=E5=A4=8D=E4=B8=B2?= =?UTF-8?q?=E5=8F=A3RESET/OTA=E5=91=BD=E4=BB=A4=E5=A4=8D=E4=BD=8D=E4=B8=A2?= =?UTF-8?q?=E5=A4=B1=EF=BC=9B=E8=A1=A5=E5=9B=9Eota=5Fsimulate=5Ffail?= =?UTF-8?q?=E5=9B=9E=E9=80=80=E6=B5=8B=E8=AF=95=E5=BC=80=E5=85=B3=EF=BC=88?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=85=B3=EF=BC=89=EF=BC=9BWiFi=20OTA?= =?UTF-8?q?=E4=B8=8E=E5=9B=9E=E9=80=80=E5=AE=9E=E6=B5=8B=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../STM32F103_App1/HardWare/SYSINIT/app_loop.c | 18 ++++++++++++++---- .../HardWare/USER_CMD/user_cmd.c | 4 ++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/V1.4/STM32F103_App1/HardWare/SYSINIT/app_loop.c b/V1.4/STM32F103_App1/HardWare/SYSINIT/app_loop.c index 16bdbde..b27293f 100644 --- a/V1.4/STM32F103_App1/HardWare/SYSINIT/app_loop.c +++ b/V1.4/STM32F103_App1/HardWare/SYSINIT/app_loop.c @@ -57,7 +57,7 @@ void app_init(void) { log_info(""); log_info("* * * * * * * * * * * * * * * * * *"); - log_info("* Version: 1.4.0 (RTOS) *"); + log_info("* Version: 1.4.3 (RTOS) *"); log_info("* * * * * * * By Helei * * * *"); /* EEPROM 中的 MQTT/版本配置 */ @@ -110,6 +110,8 @@ static void app_task(void *arg) /* 主循环状态变量 */ static uint8_t ota_confirmed = 0; + static uint8_t ota_simulate_fail = 0; /* =1测试:模拟 OTA 确认失败(验证回退) */ + static uint8_t ota_fail_logged = 0; static uint32_t ota_confirm_tick = 0; static uint32_t mqtt_ready_tick = 0; static uint8_t mqtt_ready_recorded = 0; @@ -135,9 +137,17 @@ static void app_task(void *arg) /* 首次发布成功后延迟 3s 再 OTA 确认 */ if (!ota_confirmed && g_net_mqtt_ready && g_net_first_publish_ok && (HAL_GetTick() - ota_confirm_tick) > 3000) { - ota_confirmed = 1; - NET_ota_confirm(); - log_info("> OTA confirmed (MQTT ready + first publish ok + 3s delay)"); + if (ota_simulate_fail) { + if (!ota_fail_logged) { + ota_fail_logged = 1; + log_info("> OTA confirm skipped (simulate fail for rollback test)"); + } + /* 不置位 ota_confirmed,让 1 分钟健康超时触发复位 */ + } else { + ota_confirmed = 1; + NET_ota_confirm(); + log_info("> OTA confirmed (MQTT ready + first publish ok + 3s delay)"); + } } /* MQTT 就绪后 1 分钟仍未首次 MPUB,主动复位 */ diff --git a/V1.4/STM32F103_App1/HardWare/USER_CMD/user_cmd.c b/V1.4/STM32F103_App1/HardWare/USER_CMD/user_cmd.c index 58709b2..e2e704f 100644 --- a/V1.4/STM32F103_App1/HardWare/USER_CMD/user_cmd.c +++ b/V1.4/STM32F103_App1/HardWare/USER_CMD/user_cmd.c @@ -57,6 +57,8 @@ void process_usart1_command(void) if (cmd_is(cmd, "RESET")) { log_warn("> USART1 RESET command received, rebooting..."); + HAL_Delay(100); + NVIC_SystemReset(); } else if (cmd_is(cmd, "INFO")) { log_info("> BT INFO: ver=%u, server=%s:%d, client=%s", @@ -86,6 +88,8 @@ void process_usart1_command(void) } else if (cmd_is(cmd, "OTA")) { log_info("> BT OTA: reboot to bootloader for OTA check"); + HAL_Delay(100); + NVIC_SystemReset(); } else if (cmd_is(cmd, "RECOVERY")) { /* WiFi 模块 AT+RESTORE 恢复出厂(忘掉已保存的热点),用于测试 SmartConfig;