Processus d'initialisation détaillé de lwIP

lwIP est un protocole IP léger, principalement utilisé dans les systèmes embarqués. Dans ce blog, nous analyserons lwip_initen détail la fonction, qui est la fonction d'initialisation de la bibliothèque lwIP.

1. Signature de fonction

void lwip_init(void)

Il s'agit d'une fonction sans paramètres ni valeur de retour. Sa tâche principale est d'initialiser les différents modules de la bibliothèque lwIP.

2. Implémentation des fonctions

2.1 Vérification 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

Dans cette section, vérifiez d'abord si est défini LWIP_SKIP_CONST_CAST_CHECK. S'il n'est pas défini, il crée une variable entière a, puis utilise une macro LWIP_UNUSED_ARGpour marquer la variable comme inutilisée. Ensuite, utilisez LWIP_ASSERTune macro pour vérifier LWIP_CONST_CASTla bonne implémentation. Cette macro est utilisée pour forcer la conversion de type afin de garantir que la bibliothèque lwIP peut fonctionner normalement sur une plate-forme matérielle spécifique.

2.2 Vérification de l'emballage structurel

#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

Ce code vérifie s'il est défini LWIP_SKIP_PACKING_CHECK. Si elle n'est pas définie, il utilisera LWIP_ASSERTdes macros pour confirmer struct packed_struct_testque la taille est égale à la taille attendue PACKED_STRUCT_TEST_EXPECTED_SIZE. Il s'agit de vérifier que le compilateur a correctement aligné la structure, ce qui est très important pour l'envoi et la réception de paquets dans la communication réseau.

2.3 Initialisation des modules

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

Ce code initialise divers modules de la bibliothèque lwIP, notamment le module de statistiques, le module système, le module de mémoire, le module de pool de mémoire, le module de tampon de protocole et le module d'interface réseau.

De plus, en fonction de la configuration au moment de la compilation, les modules suivants peuvent également être initialisés :

  • Module IPv4
  • Module ARP
  • Module RAW
  • Module UDP
  • Module TCP
  • Module IGMP
  • module DNS
  • Module PPP
  • module de minuterie

2.4 Initialisation du socket

#if !NO_SYS
  lwip_sock_init();
#endif

Ce code initialise l'interface socket de lwIP sur les systèmes non nus. Ceci est nécessaire pour fournir l’API de socket BSD standard.

3. Résumé

lwip_initLa fonction est la fonction d'initialisation de la bibliothèque lwIP, qui est chargée d'initialiser divers modules pour assurer le fonctionnement normal de la bibliothèque. Cette fonction doit être appelée avant d'utiliser la bibliothèque lwIP.

Je suppose que tu aimes

Origine blog.csdn.net/qq_24951479/article/details/131683905
conseillé
Classement