在 ChibiOS 中访问 lwIP struct netif 实例

问题

你正在使用 ChibiOS lwIP 绑定来访问你的微控制器应用程序的网络。

你需要访问 lwIP struct netif 结构,例如获取分配给网络接口的当前 DHCP IP 地址。然而,lwipthread.c 中的默认 ChibiOS 实现不导出接口结构。

解决方案

你可以简单地像这样使用 netif.h 中声明的 lwIP 默认接口:

netif_default_example.cpp
/** 默认网络接口。*/
extern struct netif *netif_default;

如果你使用多个接口,你也可以使用 netif_find(const char* name) 函数。

旧解决方案(已弃用,保留以兼容)

你需要进行三个简单修改:

  1. lwipthread.c 中,就在包含 WORKING_AREA(或 ChibiOS 3.x 中的 THD_WORKING_AREA)的行下方,添加这些行:
lwipthread_thisif_decl.c
//使用中的以太网接口
struct netif thisif;
  1. lwipthread.c 中,删除 msg_t lwip_thread() 中的此行:
lwipthread_static_thisif.c
static struct netif thisif;
  1. lwipthread.h 中,在声明 wa_lwip_thread 的行下方添加此行:
lwipthread_extern_thisif.c
extern struct netif thisif;

这样做后,你将能够从任何包含 lwipthread.h 的文件访问 thisif。注意上述声明的确切位置不重要,但作为指导添加。

此方法已在 ChibiOS 3.x (git) 和 ChibiOS 2.6.x 上测试。


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