在 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) 函数。
旧解决方案(已弃用,保留以兼容)
你需要进行三个简单修改:
- 在
lwipthread.c中,就在包含WORKING_AREA(或 ChibiOS 3.x 中的THD_WORKING_AREA)的行下方,添加这些行:
lwipthread_thisif_decl.c
//使用中的以太网接口
struct netif thisif;- 在
lwipthread.c中,删除msg_t lwip_thread()中的此行:
lwipthread_static_thisif.c
static struct netif thisif;- 在
lwipthread.h中,在声明wa_lwip_thread的行下方添加此行:
lwipthread_extern_thisif.c
extern struct netif thisif;这样做后,你将能够从任何包含 lwipthread.h 的文件访问 thisif。注意上述声明的确切位置不重要,但作为指导添加。
此方法已在 ChibiOS 3.x (git) 和 ChibiOS 2.6.x 上测试。
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow