最专业的FPGA ZYNQ论坛--黑金动力社区

 找回密码
 注册
查看: 681|回复: 0

tcp长时间传输数据出错

[复制链接]
upcyuan 发表于 2019-7-13 12:00:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
出现的问题是:在whie循环中多次执行send_data()之后,sdk Terminal窗口中报错:
#define ERR_MEM        -1    /* Out of memory error.     */
#define ERR_CONN       -13   /* Not connected.            */
程序在ch27上修改,在主函数的while循环中执行以下语句:

        while (1)
        {
                /* call tcp timer every 250ms */
                if(TcpTmrFlag)
                {
                        if(request_pcb->state == CLOSED || (request_pcb->state == SYN_SENT && request_pcb->nrtx == TCP_SYNMAXRTX))
                        {
                                request_pcb = tcp_new();
                                if (!request_pcb) {
                                        xil_printf("txperf: Error creating PCB. Out of Memory\r\n");
                                        return -1;
                                }

                                //ip_set_option(request_pcb, SOF_REUSEADDR);

                                err = tcp_connect(request_pcb, &ipaddress, port, tcp_connected_callback);
                                if (err != ERR_OK) {
                                        xil_printf("txperf: tcp_connect returned error: %d\r\n", err);
                                        return err;
                                }
                        }
                        tcp_tmr();
                        TcpTmrFlag = 0;
                }
                /*receive input packet from emac*/
                xemacif_input(netif);
                /* if connected to the server, start receive data from PL through axidma, then transmit the data to the PC software by TCP*/
                if(tcp_client_connected)
                {
                        send_data();
                        sleep(1);
                }

        }


以下是send_data()函数:send_data()函数主要就是tcp_write()和tcp_output()函数。

void send_data()
{
        #if __arm__
                int copy = 3;
        #else
                int copy = 0;
        #endif
                err_t err;
        struct tcp_pcb *tpcb = connected_pcb;
        err = tcp_write(tpcb, yuan, 15, copy);
        if (err != ERR_OK) {
                xil_printf("txperf: Error on tcp_write: %d\r\n", err);
                connected_pcb = NULL;
                return;
        }

        err = tcp_output(tpcb);
        if (err != ERR_OK) {
                xil_printf("txperf: Error on tcp_output: %d\r\n",err);
                return;
        }

}


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|@2009-2019 芯驿电子科技(上海)有限公司|小黑屋|手机版|Archiver|黑金动力社区 ( 沪ICP备11013590沪公网安备 31011702000003号 举报投诉电话:15300558155

GMT+8, 2019-12-14 08:13 , Processed in 0.064013 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表