硬汉嵌入式论坛

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

[以太网] 怎样提高实时传输速度

[复制链接]

5

主题

16

回帖

31

积分

新手上路

积分
31
发表于 2024-7-9 17:16:39 | 显示全部楼层 |阅读模式
最近在搞基于STM32 V7开发板,使用双缓存的方法,通过Netx Duo实时发送ADS1278芯片实时采集的数据,目前可实现2通道10ksps的实时传输,8通道目前只能达到1.3ksps左右,问题就是数据处理+发送的时间比ad实时采集的慢;求大佬帮我出出主意,下面是数据处理+发送的程序:


static void AppTaskNetXPro(ULONG thread_input)
{
    (void)thread_input;
        uint32_t i;
        NetX_Init();                /* 初始化NetX */
        EXTI_Key_Config();  /* 初始化外部中断 */
        bsp_InitADS1278();  /* 初始化ADS1278 */       
       
        while(1)
        {                       
                if(ADS1278_Pro_Flag)
                {       
                        if(SampleGroup_Flag == 0)
                        {
                                for(i = 0; i < Sample_NUM; i++)
                                {                               
                                        itoa(sample_buf_1[i], Result, 10);                                                                       
                                        strcat((char *)sendbuf, Result);
                                        if((i % 8) == 7)
                                        {
                                                strcat((char *)sendbuf,"\n");       
                                        }       
                                        else
                                        {
                                                strcat((char *)sendbuf,",");
                                        }                                               
                                }
                                /* 计算发送字符串长度 */                               
                                while(sendbuf[ADS1278_DataSize] != '\0')
                                {
                                        ADS1278_DataSize++;
                                }                               
                                /* 通过协议栈发送数据 */                       
                                NetX_SendData();

                                /* 标志位,数组缓存,计数值清零 */
                                memset(sendbuf, 0, ADS1278_DataSize);
                                ADS1278_DataSize = 0;
                                /* 这个清零放最后一个 */
                                ADS1278_Pro_Flag = 0;
                        }
                        else
                        {
                                /* 目前一组发送数据不能超过128个样点 */
                                for(i = 0; i < Sample_NUM; i++)
                                {                               
                                        itoa(sample_buf_2[i], Result, 10);                                                                       
                                        strcat((char *)sendbuf, Result);
                                        if((i % 8) == 7)
                                        {
                                                strcat((char *)sendbuf,"\n");                                                               
                                        }       
                                        else
                                        {
                                                strcat((char *)sendbuf,",");
                                        }                                               
                                }
                                /* 计算发送字符串长度 */                               
                                while(sendbuf[ADS1278_DataSize] != '\0')
                                {
                                        ADS1278_DataSize++;
                                }                               
                                /* 通过协议栈发送数据 */                       
                                NetX_SendData();

                                /* 标志位,数组缓存,计数值清零 */
                                memset(sendbuf, 0, ADS1278_DataSize);
                                ADS1278_DataSize = 0;
                                /* 这个清零放最后一个 */
                                ADS1278_Pro_Flag = 0;                               
                        }
                }
        }   
}

{C5EE9EDE-5DCE-4a23-A567-2D927A18647F}.png
4.png
3.png
2.png
1.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2024-7-9 17:58:16 | 显示全部楼层
根据楼主的描述:目前可实现2通道10ksps的实时传输,8通道目前只能达到1.3ksps左右

说明网络传输这块是没问题的,你2通道可以10Ksps,那8通道肯定也是没问题的,而这里只有1.3Ksps,看看是不是你的1278处理时间太长了。如果用的是H7芯片,完全可以开个大缓冲采集1s时间,然后一次性发送这1秒采集的数据,看看性能怎么样。
回复

使用道具 举报

10

主题

76

回帖

121

积分

初级会员

积分
121
发表于 2024-7-9 18:34:45 | 显示全部楼层
那就发原始数据,转字符串耗时数据量还翻倍了
回复

使用道具 举报

5

主题

274

回帖

289

积分

高级会员

积分
289
发表于 2024-7-9 19:10:35 | 显示全部楼层
开两个任务,一个只接收,一个只转换字符串+发送,两个任务之间用一个大的环形缓冲区传递数据,接收到一定规模后再触发批量转换+发送
转字符串很费时间,条件允许的话可以直接传原始数据
回复

使用道具 举报

34

主题

206

回帖

308

积分

高级会员

积分
308
发表于 2024-7-10 08:57:05 | 显示全部楼层
搞个大环形缓冲,试试DMA半传输中断
另外尽量减少字符串转换
回复

使用道具 举报

85

主题

798

回帖

1053

积分

至尊会员

积分
1053
发表于 2024-7-10 09:13:17 | 显示全部楼层
16进制传输,不要使用那些库函数,直接原始数据丢上去
回复

使用道具 举报

219

主题

1109

回帖

1776

积分

至尊会员

More we do, more we can do.

积分
1776
发表于 2024-7-10 10:42:42 | 显示全部楼层
我之前配的14.4K采样率,7通道,中断触发数据接收。
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2024-7-12 10:40:50 | 显示全部楼层
emwin 发表于 2024-7-10 10:42
我之前配的14.4K采样率,7通道,中断触发数据接收。

老哥,你是怎么处理原始数据的,还是直接发16进制数据
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2024-7-12 10:42:30 | 显示全部楼层
本帖最后由 小宝居然 于 2024-7-12 11:06 编辑
DX3906 发表于 2024-7-9 19:10
开两个任务,一个只接收,一个只转换字符串+发送,两个任务之间用一个大的环形缓冲区传递数据,接收到一定 ...

直接发原始数据,后续不太好数据分析,我需要生成csv文件进行数据分析
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2024-7-12 10:42:51 | 显示全部楼层
本帖最后由 小宝居然 于 2024-7-12 10:47 编辑
LinY 发表于 2024-7-10 08:57
搞个大环形缓冲,试试DMA半传输中断
另外尽量减少字符串转换

不转字符串不利于后续数据分析
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2024-7-12 10:45:33 | 显示全部楼层
LinY 发表于 2024-7-10 08:57
搞个大环形缓冲,试试DMA半传输中断
另外尽量减少字符串转换

DMA半传输中断感觉效果和双缓冲差不多
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-15 02:12 , Processed in 0.047029 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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