请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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) { } }