fix(vd960DBN): MQTT CONNECT 改回中断上下文发送, 消除 SocketSend hard fault

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
This commit is contained in:
wangfq
2026-07-23 11:47:27 +08:00
parent 9521a5e667
commit 32f0edb875
@@ -792,12 +792,14 @@ static void iot_connect_broker(void) {
void iot_mqtt_handle_sock_int(uint8_t socketid, uint8_t intstat) { void iot_mqtt_handle_sock_int(uint8_t socketid, uint8_t intstat) {
if (socketid != g_iot_socket) return; 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) { if (intstat & SINT_STAT_CONNECT) {
PRINT("IOT: TCP connected (sock=%d)\n", socketid); PRINT("IOT: TCP connected (sock=%d)\n", socketid);
g_iot_state = IOT_STATE_TCP_CONNECTED; g_iot_state = IOT_STATE_TCP_CONNECTED;
_iot_recv_len = 0; _iot_recv_len = 0;
// 不在此发送 CONNECT,等下一轮 iot_mqtt_poll 处理 iot_mqtt_send_connect(); // 在中断上下文发, 不延后到 poll
g_iot_state = IOT_STATE_MQTT_CONNECTING;
} }
/* 收到数据 */ /* 收到数据 */