Auf die lwIP struct netif-Instanz in ChibiOS zugreifen

English Deutsch

Problem

Du verwendest die ChibiOS-lwIP-Bindung, um auf das Netzwerk deiner Mikrocontroller-Anwendung zuzugreifen.

Du musst auf die lwIP struct netif-Struktur zugreifen, z.B. um die aktuelle DHCP-IP-Adresse zu ermitteln, die der Netzwerkschnittstelle zugewiesen wurde. Die Standard-ChibiOS-Implementierung in lwipthread.c exportiert jedoch die Interface-Struktur nicht.

Lösung

Du kannst einfach das lwIP-Standard-Interface verwenden, das in netif.h deklariert ist, wie folgt:

netif_default_example.cpp
/** Das Standard-Netzwerk-Interface. */
extern struct netif *netif_default;

Wenn du mehrere Interfaces verwendest, kannst du auch die Funktion netif_find(const char* name) verwenden.

Alte Lösung (veraltet, aus Kompatibilitätsgründen behalten)

Es gibt drei einfache Modifikationen, die du vornehmen musst:

  1. In lwipthread.c, direkt unter der Zeile mit WORKING_AREA (oder THD_WORKING_AREA in ChibiOS 3.x), füge diese Zeilen hinzu:
lwipthread_thisif_decl.c
//Das verwendete Ethernet-Interface
struct netif thisif;
  1. In lwipthread.c, entferne diese Zeile in msg_t lwip_thread():
lwipthread_static_thisif.c
static struct netif thisif;
  1. In lwipthread.h, füge diese Zeile direkt unter der Zeile hinzu, in der wa_lwip_thread deklariert ist:
lwipthread_extern_thisif.c
extern struct netif thisif;

Dadurch kannst du von jeder Datei aus, in der lwipthread.h eingebunden ist, auf thisif zugreifen. Beachte, dass die genauen Positionen der oben beschriebenen Deklarationen keine Rolle spielen, aber als Orientierungshilfe hinzugefügt wurden.

Dieser Ansatz wurde sowohl mit ChibiOS 3.x (git) als auch mit ChibiOS 2.6.x getestet.


Check out similar posts by category: C/C++, Embedded