From c8017017835e2265997a137bb44708791be0f085 Mon Sep 17 00:00:00 2001 From: cbb <2625274797@qq.com> Date: Mon, 1 Jun 2026 21:27:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(OTA):=20=E7=A7=BB=E9=99=A4BOM=E6=A0=87?= =?UTF-8?q?=E8=AE=B0=E5=B9=B6=E4=BC=98=E5=8C=96OTA=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除了OTA.cpp文件中的BOM标记,删除了调试打印代码,修复了 缓冲区溢出检查逻辑,并简化了结束确认帧的发送方式。 - 移除文件开头的BOM标记 - 删除DEBUG_PRINT相关的调试输出代码 - 修正缓冲区大小检查条件,使用expected_size替代硬编码值 - 将结束确认改为使用结构化ACK消息发送 --- GD32E50X_BOOT/sys/OTA.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/GD32E50X_BOOT/sys/OTA.cpp b/GD32E50X_BOOT/sys/OTA.cpp index 080ade4..6d4e879 100644 --- a/GD32E50X_BOOT/sys/OTA.cpp +++ b/GD32E50X_BOOT/sys/OTA.cpp @@ -1,4 +1,4 @@ -#include "OTA.h" +#include "OTA.h" #include "Can.h" #include "SpiOta.h" #include "aes128.h" @@ -297,10 +297,6 @@ void OTAHandler::process() { drainFlashBuffer(); if (pending_finish_ack && flash_buf_cnt == 0U) { pending_finish_ack = false; -#if DEBUG_PRINT - printf("[OTA] flash drain done, send FINISH ACK\r\n"); -#endif - send_structured_ack(0xFFFFFFFFU); } if (pending_app_jump) { @@ -625,7 +621,7 @@ void OTAHandler::handleLinkMessage(ota_link_msg_type_t type, u8 *data, u8 len) { return; } else { u32 offset = receive_packet_num * OTA_PACKET_SIZE; - if (offset + OTA_PACKET_SIZE > APP_MAX_SIZE) { + if (offset >= expected_size) { ota_error = OTA_ERROR_INVALID_SIZE; ota_state = OTA_STATE_IDLE; send_error_frame(receive_packet_num, OTA_ERROR_INVALID_SIZE); @@ -652,8 +648,7 @@ void OTAHandler::handleLinkMessage(ota_link_msg_type_t type, u8 *data, u8 len) { if (receive_IFEND == 0xFFFFFFFFU) { ota_state = OTA_STATE_FINISHED; pending_finish_ack = true; - u8 wait_hint[1] = {0x04}; - send_wait_frame(1, wait_hint); + send_structured_ack(0xF0F0F0F0U); return; }