硬汉嵌入式论坛

 找回密码
 立即注册
查看: 868|回复: 4
收起左侧

[技术讨论] stm32f4+netxduo TCP测试发送速率太慢

[复制链接]

20

主题

38

回帖

98

积分

初级会员

积分
98
发表于 2025-2-8 15:56:14 | 显示全部楼层 |阅读模式
环境是stm32f407+lan8720+threadx+netxduo

例程用的安富莱的f407的例程  改了下PHY 以及写了个测试发送的函数
发现速度只有几百Kbps
修改NX_PACKET_POOL_SIZE 的大小  没有任何变化   改变TCP窗口大小也没有任何变化
开优化等级也没啥变化
想问下大家如果要测试以太网发送速率 还要注意哪些地方
回复

使用道具 举报

20

主题

38

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2025-2-8 15:59:25 | 显示全部楼层
status = tx_event_flags_get(&EventGroup,                                         /* 事件标志控制块 */
                                        BIT_ALL,                                                /* 等待标志 */
                                        TX_OR_CLEAR,                                        /* 等待标志中的任何一个bit被置1触发 */
                                        &actual_events,
                                         100);
                if(status == TX_SUCCESS)
                {
                        switch (actual_events)
                        {
                                case BIT_0:
                                        t1 = _tx_time_get();
                                        iCount = 100 * 1024 * 1024;
                                        nx_tcp_socket_info_get(&TCPSocket,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&socket_state,NULL,NULL,NULL);
                                        if( socket_state == NX_TCP_ESTABLISHED )
                                        {
                                                do
                                                {       
                                                                if(ret == NX_SUCCESS)
                                                                {
                                                                        nx_tcp_socket_mss_get(&TCPSocket, &maxlen);
                                                                        iCount -= maxlen;
                                                                        if(iCount < 0)
                                                                        {
                                                                                /* 这么计算没问题的 */
                                                                                maxlen = iCount + maxlen;
                                                                        }
                                                                        /* 申请发送数据包 */
                                                                        ret = nx_packet_allocate(&pool_0, &TraPacket, NX_TCP_PACKET, NX_WAIT_FOREVER);
                                                               
                                                                        if (ret)
                                                                        {
                                                                                Error_Handler(__FILE__, __LINE__);  
                                                                        }
                                                                        /*将要发送的数据附加到TraPacket */
                                                                        ret = nx_packet_data_append(TraPacket, (VOID *)data_buffer,  maxlen, &pool_0, NX_WAIT_FOREVER);
                                                                        if (ret)
                                                                        {
                                                                                Error_Handler(__FILE__, __LINE__);
                                                                        }
                                                                        /* 发送数据,注意发送后,此函数会释放数据包 */
                                                                        ret =  nx_tcp_socket_send(&TCPSocket,   
                                                                                                                          TraPacket,      
                                                                                                                          NX_WAIT_FOREVER);
                                                                        if (ret)
                                                                        {       
                                                                                nx_packet_release(TraPacket);
                                                                                Error_Handler(__FILE__, __LINE__);
                                                                               
                                                                        }
//                                                                        if(ret == NX_SUCCESS) iCount--;
                                                                }
                                                               
                                                                        
                                                }while(iCount > 0);       
                                                               
                                        }
                                        t2 = _tx_time_get();
这是发送的测试代码

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
发表于 2025-2-9 08:06:32 | 显示全部楼层
回复

使用道具 举报

20

主题

38

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2025-2-10 17:37:17 | 显示全部楼层
我也尝试了这使用Jperf来进行网络吞吐量的测试   但不知道为什么可能是环境没装好,一直测试不成功
考虑自己写 是因为我看了硬汉哥自己实现了基于stm32f4 和 h7 的网络测速(基于rl-tcpnet的),都能基本达到百兆要求,我就想着我也自己写一下  结果就是目前stm32h7测速只有50Mbps   stm32f4只有5Mbps左右  主要修改的地方 就是TCP的窗口大小   以及 dma发送描述符  还有就是上位机的缓冲区的大小,然后还有优化等级  这些尝试了之后发现速度还提不上来
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
发表于 2025-2-11 06:40:43 | 显示全部楼层
marin0vv0 发表于 2025-2-10 17:37
我也尝试了这使用Jperf来进行网络吞吐量的测试   但不知道为什么可能是环境没装好,一直测试不成功
考虑自 ...

好的,后面我试试
这个netxduo我一直没有去测试过速度。

这个有个官方例子的,你可以看看
https://github.com/STMicroelectr ... ns/NetXDuo/Nx_Iperf
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 11:46 , Processed in 0.040857 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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