ZYNQ7020官方提供了sever端的例程,连接后可以显示实时网速,由于该例程未使用操作系统,移植到其他裸机程序里会发生各种各样的问题,例如卡死的问题。经过调试发现,例程里的串口会和其他程序里调用的串口发生冲突,将其屏蔽即可,代码如下:
static err_t tcp_recv_perf_traffic(void *arg, struct tcp_pcb *tpcb,
struct pbuf *p, err_t err)
{
if (p == NULL) {
u64_t now = get_time_ms();
u64_t diff_ms = now - server.start_time;
tcp_server_close(tpcb);
//tcp_conn_report(diff_ms, TCP_DONE_SERVER);//屏蔽这里
xil_printf("TCP test passed Successfully\n\r");
return ERR_OK;
}
/* Record total bytes for final report */
server.total_bytes += p->tot_len;
if (server.i_report.report_interval_time) {
u64_t now = get_time_ms();
/* Record total bytes for interim report */
server.i_report.total_bytes += p->tot_len;
if (server.i_report.start_time) {
u64_t diff_ms = now - server.i_report.start_time;
if (diff_ms >= server.i_report.report_interval_time) {
//tcp_conn_report(diff_ms, INTER_REPORT);//屏蔽这里
/* Reset Interim report counters */
server.i_report.start_time = 0;
server.i_report.total_bytes = 0;
}
} else {
/* Save start time for interim report */
server.i_report.start_time = now;
}
}
tcp_recved(tpcb, p->tot_len);
pbuf_free(p);
return ERR_OK;
}
问题解决。
可以看到两个程序可以同时运行了,互不影响。