找回密码
 立即注册
楼主: QQ624353765

结构体传输速率问题

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-1-16 11:11:49 | 显示全部楼层
楼主用的是结构体, 我不知道楼主的结构体内容, 故用数组代替, 执行效率和结果相同.
  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-06-10 13:10:51
已绑定手机

236

主题

340

回帖

1650

积分

金牌会员

积分
1650
发表于 2023-1-16 11:17:42 | 显示全部楼层
LAO*** 发表于 2023-1-16 11:07
用 STC8H 芯片仿真, 数据处理 用 DMA传输 和 纯软件模拟传输 两种方法, 然后计时, 对比执行时间, 得出传 ...

等我芯片回来我也测试下
  • 打卡等级:常住居民I
  • 打卡总天数:66
  • 最近打卡:2025-06-29 22:35:00

26

主题

1052

回帖

4038

积分

超级版主

积分
4038
发表于 2023-1-16 12:07:06 | 显示全部楼层
LAO*** 发表于 2023-1-15 22:22
DMA 的传输速度, 竟然干不过纯软件.

想不到啊......

对于您的测试结果,其实一点都不意外


首先,DMA(Direct Memory Access直接存储器访问,即存储器读写不需要CPU的参与,DMA过程中可以释放CPU处理其它紧急事件
这才是DMA存在的意义,而不是说DMA就一定会更快


其次,对于Memory到Memory的DMA操作与直接软件读写操作相比,在速度上DMA确实没有什么优势
STC32G系列对于EDATA是1T读写速度,对于XDATA是2T写3T读的速度,这个速度本身就就非常快了

而DMA虽然是存储器直接访问,但需要进行XRAM总线仲裁,也就是当CPU在访问XDATA时,DMA操作需要等待
而您的测试代码中,由于采用的查询方式,导致DMA进行读写的过程中,CPU一直在和DMA硬件抢总线
1.png
如果您将这里代码改为中断方式,我估计硬件DMA的数据传输时间应该会减少一些

最后还有一点,硬件DMA的设计电路中,在进行Memory到Memory的数据搬移时,有状态机的处理
这也是需要时间的
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-1-16 13:03:08 | 显示全部楼层
zh*** 发表于 2023-1-16 12:07
对于您的测试结果,其实一点都不意外

好的, 我改为中断方式再试试,

至于你说的 Memory到Memory的数据搬移时,有状态机的处理, 这也是需要时间的, 而纯软件依靠指针间接寻址读取, 也是需要时间的, 处理数据短肯定 纯软件快, 现在的问题是, 数据长度已设定到 DMA充许传输的最大值了,这个时候 DMA传输效率应该是最高的了, 现在  DMA传输效率在最高时 PK 不过纯软件, 那在数据量少时, 和纯软件传输相比, 差据会拉的更大效率会更低.
  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

积分
17207
发表于 2023-1-16 14:08:35 | 显示全部楼层
DMA 是 让 CPU 干其他重要的事,能 DMA干的,CPU 就暂时退出干其他事,减轻 CPU的压力;
STC32G的 DMA缓冲区是 XDATA, CPU 尽量用 EDATA, 这样效率最高;
当几个外设同时用DMA, 会出现DMA缓冲区/XDATA使用竞争,就要进行 DMA缓冲区-XDATA谁先用的硬件自动仲裁;
===仲裁就会有时间的浪费,这是合理的时间!CPU使用edata, CPU 还可以全速运行

CPU也来用DMA缓冲区/XDATA, 就会增加 DMA硬件自动仲裁的压力
当然 edata 不够用时,你也只能不够的部分用xdata
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-1-16 15:11:32 | 显示全部楼层
神*** 发表于 2023-1-16 14:08
DMA 是 让 CPU 干其他重要的事,能 DMA干的,CPU 就暂时退出干其他事,减轻 CPU的压力;
STC32G的 DMA缓冲区 ...

现在讨论的是 STC8H .

STC32  DMA当然功能强劲, 缓冲区长达 64K
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-1-18 10:37:20 | 显示全部楼层
zh*** 发表于 2023-1-16 12:07
对于您的测试结果,其实一点都不意外

DMA传输, 改为中断方式, 测试了, 速度提升一点点, 不明显.



未命名2.JPG
  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

积分
17207
发表于 2023-1-18 10:55:02 | 显示全部楼层
DMA 是 让 CPU 干其他重要的事,能 DMA干的,CPU 就暂时退出干其他事,减轻 CPU的压力;
STC8H8K64U 的 DMA缓冲区是 xdata, CPU 尽量用 idata, 这样效率最高;
当几个外设同时用DMA, 会出现DMA缓冲区/xdata使用竞争,就要进行 DMA缓冲区-xdata谁先用的硬件自动仲裁;
===仲裁就会有时间的浪费,这是合理的时间!CPU使用idata, CPU 还可以全速运行

CPU也来用DMA缓冲区/XDATA, 就会增加 DMA硬件自动仲裁的压力
当然 idata 不够用时,你也只能不够的部分用xdata
  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

积分
17207
发表于 2023-1-18 10:59:16 | 显示全部楼层
如用 DMA支持 :
4组串口同时工作,各自用 256字节的  idata 缓冲区;
15 个 ADCn 通道轮流采样转换
SPI
===这种场合就极大的减轻了 CPU 的压力,DMA 是简化程序设计
===减少了研发人员任务调度的压力,减少了 CPU 的压力
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-1-20 06:29:32 | 显示全部楼层
总结:

1. 由楼主贴出的 C?COPY 反汇编代码可看出, 楼主用的是 STC8H系列

2. 按照楼主的思路, 用 DMA 和 纯软件 方式, 分别 测试了 数据交换 和 数据移动, 这两项功能.  数据长度为 DMA传输充许的最大值 256字节, 这时 DMA的 传输效率应该是最高的.

3. DMA传输, 分别测试了 查询方式 和 中断方式, 结论是 执行时间影响不大, 即 DMA执行, 不占用CPU的正常程序运行时间.

4. DMA进行读写的过程中,和CPU执行程序, 几乎没什么交叉干扰, 可通俗理解为 DMA传输, 是一个专门用于读写传输XRAM内存的专用CPU内核,

   即 2核 CPU, 一个 通用CPU主核 用于一切操作, 另一个 专用CPU核 仅限于数据搬家传输. 用于在实时性要求不高的情况下, 减轻 通用CPU主核 的 工作负担.

5. 对实时性要求高的, 个人建议还是以纯软件 方式为佳, 时间容易精确控制.

   例如1, 需通过 ADC定时采样 N个点, 以便通过 FFT计算各种输入数据, 如 ADC无定时采样功能, 只能通过外界干扰采样时间, 以取得精确的时间间隔, 这时 DMA基本没用.

   例如2, HMI刷屏, 通常对速度无要求的, 以 DMA刷屏为佳, 但想获得更好的动态动画效果, 个人觉得还是以纯软件 方式为佳, 这时刷屏速度更快反应更灵敏, DMA速度上做不到.


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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-30 00:30 , Processed in 0.124721 second(s), 94 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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