请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
楼主: QQ624***

结构体传输速率问题

[复制链接]
  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

    积分
    3843
    发表于 2023-1-16 11:11:49 | 显示全部楼层
    楼主用的是结构体, 我不知道楼主的结构体内容, 故用数组代替, 执行效率和结果相同.
  • TA的每日心情
    无聊
    昨天 06:03
  • 签到天数: 137 天

    [LV.7]常住居民III

    124

    主题

    177

    回帖

    1506

    积分

    金牌会员

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

    等我芯片回来我也测试下
  • TA的每日心情
    开心
    2024-1-4 08:56
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    16

    主题

    711

    回帖

    2508

    积分

    超级版主

    积分
    2508
    发表于 2023-1-16 12:07:06 | 显示全部楼层
    LAOXU 发表于 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的数据搬移时,有状态机的处理
    这也是需要时间的
  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

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

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

    至于你说的 Memory到Memory的数据搬移时,有状态机的处理, 这也是需要时间的, 而纯软件依靠指针间接寻址读取, 也是需要时间的, 处理数据短肯定 纯软件快, 现在的问题是, 数据长度已设定到 DMA充许传输的最大值了,这个时候 DMA传输效率应该是最高的了, 现在  DMA传输效率在最高时 PK 不过纯软件, 那在数据量少时, 和纯软件传输相比, 差据会拉的更大效率会更低.

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14080
    发表于 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
  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

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

    现在讨论的是 STC8H .

    STC32  DMA当然功能强劲, 缓冲区长达 64K
  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

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

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



    未命名2.JPG

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14080
    发表于 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

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14080
    发表于 2023-1-18 10:59:16 | 显示全部楼层
    如用 DMA支持 :
    4组串口同时工作,各自用 256字节的  idata 缓冲区;
    15 个 ADCn 通道轮流采样转换
    SPI
    ===这种场合就极大的减轻了 CPU 的压力,DMA 是简化程序设计
    ===减少了研发人员任务调度的压力,减少了 CPU 的压力
  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

    积分
    3843
    发表于 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, 2024-4-19 03:30 , Processed in 0.066796 second(s), 65 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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