[踩坑] dma传输时要注意cache

这篇具有很好参考价值的文章主要介绍了[踩坑] dma传输时要注意cache。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在使用atsama5d27这款mpu芯片编写裸机程序,用dma时第一次遇到cache这个坑,dma传输时记得调用clean和invalidate刷新一下啊!!!

简述一下cache是什么

        cpu的工作速度很快,甚至比读写ram中数据的速度还快。比如读取一个存储在DDR RAM芯片中的变量,耗时可以达到几十上百个cpu工作周期。为了减少ram读写比cpu慢太多导致的等待,便设计出了cache(高速缓存)机制。比如我正在使用的这个芯片,有L1(64k)和L2(128k)两级缓存,这是两块容量小,但读写速度很快的内存区域。

高速缓存cache与dma,踩坑,arm开发

        cpu想访问RAM中的哪个地址的数据,缓存控制器就会读取RAM,将对应地址的数据加载进缓存区,然后cpu就使用缓存区内的这份数据进行工作。当然,缓存区的大小有限,每次载入新数据都会挑一个使用率最低的数据写回到RAM。

高速缓存cache与dma,踩坑,arm开发

cache会导致dma传输数据出问题

         问题在于,L1L2缓存是特供cpu使用的,而DMA是绕过cpu和缓存直接操作RAM。

高速缓存cache与dma,踩坑,arm开发

        只有当缓存满了,又有新数据需要载入缓存,才会挑选一些不常用数据写回到RAM。

        便会出现下图这种场景,我的程序明明往buffer数组赋值了,但RAM中的数组并没有更新,导致串口一直发送无效数据。

高速缓存cache与dma,踩坑,arm开发

         只有当缓存内没有载入这个RAM地址的数据时,才会从RAM载入。

         便会出现下图这种场景,虽然DMA修改了RAM中的buffer数组,但因为buffer数组之前已经被载入缓存了,所以cpu的视角里buffer数组一直没有改变过。

高速缓存cache与dma,踩坑,arm开发

使用clean和invalidate解决问题

         clean和invalidate是两个对于cache的基础操作,一般厂商提供的函数库内都会有这个。

clean:将对应的数据清出缓存区,即把数据写回到RAM中

高速缓存cache与dma,踩坑,arm开发

         实际使用时,就是在dma传输前,调用clean函数将buffer数组的缓存清除,触发写回。就可以解决DMA发送时RAM中的buffer数组没更新的问题

高速缓存cache与dma,踩坑,arm开发

高速缓存cache与dma,踩坑,arm开发

invalidate:标记缓存中的数据为无效,cpu下次使用该数据时,就会从RAM中重新载入

高速缓存cache与dma,踩坑,arm开发

         实际使用时,在每次dma传输完成后,就要调用invalidate函数,将buffer数组标记为无效,这样程序再读取buffer数组,缓存就会重新载入RAM中的内容。

高速缓存cache与dma,踩坑,arm开发

高速缓存cache与dma,踩坑,arm开发文章来源地址https://www.toymoban.com/news/detail-769278.html

