You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FreeRTOS WiFi断网事件未调用vApplicationIPNetworkEventHook的解决咨询

Amazon FreeRTOS WiFi断连事件上报及重连实现方案

1 实现WiFi状态变更回调注册逻辑

首先在iot_wifi.c文件头部定义静态全局变量存储注册的回调函数:

static IotNetworkStateChangeEventCallback_t xNetworkStateCallback = NULL;

修改你提到的WIFI_RegisterNetworkStateChangeEventCallback函数:

WIFIReturnCode_t WIFI_RegisterNetworkStateChangeEventCallback( IotNetworkStateChangeEventCallback_t xCallback  )
{
    if(xCallback == NULL)
    {
        return eWiFiParameterError;
    }
    xNetworkStateCallback = xCallback;
    return eWiFiSuccess;
}

2 驱动层上报网络断开事件

找到WiFi驱动中打印网络断开日志的代码位置,添加以下逻辑:

  • 调用FreeRTOS+TCP栈提供的vIPNetworkDown()函数,触发TCP/IP栈的网络断开事件,该调用会自动触发vApplicationIPNetworkEventHook回调,事件类型为eNetworkDown
  • 若有已注册的WiFi状态变更回调,同步调用回调传递断开事件
    示例代码:
// 驱动中检测到WiFi断连的位置
// 原有逻辑:打印断连日志
WIFI_PrintLog("WiFi disconnected");

// 新增逻辑:上报事件到TCP/IP栈
vIPNetworkDown();
// 新增逻辑:触发WiFi状态变更回调
if(xNetworkStateCallback != NULL)
{
    xNetworkStateCallback(eWiFiStateDisconnected);
}

如果是网络上线的场景,对应调用vIPNetworkUp()即可触发eNetworkUp事件。

3 补充vApplicationIPNetworkEventHook回调逻辑

在应用层实现该回调,处理上下线事件:

void vApplicationIPNetworkEventHook( eIPCallbackEvent_t eNetworkEvent )
{
    if( eNetworkEvent == eNetworkDown )
    {
        // 此处添加WiFi重连逻辑
        WIFI_ConnectAP(&xWiFiParams);
    }
    else if( eNetworkEvent == eNetworkUp )
    {
        // 网络上线后的处理逻辑,比如初始化MQTT连接等
    }
}

4 必要配置检查

  • 确保FreeRTOSIPConfig.h中宏configUSE_IP_NETWORK_EVENT_HOOK配置为1,开启网络事件回调功能
  • 系统初始化WiFi组件后,调用WIFI_RegisterNetworkStateChangeEventCallback注册自定义的状态变更回调(如不需要可以省略,仅保留TCP/IP栈事件上报即可)

内容的提问来源于stack exchange,提问作者CaptainMJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:06:01