From df79cf2be30c143ab0d77eaf5dd50bc68d84c40d Mon Sep 17 00:00:00 2001 From: Wanderingss <1624155937@qq.com> Date: Fri, 25 Sep 2026 05:55:03 +0800 Subject: [PATCH] =?UTF-8?q?net=5Fprocess=5Fmessages=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=A0=87=E5=87=86=E5=AD=97=E6=AE=B5=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F(=E5=8A=9F=E8=83=BD/=E8=BF=94=E5=9B=9E=E5=80=BC/?= =?UTF-8?q?=E9=99=90=E5=AE=9A/=E8=AF=B4=E6=98=8E)=EF=BC=8C=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E4=B8=8D=E5=8F=98=EF=BC=8C=E4=BA=8C=E8=BF=9B=E5=88=B6?= =?UTF-8?q?=E9=9B=B6=E5=B7=AE=E5=BC=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Drivers/BSP/NET/net_socket.c | 38 ++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/Drivers/BSP/NET/net_socket.c b/Drivers/BSP/NET/net_socket.c index f6a82f9c..3ceced37 100644 --- a/Drivers/BSP/NET/net_socket.c +++ b/Drivers/BSP/NET/net_socket.c @@ -497,25 +497,29 @@ static void net_reconcile_tick(void) { /* * 函数功能:netTask 主循环核心 —— 自愈 tick 宿主 + 消息队列分派器。每轮 - * 先跑三个非阻塞自愈 tick(D10 重监听 / L3 挂起 recv / Trap 22 - * 状态对账),再非阻塞排空队列按 msg.type 分派到 _locked 实现。 + * 先跑三个非阻塞自愈 tick(D10 重监听 / L3 挂起 recv / + * Trap 22 状态对账),再非阻塞排空队列按 msg.type 分派到 _locked 实现。 + * 返回值:无(void);消息结果经 xTaskNotify 通知值回传(成功=字节数/描述符, + * 失败=具体错误码),调用方 net_wait_result 拾取,对外统一 -1。 * 限定条件:必须在 netTask 上下文中调用(独占 CH395F 与 s_net_socks 访问权); * 由 net_task.c 在 net_stack_bring_up 之后每次 1ms 循环调用。 - * 返回值 :void;结果经 xTaskNotify 通知值回传(成功=字节数/描述符, - * 失败=具体错误码);调用方 net_wait_result 拾取,对外统一 -1。 - * 函数说明: - * ① 三个自愈 tick 均非阻塞(绝不 osDelay 忙等,netTask 永不冻结): - * - net_relisten_retry_tick(D10):断连后按 30ms(NET_RELISTEN_RETRY_MS) - * 节拍重试 open+listen,2s(NET_RELISTEN_DEADLINE_MS)总时限到期放弃留痕; - * 本 fd 有在途挂起 recv 时跳过(L3 保险)。 - * - net_pending_tick(L3):按节拍了结挂起 recv(①数据 ②到点 ③断连); - * 到点后 1s(NET_PENDING_WATCHDOG_MS)未了结 → 强制了结 + DBG_ERROR 留痕。 - * - net_reconcile_tick(Trap 22):每 200ms(NET_RECONCILE_PERIOD_MS)对账, - * 连续 2 次失配去抖 + 1s 冷却,三类失同步自愈。 - * ② net_msg_t 按值入队,netTask 侧副本调用方不可见 → 结果只能搭 - * 任务通知值回传;32 位整体即结果,不做位域压缩。 - * ③ RECV 特例:无数据+阻塞 → 登记 pending 哨兵 NET_PENDING_REGISTERED - * (0x70000000),do_notify=0,回执推迟到 net_pending_tick 完成时。 + * 函数说明:1. 三个自愈 tick 均非阻塞(绝不 osDelay 忙等,netTask 永不冻结), + * 先于消息分派执行: + * - net_relisten_retry_tick(D10):断连后按 30ms + * (NET_RELISTEN_RETRY_MS)节拍重试 open+listen,2s + * (NET_RELISTEN_DEADLINE_MS)总时限到期放弃留痕;本 fd + * 有在途挂起 recv 时跳过(L3 保险); + * - net_pending_tick(L3):按节拍了结挂起 recv(数据/到点/ + * 断连);到点后 1s(NET_PENDING_WATCHDOG_MS)未了结 → + * 强制了结 + DBG_ERROR 留痕; + * - net_reconcile_tick(Trap 22):每 200ms + * (NET_RECONCILE_PERIOD_MS)对账,连续 2 次失配去抖 + + * 1s 冷却,三类失同步自愈。 + * 2. net_msg_t 按值入队,netTask 侧副本调用方不可见 → 结果只能搭 + * 任务通知值回传;32 位整体即结果,不做位域压缩。 + * 3. RECV 特例:无数据+阻塞 → 登记 pending 哨兵 + * NET_PENDING_REGISTERED(0x70000000),do_notify=0,回执 + * 推迟到 net_pending_tick 完成时。 */ void net_process_messages(void) { net_msg_t msg;