From 1d252888d0d3f10155742f940c5d73391d13a842 Mon Sep 17 00:00:00 2001 From: YuanHongbin <975559679@qq.com> Date: Fri, 21 Aug 2026 15:56:09 +0800 Subject: [PATCH] =?UTF-8?q?revert(eth):=20=E5=9B=9E=E9=80=80SendNoDataCnt?= =?UTF-8?q?=E6=97=A0=E5=BA=94=E7=AD=94=E5=85=9C=E5=BA=95=E5=A4=8D=E4=BD=8D?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ETH为裸ASCII透传, 普通数据上传服务器不回复0x7A帧, SendNoDataCnt只增不清, 连续上传11次误触发ETH_RESET硬件复位, 导致TCP连接被重置, 服务器误判网关掉线。 回退上一版新增的SendNoDataCnt全部代码: - 移除ETH_SEND_NO_DATA_MAX宏和SendNoDataCnt字段 - 移除SEND_DATA中的计数+复位判断 - 移除ETH_RESET/ETH_OFF/接收线程中的清零 保留物理断线清除MuchRegFlag的两处正确修改 --- Project/GateWay/source/User/Inc/EthTask.h | 2 -- Project/GateWay/source/User/Src/EthTask.c | 13 ------------- 2 files changed, 15 deletions(-) diff --git a/Project/GateWay/source/User/Inc/EthTask.h b/Project/GateWay/source/User/Inc/EthTask.h index 7ffbddc..45c9c81 100644 --- a/Project/GateWay/source/User/Inc/EthTask.h +++ b/Project/GateWay/source/User/Inc/EthTask.h @@ -10,7 +10,6 @@ #define ETH_RECV_TIMEOUT_MAX (10 * 1000) #define ETH_SEND_RETRY_MAX 3 #define ETH_FIRST_REG_DELAY (1 * 1000) -#define ETH_SEND_NO_DATA_MAX 10 typedef enum { ETH_IDEL, @@ -29,7 +28,6 @@ typedef struct { uint32_t LinkWaitCnt; uint32_t RecvTimeoutCnt; uint8_t SendRetryCnt; - uint8_t SendNoDataCnt; bool FirstRegFlag; GateWayPara GateWay; diff --git a/Project/GateWay/source/User/Src/EthTask.c b/Project/GateWay/source/User/Src/EthTask.c index 0aa8249..d580b7f 100644 --- a/Project/GateWay/source/User/Src/EthTask.c +++ b/Project/GateWay/source/User/Src/EthTask.c @@ -93,7 +93,6 @@ void EthLoopHandler(void) case ETH_RESET: ETH_DBG_LOG("ETH Reset!\r\n"); - Eth.SendNoDataCnt = 0; ETH_RESET_CLR(); rt_thread_delay(10); ETH_RESET_SET(); @@ -176,16 +175,6 @@ void EthLoopHandler(void) break; case ETH_SEND_DATA: - if(Eth.GateWay->ConfigPara.Much == CH_ETH) { - Eth.SendNoDataCnt++; - if(Eth.SendNoDataCnt > ETH_SEND_NO_DATA_MAX) { - ETH_DBG_LOG("ETH has no receive data for a long time, Reset!\r\n"); - Eth.SendNoDataCnt = 0; - Eth.GateWay->MuchRegFlag = false; - Eth.Status = ETH_RESET; - break; - } - } HexToAscii(Eth.TxBuff, CommUnitSendASCII, Eth.TxLen); EthRevTimeOutCnt = 0; EthUartSend((uint8_t *)CommUnitSendASCII, Eth.TxLen * 2); @@ -239,7 +228,6 @@ void EthLoopHandler(void) case ETH_OFF: ETH_DBG_LOG("ETH Power Off!\r\n"); - Eth.SendNoDataCnt = 0; Eth.Status = ETH_IDEL; Eth.ResetDelayCnt = ETH_RESET_DELAY_TIME_MAX; break; @@ -299,7 +287,6 @@ static void EthRev_Thread_Entry(void *parameter) memset(HexData, 0x00, EthRxLen / 2); uint8_t ret = AsciiToHex(RxBuffTemp, HexData, EthRxLen); if(ret > 0 && HexData[0] == 0x7A) { - Eth.SendNoDataCnt = 0; if(GateWay->ConfigPara.Much == CH_ETH) GateWay->MuchRevCallBack(GateWay, HexData, ret); else