下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。
注意:此 API 已从 FreeRTOS V4.0.0 起弃用 。请参阅 vApplicationIPNetworkEventHook_Multi() 了解支持 IPv6、多个端点和多个接口的新 API。如需使用已弃用的 API ,请将 FreeRTOSIPConfig.h 头文件中的 ipconfigIPv4_BACKWARD_COMPATIBLE 设置为 1。

vApplicationIPNetworkEventHook()

[FreeRTOS-Plus-TCP API 引用]

FreeRTOS_sockets.h
void vApplicationIPNetworkEventHook( eIPCallbackEvent_t eNetworkEvent );
		

vApplicationIPNetworkEventHook() 是由应用程序定义的钩子 (或回调)函数,当网络连接或断开连接时,TCP/IP 堆栈会调用该函数。 TCP/IP 堆栈调用该函数时, TCP/IP 集会设置该函数的参数值。

回调函数由应用程序编写器实现,但由 TCP/IP 堆栈调用。 回调函数的原型必须 完全匹配上面的原型(包括函数名称)。


如果 IP 堆栈由于网络已连接调用 vApplicationIPNetworkEventHook(),则 eNetworkEvent 参数的值等于 则 eNetworkEvent 参数的值将等于 eNetworkUp:

  • 如果 ipconfigUSE_DHCP 服务器在 FreeRTOS IPConfig.h 中设置为1 ,则 调用 vApplicationIPNetworkEventHook ( eNetworkUp ) ,前提是 已从 DHCP 服务器获得 IP 地址,并且先前从 DHCP 获得的 IP 地址租约 DHCP 获取的 IP 地址的租约被续约时。

  • 如果在 FreeRTOSIPConfig.h 中将 ipconfigUSE_DHCP 服务器设置为 0,则下列情形下会调用 vApplicationIPNetworkEventHook( eNetworkUp ): 使用静态 IP 地址初始化网络时。


如果 IP 堆栈由于网络断开而调用 vApplicationIPNetworkEventHook(),则 eNetworkEvent 参数的值为 eNetworkDown:

  • TCP/IP 堆栈调用 vApplicationIPNetworkEventHook( eNetworkDown ), 前提条件是网络驱动程序(以太网外设的接口)已通知 网络连接已断开。 但并非所有驱动程序都能 实现此功能。


应用程序仅调用 vApplicationIPNetworkEventHook() 的条件是在 FreeRTOSIPConfig.h 中将 ipconfigUSE_NETWORK_EVENT_HOOK 设置为 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( eIPCallbackEvent_t eNetworkEvent )
{
uint32_t ulIPAddress, ulNetMask, ulGatewayAddress, ulDNSServerAddress;
static BaseType_t xTasksAlreadyCreated = pdFALSE;
int8_t cBuffer[ 16 ];

/* 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;
}

/* The network is up and configured. Print out the configuration,
which may have been obtained from a DHCP server. */

FreeRTOS_GetAddressConfiguration( &ulIPAddress,
&ulNetMask,
&ulGatewayAddress,
&ulDNSServerAddress );

/* Convert the IP address to a string then print it out. */
FreeRTOS_inet_ntoa( ulIPAddress, cBuffer );
printf( "IP Address: %srn", cBuffer );

/* Convert the net mask to a string then print it out. */
FreeRTOS_inet_ntoa( ulNetMask, cBuffer );
printf( "Subnet Mask: %srn", cBuffer );

/* Convert the IP address of the gateway to a string then print it out. */
FreeRTOS_inet_ntoa( ulGatewayAddress, cBuffer );
printf( "Gateway IP Address: %srn", cBuffer );

/* Convert the IP address of the DNS server to a string then print it out. */
FreeRTOS_inet_ntoa( ulDNSServerAddress, cBuffer );
printf( "DNS server IP Address: %srn", cBuffer );
}
}

Example vApplicationIPNetworkEventHook() definition
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.