下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

vApplicationIPNetworkEventHook_Multi()

[FreeRTOS-Plus-TCP API 引用]

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_DHCPipconfigUSE_DHCPv6 服务器在 FreeRTOSIPConfig.h 中设置为 1, 那么当从 DHCP 服务器获取 IP 地址并且先前从 DHCP 服务器获取的 IP 地址的租约被续订时,将调用 vApplicationIPNetworkEventHook_Multi( eNetworkUp, struct xNetworkEndPoint *pxEndPoint )。 当从DHCP服务器获取IP地址以及先前从DHCP服务器获取的IP地址租赁时调用 。
  • 如果 ipconfigUSE_DHCPipconfigUSE_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 堆栈准备就绪之前不创建任务。

用法示例:


/* Defined by the application code, but called by FreeRTOS-Plus-TCP when the network

connects/disconnects (if ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 in

FreeRTOSIPConfig.h). */


void vApplicationIPNetworkEventHook_Multi( eIPCallbackEvent_t eNetworkEvent,
struct xNetworkEndPoint * pxEndPoint )
{
static BaseType_t xTasksAlreadyCreated = pdFALSE;

/* Check this was a network up event, as opposed to a network down event. */
if( eNetworkEvent == eNetworkUp )
{
/* Create the tasks that use the TCP/IP stack if they have not already been

created. */

if( xTasksAlreadyCreated == pdFALSE )
{
/*

* Create the tasks here.

*/


xTasksAlreadyCreated = pdTRUE;
}

/* Print out the network configuration, which may have come from a DHCP

* server. */

showEndPoint( pxEndPoint );
}
}
示例 vApplicationIPNetworkEventHook_Multi () 定义
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.