FreeRTOS_sockets.h
void vApplicationIPNetworkEventHook_Multi( eIPCallbackEvent_t eNetworkEvent, struct xNetworkEndPoint * pxEndPoint );
vApplicationIPNetworkEventHook_Multi 是应用程序定义的钩子(或回调)函数,当网络连接或断开时,由 TCP/IP 堆栈调用
。在 TCP/IP 堆栈调用该函数时,TCP/IP 堆栈
会设置该函数参数的值。
回调函数由应用程序写入程序实现,但由 TCP/IP 堆栈调用。回调函数的原型
必须与上面的原型完全匹配(包括函数名称)。
参数:
- eNetworkEvent
- 如果 IP 堆栈因网络连接而调用 vApplicationIPNetworkEventHook_Multi(),
则 eNetworkEvent 参数的值将等于 eNetworkUp。在这种情况下:
- 如果 ipconfigUSE_DHCP 或
ipconfigUSE_DHCPv6 服务器在 FreeRTOSIPConfig.h 中设置为 1,
那么当从 DHCP 服务器获取 IP 地址并且先前从 DHCP 服务器获取的 IP 地址的租约被续订时,将调用
vApplicationIPNetworkEventHook_Multi( eNetworkUp, struct xNetworkEndPoint *pxEndPoint )
。
当从DHCP服务器获取IP地址以及先前从DHCP服务器获取的IP地址租赁时调用
。
- 如果 ipconfigUSE_DHCP 或
ipconfigUSE_DHCPv6 服务器在 FreeRTOSIPConfig.h 中设置为 0,
那么当网络通过静态 IP 地址初始化后,将调用
vApplicationIPNetworkEventHook_Multi( eNetworkUp, struct xNetworkEndPoint * pxEndPoint )
。
如果 IP 堆栈由于网络断开而调用 vApplicationIPNetworkEventHook_Multi()
。在这种情况下:
- 当网络驱动程序(以太网外设接口)通知 TCP/IP 堆栈网络连接已丢失时,该堆栈会调用
vApplicationIPNetworkEventHook_Multi( eNetworkDown, struct xNetworkEndPoint * pxEndPoint )
。并非所有
驱动程序都能实现这一功能。
- pxEndPoint
- pxEndPoint 的值代表调用 vApplicationIPNetworkEventHook_Multi 的端点。
只有在以下情况下,应用程序才会仅调用 vApplicationIPNetworkEventHook_Multi():
ipconfigUSE_NETWORK_EVENT_HOOK
在 FreeRTOSIPConfig.h 中设置为 1。
网络事件钩子很适合创建使用 IP 堆栈的任务,
因为它能确保在 TCP/IP 堆栈准备就绪之前不创建任务。
用法示例:
void vApplicationIPNetworkEventHook_Multi( eIPCallbackEvent_t eNetworkEvent,
struct xNetworkEndPoint * pxEndPoint )
{
static BaseType_t xTasksAlreadyCreated = pdFALSE;
if( eNetworkEvent == eNetworkUp )
{
if( xTasksAlreadyCreated == pdFALSE )
{
xTasksAlreadyCreated = pdTRUE;
}
showEndPoint( pxEndPoint );
}
}
示例 vApplicationIPNetworkEventHook_Multi () 定义
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.