修复IWDG超时未配置与dhara resume回滚:看门狗误复位与复位后写入全部丢失,台架全量自检PASS
This commit is contained in:
@@ -19,11 +19,25 @@
|
||||
*/
|
||||
#define LFTPD_TOTAL_BUDGET_MS 30000U
|
||||
|
||||
/*
|
||||
* 看门狗心跳钩子弱默认实现:空(未接应用层的构建——如模拟器——不喂心跳,
|
||||
* 看门狗为 MCU 构建专属概念)。MCU 构建下 App/util/task_watchdog.c 提供
|
||||
* 同名强符号(路由到 task_wd_beat(TASK_WD_FTP)),链接器取强符号
|
||||
* (与 wd_platform_* 钩子同机制)。
|
||||
*/
|
||||
#if defined(__CC_ARM)
|
||||
__weak
|
||||
#endif
|
||||
void lftpd_task_wd_beat(void)
|
||||
{
|
||||
}
|
||||
|
||||
int lftpd_inet_listen(int port)
|
||||
{
|
||||
int retry;
|
||||
|
||||
for (retry = 0; retry < 5; retry++) {
|
||||
lftpd_task_wd_beat(); /* 看门狗:每轮喂心跳(重试间隔 500ms 在 800ms 容差内) */
|
||||
int s = net_socket(NET_AF_INET, NET_SOCK_STREAM);
|
||||
if (s < 0) {
|
||||
if (retry == 0) DBG_ERROR("create socket");
|
||||
@@ -84,6 +98,7 @@ int lftpd_inet_accept(int socket)
|
||||
DBG_ERROR("network re-init: abort accept, relisten");
|
||||
return -1;
|
||||
}
|
||||
lftpd_task_wd_beat(); /* 看门狗:自旋轮次喂心跳(无限等待,可能长时间无客户端) */
|
||||
vTaskDelay(pdMS_TO_TICKS(100));
|
||||
}
|
||||
}
|
||||
@@ -103,6 +118,7 @@ int lftpd_inet_accept_timeout(int socket, int timeout_ms)
|
||||
DBG_ERROR("data socket closed, accept aborted");
|
||||
return -1;
|
||||
}
|
||||
lftpd_task_wd_beat(); /* 看门狗:每轮喂心跳(数据连接等待最长 5s) */
|
||||
vTaskDelay(pdMS_TO_TICKS(100));
|
||||
elapsed += 100;
|
||||
}
|
||||
@@ -127,6 +143,10 @@ int lftpd_inet_read_line(int socket, char *buffer, size_t buffer_len)
|
||||
if (rem == 0U) {
|
||||
return -1; /* 总预算耗尽(语义同旧 30s 超时) */
|
||||
}
|
||||
lftpd_task_wd_beat(); /* 看门狗:每片前喂心跳(长等待无数据期保持节奏) */
|
||||
if (rem > LFTPD_WAIT_SLICE_MS) {
|
||||
rem = LFTPD_WAIT_SLICE_MS; /* 分片:单次 30s 挂起拆为 ≤200ms 片 */
|
||||
}
|
||||
int read_len = net_recv_to(socket,
|
||||
buffer + total_read_len,
|
||||
(int)(buffer_len - total_read_len - 1),
|
||||
@@ -208,6 +228,10 @@ int lftpd_inet_read(int socket, void *buf, int len)
|
||||
if (rem == 0U) {
|
||||
return -1; /* 总预算耗尽(语义同旧 30s 超时) */
|
||||
}
|
||||
lftpd_task_wd_beat(); /* 看门狗:每片前喂心跳(长等待无数据期保持节奏) */
|
||||
if (rem > LFTPD_WAIT_SLICE_MS) {
|
||||
rem = LFTPD_WAIT_SLICE_MS; /* 分片:单次 30s 挂起拆为 ≤200ms 片 */
|
||||
}
|
||||
int n = net_recv_to(socket, buf, len, rem);
|
||||
if (n >= 0) {
|
||||
return n; /* >0 数据 / 0 EOF */
|
||||
|
||||
Reference in New Issue
Block a user