请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C129ENCPDT 你(们)好 我一直在寻找问题数小时。 DHCP 工作正常、但静态 IP 已拧紧(我需要两者都工作)。
我甚至使用的是最新最出色的 TIvAware 2.1.4.178。
我有 #define LWIP_DHCP 1、因为客户将能够使用 DHCP 或分配静态 IP。
我终于找到了一个名为 lwIPLinkDetect()的小函数,这似乎是个问题;
它会擦除 IP 地址(位于 lwipplib.c 中):
// //从网络接口清除任何地址信息。 // ip_addr.addr = 0; net_mask.addr = 0; gw_addr.addr = 0; netif_set_addr (&g_sNetIF、&ip_addr、&net_mask、&gw_addr);
我在上面添加了这一修复方法:if (g_ui32IPMode = IPADDR_USE_STATIC) return;
我不确定我是否只是做了一些错误或发生了什么、但对于任何有相同问题的人、我将在下面发布完整的函数、并在其中进行修复。
// // //此函数定期检查链路状态, 并在链路状态发生变化时适当响应//。 //// ***************** #if LWIP_AUTOIP || LWIP_DHCP 静态空 lwIPLinkDetect (void) { bool bHaveLink; struct ip_addr ip_addr; struct ip_addr net_mask; 结构 ip_addr gw_addr; // //查看是否有活动链路。 // bHaveLink = MAP_EMACPHYREAD (EMAC0_BASE、PHY_PHY_ADDR、EPHY_BMSR)和 EPHY_BMRS_LINKSTAT; // //如果链接状态未更改,则返回而不执行任何其他操作。 // if (bHaveLink = g_bLinkActive) { 返回; } // //保存新的链接状态。 // G_bLinkActive = bHaveLink; if (g_ui32IPMode = IPADDR_USE_STATIC)返回; // //从网络接口清除任何地址信息。 // ip_addr.addr = 0; net_mask.addr = 0; gw_addr.addr = 0; netif_set_addr (&g_sNetIF、&ip_addr、&net_mask、&gw_addr); // //查看现在是否有链接。 // if (bHaveLink) { // //启动 DHCP (如果已启用)。 // #if LWIP_DHCP if (g_ui32IPMode = IPADDR_USE_DHCP) { DHCP_START (&g_sNetIF); } #endif // //启动 AutoIP (如果已启用),但 DHCP 未启用。 // #if LWIP_AUTOIP if (g_ui32IPMode = IPADDR_USE_AUTOIP) { AutoIP_start (&g_sNetIF); } #endif } 其他 { // //停止 DHCP (如果已启用)。 // #if LWIP_DHCP if (g_ui32IPMode = IPADDR_USE_DHCP) { DHCP_STOP (&g_sNetIF); } #endif // //停止 AutoIP (如果已启用),但 DHCP 未启用。 // #if LWIP_AUTOIP if (g_ui32IPMode = IPADDR_USE_AUTOIP) { AutoIP_stop (&g_sNetIF); } #endif } } #endif