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.

[参考译文] EK-TM4C1294XL:LwIP 不发送 UDP 数据包

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/588176/ek-tm4c1294xl-lwip-is-not-sending-udp-packets

器件型号:EK-TM4C1294XL

您好!


我正在使用 Tiva-C TM4C1294XL 板、并尝试向计算机发送 UDP 封包。 我只需要发送数据、而我从不需要计算机来应答电路板。 我修改了 enet_lwip 示例、即使我可以获取 IP 并对电路板执行 ping 操作、我也无法发送任何 UDP 数据包。 我的第一次尝试是使用包含 udp_send()的循环。 我在其他帖子中发现,通常应该从以太网处理程序调用 udp_send()。 但是我看到它可以像在这篇文章中那样工作一段时间:

使用此代码、我可以获取链路、获取 IP 和电路板对 ping 的应答(以便能够发送数据)。 但是、我无法发送任何 UDP 数据包、我不知道原因。 好的,正如我写的那样,我知道通常在处理程序中必须使用 udp_send(),但它至少应该发送一些 UDP 数据报。

我是否需要 udp_init()函数?

我是否需要释放缓冲器?

我是否只需要发送一个数据报就需要其他东西?

int main (void)
{
struct udp_PCB * pcb;

BoardInit();//初始化板。
CONsComInit();//通过 UART0初始化与计算机的通信。
PinoutSet (true、false);//配置器件引脚。
EthInit();//初始化以太网端口。
SysTickInit();//启用系统计时器
PCB = UdpInit (srv_IP、srv_port);//初始化与远程服务器的 UDP 连接(代码与 LocatorInit 相同,但返回 PCB)。

//打印相关信息以检查 UdpInit 是否正常--> PCB 配置正确
UARTprintf ("\n 本地 IP 地址应为任意:");
DisplayIPAddress (PCB->local_ip.addr);
UARTprintf ("\n 本地端口:%3D\n"、PCC->LOCAL_PORT);
UARTprintf("Remote IP address :");
DisplayIPAddress (PCB->remote_ip.addr);
UARTprintf ("\n 远程端口:%3D\n"、PCC->REMOTE_PORT);

struct pbuf * pb;
char str[512]="测试 Veoware ";
pb = pbuf_alloc (PBUF_transport、512、PBUF_REF);
pb->payload = str;
pb->len = pb->tot_len = 512;

while (1){ //我只是尝试持续发送相同的信息,以查看是否发送了数据包。
UDP_SEND (PCB、PB);
}

//设置设备定位服务。
//LocatorInit();
//LocatorMACAddrSet (pui8MACArray);
//LocatorAppTitleSet ("EK-TM4C1294XL Enet_IO");
//UARTprintf ("%d."、pui8MACArray);
//httpd_init();


//设置中断优先级。 我们将 SysTick 中断设置为更高的值
//优先级比以太网中断高,以确保文件系统
如果 SysTick 在以太网处理程序运行时发生、则处理// tick
//已处理。 这很可能是因为所有 TCP/IP 和 HTTP 工作都是
//在以太网中断上下文中完成。

MAP_IntPrioritySet (INT_EMAC0、ETHERNET_INT_PRIORITY);
MAP_IntPrioritySet (FAULT_SysTick、SysTK_INT_PRIORITY);

//永久循环。 所有工作都在中断处理程序中完成。
while (1)
{
}
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看到您的帖子已超过12小时、您没有收到任何回复。 很遗憾、我不是 LWIP 专家。 您是否曾尝试从 LWIP 组寻求帮助?
    savannah.nongnu.org/.../
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    感谢您的支持。 我已经尝试在 Savannah 网站上获取信息、但没有成功。

    有人告诉我吗? 我不需要全部功能、而只需要获取一些数据并发送它们。 我不需要与 boarb 进行任何通信、只需要将 UDP 数据报从电路板发送到计算机。

    提前感谢

    kr
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Nicolas 您好。
    我建议研究一下\TIVAWARE_VERNNnnnnnnnnnn\third_parti\lwip-n.n\src\apps\tftp 示例的来源,所有内容将在一段时间内变得清晰。 这很容易遵循。 只需运行此示例并从互联网或操作系统(Linux、Windows)找到 trivialFTP 客户端、然后向模块发送一些数据包、然后检查模块的回复。
    John