红色风叶55 发表于 2016-12-6 09:32:20

STM32F429 UCOSII NETCONNECT TCP客户端 网口通信问题,求大神解惑...

参考原子哥NETCONN_TCP客户端实验
http://www.openedv.com/data/attachment/forum/201612/05/195256jxqnz4z1ct5np2ef.jpg
稍作修改在UCOS任务列表中只有一个TCP客户端任务该任务不做任务切换 ,无限循环执行该任务
while(1){netconn_write(conn,tcp_sbuffer,520,NETCONN_COPY);//发送数据}
循环发送conn为新创建的netconn连接,tcp_sbuffer为520字节数组首地址,长度520字节http://www.openedv.com/data/attachment/forum/201612/05/195541u05rfb0b044hxr99.jpg此处图中Kbps 有误,实际为KBps这点我已经确认过了。得到网速约(7MB/S)。
while(1){netconn_recv(conn,&recvbuf);//仅接收数据,数据不作任何处理netconn_write(conn,tcp_sbuffer,520,NETCONN_COPY); //发送数据
}http://www.openedv.com/data/attachment/forum/201612/05/195731i7ili752zclcz2lc.jpg此处图中Kbps 有误,实际为KBps这点我已经确认过了。得到网速约(55KB/S)。

问题一:此函数netconn_recv(conn,&recvbuf)为网口接收函数,加了此函数严重影响通信速度,小弟想通过读取寄存器标志或其他状态标志判断网口是否接收到数据,使网速依旧能保持(7MB/S)如:
while(1){if(ETH_Handler.RxFrameInfos.length>60)//接收到数据{//解析接收到的数据}netconn_write(conn,tcp_sbuffer,520,NETCONN_COPY); //发送数据}
这样做确实可以让发送速度保持在(7MB/S)但是这个判断存在问题, TCP自身协议通信如握手包,NAK包等通信时ETH_Handler.RxFrameInfos.length该值也会改变。这个值是从网口中断服务函数void ETH_IRQHandler(void)中得到的。有没有大神知道网口通信可以通过读取哪个寄存器或者判断哪个标志可以判断接收到网口数据了?或者采用其他的方式,只需网速能保持在(3MB/S)以上即可。

问题二:
while(1){netconn_write(conn,tcp_sbuffer,520,NETCONN_COPY);//发送数据}

仅发送函数无限循环,无接收函数,TCP服务器发送数据20次后程序停止,硬件仿真程序一直在网口中断服务函数,大神知道原因吗?

以下为修改过的程序源码:

z258121131 发表于 2016-12-7 13:40:37

不明觉厉

peter001 发表于 2016-12-7 23:19:00

帮顶:):)

原田夜舞love 发表于 2016-12-7 23:25:00

网络通信这块用的比较少

斜阳__ 发表于 2016-12-8 09:13:02

昨天的酱油还没打

damiaa 发表于 2016-12-8 09:17:12

帮顶帮顶

红色风叶55 发表于 2017-3-10 19:07:27

太久没来这个论坛了   登录发现还有个帖子   问题之前解决了当初就是netconn_recv这个API函数没理解透彻感谢你们的回答

nosignal 发表于 2017-4-2 13:51:01

红色风叶55 发表于 2017-3-10 19:07
太久没来这个论坛了   登录发现还有个帖子   问题之前解决了当初就是netconn_recv这个API函数没理解透彻...

求详情

wenyan212235 发表于 2017-5-2 13:44:21

大神,求详情,可否发一份源码学习学习,502260659@qq.com
页: [1]
查看完整版本: STM32F429 UCOSII NETCONNECT TCP客户端 网口通信问题,求大神解惑...