From 32f0edb8755b9880881507768d8a895d548ba735 Mon Sep 17 00:00:00 2001 From: wangfq Date: Thu, 23 Jul 2026 11:47:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(vd960DBN):=20MQTT=20CONNECT=20=E6=94=B9?= =?UTF-8?q?=E5=9B=9E=E4=B8=AD=E6=96=AD=E4=B8=8A=E4=B8=8B=E6=96=87=E5=8F=91?= =?UTF-8?q?=E9=80=81,=20=E6=B6=88=E9=99=A4=20SocketSend=20hard=20fault?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit root cause: WCHNET SocketSend 在中断上下文外调用会 hard fault。 旧代码 mqtt_connect() 在 WCHNET_HandleSockInt CONNECT 中断里直接调; v4 改成了延后到主循环 iot_mqtt_poll() 里发 → hard fault fix: iot_mqtt_handle_sock_int 的 CONNECT 分支直接调用 iot_mqtt_send_connect() (对齐旧代码行为), 不再延后到 poll --- vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c index 6a8b13c..3416c86 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c @@ -792,12 +792,14 @@ static void iot_connect_broker(void) { void iot_mqtt_handle_sock_int(uint8_t socketid, uint8_t intstat) { if (socketid != g_iot_socket) return; - /* CONNECT 成功 — 仅标记状态, WCHNET_HandleSockInt 已设好 RecvBuf 和 KeepLive */ + /* CONNECT 成功 — 在中断上下文直接发 MQTT CONNECT + (对齐旧 mqtt_connect 行为: WCHNET SocketSend 在中断外会 hard fault) */ if (intstat & SINT_STAT_CONNECT) { PRINT("IOT: TCP connected (sock=%d)\n", socketid); g_iot_state = IOT_STATE_TCP_CONNECTED; _iot_recv_len = 0; - // 不在此发送 CONNECT,等下一轮 iot_mqtt_poll 处理 + iot_mqtt_send_connect(); // 在中断上下文发, 不延后到 poll + g_iot_state = IOT_STATE_MQTT_CONNECTING; } /* 收到数据 */