Xilinx官方例程中的UDP服务端的BUG

1.问题描述:

        使用xilinx官方SDK生成的freertos实时操作系统下的UDP服务端的工程代码时,当设备没有插网线而进行初始化会报自动协商错误,从而会将该线程的程序锁死,网口功能就无法正常使用。

如果插上网口进行初始化或者将自协商设置为100Mbps或者1000Mbps时,也不会出现上述问题。并且,如果网口初始化完成之后,是能够支持网口热拔插功能的。

2.解决方案:

        (1)  将自动协商强制改为100Mbps或者1000Mbps:需要明确知道设备的网口的工作环境。

        (2)  创建一个线程监控网口link状态:改动幅度较大,如果对协议栈不清楚不建议轻易修改。

        (3)  在自动协商机制启动之前先判断网口link状态:较为简单,具体的修改流程如下:

                ① 打开”xemacpsif.c”文件:

                ②  找到”static err_t low_level_init(struct netif *netif)”函数:

        

                ③  找到网口初始化:

                ④  在网口初始化之后添加如下代码:

	/* ============   start:新增代码:定时检测链路状态    ============*/
	while(1)
	{
		u16_t status;
		u32_t phy_addr = 0;		/* 定义PHY地址 */
		u32_t RegNum = 1;		/* 定义寄存器数量*/
		XEmacPs_PhyRead(&xemacpsif->emacps,phy_addr,1,&status);
		xil_printf("IEEE_STATUS_REG_OFFSET=%d\r\n",status);
		if(status & (0x01<<2)){
			xil_printf("IEEE_STATUS_REG_OFFSET=%d\r\n",status);
			break;
		}else{
			vTaskDelay(100);
		}
	}
	/* ============   end:新增代码:定时检测链路状态    ============*/

                ⑤  注意:如果重新设置了bsp包中的参数,那么这个代码会被系统覆盖掉。需要再一次手动添加。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值