到了这里,关于[踩坑] dma传输时要注意cache的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Eclipse整合tomcat时要注意的几点

      1、安装目录及jdk 2、参数配置   注意:Arguments 的配置,日志输出文件目录及java 内存大小设置等,如下: -Dcatalina.base=\\\"E:apache-tomcat-7.0.52\\\" -Dcatalina.home=\\\"E:apache-tomcat-7.0.52\\\" -Dwtp.deploy=\\\"E:apache-tomcat-7.0.52webapps\\\" -Djava.endorsed.dirs=\\\"E:apache-tomcat-7.0.52endorsed\\\" -Djava.util.logging.config.fil

    2024年02月16日
    浏览(35)
  • zynq 使用AXI_dma 传输==pl到ps,linux驱动开发,应用层处理DMA数据

    在使用zynq输出处理时,会使用到pl和ps的数据传输,可供使用的方案有多种,由于我们的数据量较大打算,因此使用用以下两种方案处理: 1.使用pl直接写ddr3, 2.使用dma, 本次详细介绍使用axi_dma如何将pl的数据在linux应用层接收数据并处理,以及遇到的问题 fpga工程,我们使用

    2024年02月03日
    浏览(39)
  • AD9910模块高速DDS模块、功能性能讲解、开发调试注意事项、代码详解、电子设计大赛DDS

    AD9910是一款内置14 bit DAC的直接数字频率合成器(DDS),支持高达1GSPS的采样速率。AD9910采用高级DDS技术,在不牺牲性能的前提下可极大降低功耗。DDS/DAC组合构成数字可编程的高频模拟输出频率合成器,能够在高达400MHz的频率下生成频率捷变正弦波形。 用户可以访同三个用于控制

    2024年02月16日
    浏览(29)
  • Collectors.groupingBy()进行分组时,分组值存在null值会报NPE(空指针)错误,使用时要注意

    1、使用Collectors.groupingBy()进行分组时,分组值存在null值。 解决办法:分组值为null时,默认值为空字符。

    2024年02月14日
    浏览(33)
  • STM32F429 Discovery开发板应用:使用FreeRTOS队列+DMA双缓存实现串口数据接收

      参考帖子:https://blog.csdn.net/freedompoi/article/details/122350866 目前想要实现STM32F4自带的DMA双缓冲区,尝试过一版,结果不能预期,就使用了RxHalfCplt和RxCplt去实现DMA双缓冲区的效果。 现在有时间了,又重新实现STM32F4自带的DMA双缓冲区,作为参考。   MCU:STM32F429ZIT6 开发环境:

    2024年02月08日
    浏览(38)
  • 【计算机组成原理】高速缓冲存储器 Cache 的三种映射方式(Cache Mapping)

    缓存是计算机系统中常见的一种高速存储器,用于临时存储常用数据,以便快速访问。在缓存中,有三种常见的映射方式,分别是直接映射、全相联映射和组相联映射。 在直接映射中,每个主存块只能映射到缓存中的一个特定位置。该位置是通过对主存块的某个地址的一部分

    2024年01月19日
    浏览(37)
  • STM32使用DMA实现GPIO的高速翻转

    接着上一篇博客的内容,上一篇博客实现了定时器输出pwm,这次我们使用DMA来驱动gpio高速翻转,来探索一下stm32h750的gpio翻转极限 这里大家可能有点疑惑,为什么要用dma来控制gpio 使用DMA的原因有两点: 第一点就是资源消耗问题,我的项目中有个数组,该数组有13240个元素,

    2024年02月03日
    浏览(31)
  • ZYNQ AXI-DMA Linux Cache 一致

    平台为 ZYNQ MPSOC 项目使用到AXI-DMA ,ADC模块传输数据到DDR,应用层进行数据的读取。在此做些记录 用到了AXI-Stream , IP核用的 米联客的ui_axisbufw,可以把流数据转为AXI-Stream 接口 比较重要的参考链接 1.UltraScale+MPSoC+Cache+Coherency https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842098/Zynq+

    2024年02月03日
    浏览(31)
  • 【计算机组成原理】高速缓冲存储器 Cache 的写策略(Writing Policy)

    缓存的写策略指的是确定何时将数据写入缓存或主存的策略。 在全写法策略中,每次发生写操作时都会将数据同时写入缓存和主存。这样可以保证数据的一致性,但会增加主存的写入操作,降低写入性能。需要设置写缓存(Write Buffer)。 在写回策略中,当缓存中的数据发生

    2024年02月02日
    浏览(39)
  • 高速相机传输带宽分析与随笔

    目前,高速相机的传输瓶颈,受限于传输的带宽。 这里的高速相机指的是大面阵(2048*2048@1000fps)的应用场景。 目前符合条件的CMOS比较少,长光辰芯的4510和4521是符合的。 高速相机从CMOS读取数据,到FPGA进行处理,通过高速收发器GT系列,进行大数据量的传输,最后通过传输

    2024年02月12日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包