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