1、Optimize the tcp server file reading operation during the OTA process

2、Optimize the ota.c file

3、revert dev_serial.c
This commit is contained in:
wgzAIIT 2023-06-02 19:52:39 +08:00
parent e48bd6fd67
commit 5a1fe0be3b
3 changed files with 42 additions and 7 deletions

View File

@ -154,9 +154,7 @@ static inline int SerialDevIntRead(struct SerialHardwareDevice *serial_dev, stru
CriticalAreaUnLock(lock);
#ifndef TOOL_USING_OTA
MdelayKTask(20);
#endif
*read_data = get_char;
read_data++;

View File

@ -33,13 +33,21 @@
* Private Function Prototypes
****************************************************************************/
static uint32_t calculate_crc32(uint32_t addr, uint32_t len);
static uint16_t calculate_crc16(uint8_t * data, uint32_t len);
static void UpdateNewApplication(void);
static void InitialVersion(void);
static void BackupVersion(void);
static void BootLoaderJumpApp(void);
static status_t UpdateOTAFlag(ota_info_t *ptr);
static void app_ota_by_iap(void);
static void Update(void);
#ifdef CONNECTION_ADAPTER_4G
static void get_start_signal(struct Adapter* adapter);
static int ota_data_recv(struct Adapter* adapter);
static void app_ota_by_4g(void);
#endif
/****************************************************************************
* Private Data
****************************************************************************/
@ -60,6 +68,7 @@ static const mcuboot_t mcuboot =
mcuboot_delay
};
static const uint32_t crc32tab[] = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
@ -142,6 +151,7 @@ static uint16_t calculate_crc16(uint8_t * data, uint32_t len)
return reg_crc;
}
/*******************************************************************************
* : UpdateNewApplication
* : bootloader里进行调用,Flash中Flag分区中的信息决定是否进行版本更新
@ -255,6 +265,7 @@ static void InitialVersion(void)
}
}
/*******************************************************************************
* : BackupVersion
* : 退,APP存在bug导致无法跳转需调用此函数进行版本回退
@ -396,13 +407,14 @@ void app_clear_jumpflag(void)
mcuboot.flash_deinit();
}
/*******************************************************************************
* : Update
* :
* :
* :
*******************************************************************************/
void Update(void)
static void Update(void)
{
ota_info_t ota_info;
mcuboot.flash_init();
@ -420,6 +432,7 @@ void Update(void)
mcuboot.flash_deinit();
}
/*******************************************************************************
* : ota_entry
* : bootloader的入口函数
@ -667,7 +680,7 @@ try_again:
* : adapter:Adapter指针,4G设备
* : 0:,-1:
*******************************************************************************/
void app_ota_by_4g(void)
static void app_ota_by_4g(void)
{
struct ota_data recv_msg;
char reply[16] = {0};

View File

@ -254,6 +254,7 @@ int ota_file_send(int fd)
if(NULL == file_fd)
{
printf("open file failed.\n");
fclose(file_fd);
return -1;
}
fseek(file_fd, 0, SEEK_SET);
@ -266,7 +267,7 @@ int ota_file_send(int fd)
data.header.frame_flag = 0x5A5A;
length = fread(data.frame.frame_data, 1, LENGTH, file_fd);
if(length > 0)
if(length == LENGTH)
{
printf("read %d bytes\n",length);
data.frame.frame_id = frame_cnt;
@ -274,6 +275,29 @@ int ota_file_send(int fd)
data.frame.crc = calculate_crc16(data.frame.frame_data, length);
file_length += length;
}
else if(length > 0 && length < LENGTH)
{
if(ferror(file_fd))
{
printf("read %s file error!\n", basename(BIN_PATH));
ret = -1;
break;
}
else
{
printf("read %d bytes\n",length);
data.frame.frame_id = frame_cnt;
data.frame.frame_len = length;
data.frame.crc = calculate_crc16(data.frame.frame_data, length);
file_length += length;
}
}
//fread返回值为0,此时是个空包,不需要再发送了否则是冗余数据
else
{
printf("read %s file done!\n", basename(BIN_PATH));
break;
}
send_again:
printf("send frame[%d] to client %d.\n", frame_cnt, fd);
@ -303,7 +327,7 @@ recv_again:
else if(0 == strncmp(buf, "ok", length))
{
printf("receive buf[%s] length %d from client %d.\n", buf, length, fd);
try_times = 10;
try_times = 5;
printf("send to client %d frame[%d] data send done.\n",fd, frame_cnt);
frame_cnt++;
continue;
@ -319,7 +343,7 @@ recv_again:
}
else
{
printf("send to client %d frame[%d] 10 times failed.\n",fd, frame_cnt);
printf("send to client %d frame[%d] 5 times failed.\n",fd, frame_cnt);
ret = -1;
break;
}