From d11e9edf36e2dfe65904f57600fcb37abdbe0c7e Mon Sep 17 00:00:00 2001 From: hehaoyang <1109196436@qq.com> Date: Fri, 5 Jan 2024 17:04:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=8A=9F=E8=83=BD=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GD32F103C8T6/App/User/Peripheral/Api/api.c | 27 ++++++++++++++-------- GD32F103C8T6/App/User/Peripheral/Api/api.h | 2 +- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/GD32F103C8T6/App/User/Peripheral/Api/api.c b/GD32F103C8T6/App/User/Peripheral/Api/api.c index 97b1954..0a0632e 100644 --- a/GD32F103C8T6/App/User/Peripheral/Api/api.c +++ b/GD32F103C8T6/App/User/Peripheral/Api/api.c @@ -23,6 +23,7 @@ static uint16_t upgrade_write_index = 0; /* 升级包数据接收长度 */ static uint8_t upgrade_rx_buffer[1024] = {0}; +static void api_write_upgrade_buffer(void); static void api_notify_upgrade(uint8_t *buffer, uint16_t length); static void api_notify_get_fhss_channel(void); static void api_package(uint8_t type, uint8_t command, uint8_t *data, uint8_t length); @@ -199,6 +200,16 @@ void api_upload_data_forwarding(uint8_t type, uint8_t value) __weak void api_notify_data_forwarding(uint8_t type, uint8_t value) { } +static void api_write_upgrade_buffer(void) +{ + /* 写入升级包数据 */ + fmc_write_bytes(FMC_ADDRESS_UPGRADE_BUFFER + upgrade_write_index * FMC_PAGE_SIZE, upgrade_rx_buffer, upgrade_rx_index / 4 + (upgrade_rx_index % 4 ? 1 : 0)); + + upgrade_write_index++; + upgrade_rx_length += upgrade_rx_index; + upgrade_rx_index = 0; +} + /** * @brief 升级 */ @@ -226,23 +237,21 @@ static void api_notify_upgrade(uint8_t *buffer, uint16_t length) upgrade_pack_index = 0; } - for (uint16_t i = 0; i < pack_length; i++) - upgrade_rx_buffer[upgrade_rx_index++] = buffer[i + 9]; - if (index == upgrade_pack_index + 1) { /* 更改ARM接收到的升级包序号 */ upgrade_pack_index = index; - if (upgrade_rx_index >= 1024 || upgrade_pack_index == upgrade_pack_count) + for (uint16_t i = 0; i < pack_length; i++) { - /* 写入升级包数据 */ - fmc_write_bytes(FMC_ADDRESS_UPGRADE_BUFFER + upgrade_write_index * FMC_PAGE_SIZE, upgrade_rx_buffer, upgrade_rx_index / 4 + (upgrade_rx_index % 4 ? 1 : 0)); + upgrade_rx_buffer[upgrade_rx_index++] = buffer[i + 9]; - upgrade_write_index++; - upgrade_rx_length += upgrade_rx_index; - upgrade_rx_index = 0; + if (upgrade_rx_index >= 1024) + api_write_upgrade_buffer(); } + + if (upgrade_pack_index == upgrade_pack_count) + api_write_upgrade_buffer(); /* 通知上位机当前升级包成功接收 */ api_response_success(API_COMMAND_UPGRADE); diff --git a/GD32F103C8T6/App/User/Peripheral/Api/api.h b/GD32F103C8T6/App/User/Peripheral/Api/api.h index 81e08d6..e550350 100644 --- a/GD32F103C8T6/App/User/Peripheral/Api/api.h +++ b/GD32F103C8T6/App/User/Peripheral/Api/api.h @@ -22,7 +22,7 @@ #define API_FRAME_RESPONSE (0x01) /* 响应帧 */ #define API_FRAME_NOTIFICATION (0x02) /* 通知帧 */ -#define SOFTWARE_VERSION ("V1.27") +#define SOFTWARE_VERSION ("V1.28") #define HARDWARE_VERSION ("V1.01") extern uint8_t api_upgrade_mode;