初中生
最后登录1970-1-1
在线时间 小时
注册时间2015-10-30
|
第一次调网口相关的程序,相关文件太多,完全看不懂,那就先不管了,先把功能实现,在后面慢慢消化,买的是fire的F429系列的一个核心板,拿到了相关的程序源码,于是选择了一个UDP协议的程序,原程序里是通过按键控制udp的连接与断开,由于核心板里只有一个复位按键,于是将按键部分程序删掉,改成直接进入主循环后,直接开启udp连接,ip啥的都改好,ping通之后,下载程序,复位后通过串口打印情况发现出问题了,在连接udp函数里出现了“can not create udp pcb”,原因是由一个upcb变量不为零,其他的程序部分我也看不懂,请问论坛里面有大神指导什么原因吗?以下是main部分程序和udp连接部分程序:
int main(void)
{
/* 3õê¼»ˉμ÷êÔ′®¿ú£¬ò»°ãÎa′®¿ú1 */
Debug_USART_Config();
/* 3õê¼»ˉÏμí3μÎ′e¶¨ê±Æ÷ */
SysTick_Init();
TIM3_Config(999,899);//10ms¶¨ê±Æ÷
printf("LAN8720A Ethernet Demo\n");
/* Configure ethernet (GPIOs, clocks, MAC, DMA) */
ETH_BSP_Config();
printf("LAN8720A BSP INIT AND COMFIGURE SUCCESS\n");
/* Initilaize the LwIP stack */
LwIP_Init();
printf(" KEY1: Æô¶ˉUDPᬽó\n");
printf(" KEY2: ¶Ï¿aUDPᬽó\n");
//IPμØÖ·oí¶Ë¿ú¿éÔúnetconf.hÎļtDT¸Ä£¬»òÕßê1óÃDHCP·tÎñ×Ô¶ˉ»ñè¡IP(Dèòa·óéÆ÷Ö§3Ö)
printf("±¾μØIPoí¶Ë¿ú: %d.%d.%d.%d:%d\n",IP_ADDR0,IP_ADDR1,IP_ADDR2,IP_ADDR3,UDP_SERVER_PORT);
printf("Ô¶¶ËIPoí¶Ë¿ú: %d.%d.%d.%d:%d\n",DEST_IP_ADDR0, DEST_IP_ADDR1, DEST_IP_ADDR2, DEST_IP_ADDR3,DEST_PORT);
while(1)
{
if (EthLinkStatus == 0)
{
printf("Connect to udp server\n");
/* Connect to udp server */
udp_echoclient_connect();
}
/* check if any packet received */
if (ETH_CheckFrameReceived())
{
/* process received ethernet packet */
LwIP_Pkt_Handle();
}
/* handle periodic timers for LwIP */
LwIP_Periodic_Handle(LocalTime);
}
}
/**
* @brief Connect to UDP echo server
* @param None
* @retval None
*/
void udp_echoclient_connect(void)
{
struct pbuf *p;
struct ip_addr DestIPaddr;
err_t err;
/* Create a new UDP control block */
upcb = udp_new();
if (upcb!=NULL)
{
/*assign destination IP address */
IP4_ADDR( &DestIPaddr, DEST_IP_ADDR0, DEST_IP_ADDR1, DEST_IP_ADDR2, DEST_IP_ADDR3 );
/* configure destination IP address and port */
err= udp_connect(upcb, &DestIPaddr, DEST_PORT);
if (err == ERR_OK)
{
/* Set a receive callback for the upcb */
udp_recv(upcb, udp_receive_callback, NULL);
sprintf((char*)data, "sending udp client message %d\n",message_count);
/* allocate pbuf from pool*/
p = pbuf_alloc(PBUF_TRANSPORT,strlen((char*)data), PBUF_POOL);
if (p != NULL)
{
/* copy data to pbuf */
pbuf_take(p, (char*)data, strlen((char*)data));
/* send udp data */
udp_send(upcb, p);
/* free pbuf */
pbuf_free(p);
}
else
{
/* free the UDP connection, so we can accept new clients */
udp_remove(upcb);
#ifdef SERIAL_DEBUG
printf("\n\r can not allocate pbuf ");
#endif
}
}
else
{
/* free the UDP connection, so we can accept new clients */
udp_remove(upcb);
#ifdef SERIAL_DEBUG
printf("\n\r can not connect udp pcb");
#endif
}
}
else
{
#ifdef SERIAL_DEBUG
printf("\n\r can not create udp pcb");
#endif
}
}
|
|