This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C129ENCPDT:以太网静态 IP 不能与 TIVAware / lwip 配合使用

Guru**** 2455560 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/639832/tm4c129encpdt-ethernet-static-ip-not-working-with-tivaware-lwip

器件型号: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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我没收到你的帖子。 感谢您分享您的解决方案。