Proceso de inicialización de lwIP detallado

lwIP es un protocolo IP ligero, utilizado principalmente en sistemas integrados. En este blog, analizaremos lwip_initla función en detalle, que es la función de inicialización de la biblioteca lwIP.

1. Firma de función

void lwip_init(void)

Esta es una función sin parámetros ni valor de retorno. Su tarea principal es inicializar los distintos módulos de la biblioteca lwIP.

2. Implementación de funciones

2.1 Control constante

#ifndef LWIP_SKIP_CONST_CHECK
  int a = 0;
  LWIP_UNUSED_ARG(a);
  LWIP_ASSERT("LWIP_CONST_CAST not implemented correctly. Check your lwIP port.", LWIP_CONST_CAST(void *, &a) == &a);
#endif

En esta sección, primero verifique si está definido LWIP_SKIP_CONST_CAST_CHECK. Si no está definido, crea una variable entera ay luego usa una macro LWIP_UNUSED_ARGpara marcar la variable como no utilizada. A continuación, utilice LWIP_ASSERTuna macro para comprobar LWIP_CONST_CASTla implementación correcta. Esta macro se utiliza para forzar la conversión de tipos y garantizar que la biblioteca lwIP pueda funcionar normalmente en una plataforma de hardware específica.

2.2 Verificación del embalaje estructural

#ifndef LWIP_SKIP_PACKING_CHECK
  LWIP_ASSERT("Struct packing not implemented correctly. Check your lwIP port.", sizeof(struct packed_struct_test) == PACKED_STRUCT_TEST_EXPECTED_SIZE);
#endif

Este código comprueba si está definido LWIP_SKIP_PACKING_CHECK. Si no está definido, utilizará LWIP_ASSERTmacros para confirmar struct packed_struct_testque el tamaño es igual al tamaño esperado PACKED_STRUCT_TEST_EXPECTED_SIZE. Esto es para verificar que el compilador haya alineado la estructura correctamente, lo cual es muy importante para enviar y recibir paquetes en la comunicación de red.

2.3 Inicialización del módulo

  stats_init();
#if !NO_SYS
  sys_init();
#endif /* !NO_SYS */
  mem_init();
  memp_init();
  pbuf_init();
  netif_init();
#if LWIP_IPV4
  ip_init();
#if LWIP_ARP
  etharp_init();
#endif /* LWIP_ARP */
#endif /* LWIP_IPV4 */
#if LWIP_RAW
  raw_init();
#endif /* LWIP_RAW */
#if LWIP_UDP
  udp_init();
#endif /* LWIP_UDP */
#if LWIP_TCP
  tcp_init();
#endif /* LWIP_TCP */
#if LWIP_IGMP
  igmp_init();
#endif /* LWIP_IGMP */
#if LWIP_DNS
  dns_init();
#endif /* LWIP_DNS */
#if PPP_SUPPORT
  ppp_init();
#endif
#if LWIP_TIMERS
  sys_timeouts_init();
#endif /* LWIP_TIMERS */

Este código inicializa varios módulos de la biblioteca lwIP, incluido el módulo de estadísticas, el módulo del sistema, el módulo de memoria, el módulo de grupo de memoria, el módulo de búfer de protocolo y el módulo de interfaz de red.

Además, según la configuración en tiempo de compilación, también se pueden inicializar los siguientes módulos:

  • módulo IPv4
  • módulo ARP
  • módulo crudo
  • módulo UDP
  • módulo TCP
  • módulo IGMP
  • módulo DNS
  • módulo APP
  • módulo temporizador

2.4 Inicialización del socket

#if !NO_SYS
  lwip_sock_init();
#endif

Este código inicializa la interfaz de socket de lwIP en sistemas no básicos. Esto es necesario para proporcionar la API de socket BSD estándar.

3. Resumen

lwip_initLa función es la función de inicialización de la biblioteca lwIP, que es responsable de inicializar varios módulos para garantizar el funcionamiento normal de la biblioteca. Esta función debe llamarse antes de usar la biblioteca lwIP.

Supongo que te gusta

Origin blog.csdn.net/qq_24951479/article/details/131683905
Recomendado
Clasificación