【转载】ZYNQ Cache问题的解决方法
Zynq Cache问题的解决方法 - Kevin_HeYongyuan - 博客园
https://www.cnblogs.com/kevin-heyongyuan/articles/7738552.html
在进行PS-PL之间的DMA传输时,不可避免会遇到Cache问题。今天在这里讲一下Cache的解决方法。其中参考了forums.xilinx.com的处理方法。
首先解释为什么DMA会引入Cache问题(专业名称为Cache一致性问题)。
PS和PL都在独立运行,PS通过DDR控制器来对DDR存储器进行访问,为了加速,常常将一些数据缓存(Cache),而且不是针对一个数据缓存,而是针对一批(Xilinx称为一行,即Line,一行长度为32)。这样好处很明显,下一次访问速度会加快;但坏处也很明显,就是Cache里的数据如果发生了改变,不能迅速反映到DDR2实际数据中,反之亦然。因此,当PL通过DMA修改了DDR2数据时,CPU可能还不知道发生了些什么,拿到的数据仍然是Cache中的没有改过的数据。
在裸机开发时,规避Cache最简单的方法就是禁用Cache。
#include "xil_cache.h"
void Xil_DCacheDisable(void);
这样操作后,CPU将直接访问DDR内存,读写都是直接的。这样显然会降低CPU性能,但简化了数据传输操作,属于极端的方法。
另外一种操作要多加一道手续,在我的文章【参赛手记】详细介绍AXI-HP接口+DMA+GIC编程中,给出的例程里有Cache Flush和Cache Invalidate操作。从字面理解,Flush就是把Cache里的数据流放出去,清空Cache,也就是将Cache的内容推到DDR中去;而Cache Invalidate表示当场宣布Cache里的内容无效,需要从DDR中重新加载,即把数据从DDR中拉到Cache中来。
理解了这个原理,在编程的时候心里就非常有底气了!
#include "xil_cache.h"
//写点什么到发送缓冲区sendram
Xil_DCacheFlushRange((u32)sendram,sizeofbuffer);//将内容刷新至DDR
//启动发送DMA过程。。。。
//启动接收DMA过程。。。。。
Xil_DCacheInvalidateRange((u32)recvram,sizeofbuffer);//将DDR内容拉进Cache
//从recvram中读取数据吧!
好了,裸机工程下面开发是非常简单的,出错了也容易定位,调试起来方便。在Linux下开发时,由于编写的接口模块处于驱动层面,调试可能不如SDK中那么直观,只能关键部位打印printk,然后慢慢去寻找错误,定位比较麻烦。
在Linux下,Cache的Flush和Invalidate操作需要调用内核函数 dma_sync_single_for_device和 dma_sync_single_for_cpu。
这两个函数包含时可以这样:
#include
其代码可以在内核源码的/arch/arm/include/asm中看到。
同样,在驱动程序中,涉及到DMA操作时,也需要在DMA写之前先Flush,DMA读之后Invalidate操作。
其参数为:第一个参数是device结构体,第二个参数为DMA的实际地址,需要通过虚拟地址到实际地址的映射才能实现(这是Linux的本身特点),第三个参数为方向,可以选择DMA_TO_DEVICE或 DMA_FROM_DEVICE(需要包含头文件#include )。
【转载】ZYNQ Cache问题的解决方法的更多相关文章
- [转载]ORA-01502错误成因和解决方法
检查一下索引状态,我们会注意到索引已经是“UNUSABLE”了.SQL> select index_name,index_type,tablespace_name,table_type,stat ...
- 转载-MAC Mysql中文乱码解决方法
相关链接: http://www.siguoya.name/pc/home/article/235 如有,有问题可以留言.
- Windows Server 2008 网站访问PHP响应慢的解决方法
公司新上了一个网站,但是在配置完PHP环境之后却发现了问题,访问HTML速度飞快,而访问PHP网页时就要卡顿1秒,响应很慢的样子,排除了带宽的因素之后,在百度上搜了一圈竟然解决了,现在将方法转载给大家 ...
- 解压报错gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now的解决方法
在部署tomcat的环境搞JDK的时候出现这个问题.分享一下. 解压命令:tar -zvxf memcached-1.4.34.tar.gz 遇到了一个问题, gzip: stdin: not in ...
- Windows Server 2008 R2网站访问PHP响应慢的解决方法
最近换了台新服务器,由于内存是8G的,所以就换了Windows Server 2008 R2 这款系统,虽然有点陌生,但是熟悉了一下感觉性能非常好,但是在配置完PHP环境之后却发现了问题,访问HTML ...
- Spark面对OOM问题的解决方法及优化总结 (转载)
转载地址: http://blog.csdn.net/yhb315279058/article/details/51035631 Spark中的OOM问题不外乎以下两种情况 map执行中内存溢 ...
- Gradle's dependency cache may be corrupt解决方法
问题描述: Error:Unable to find method 'com.google.common.cache.CacheBuilder.build(Lcom/google/common/cac ...
- [转载] Can't create table './store/#sql-b2c_1a.frm' (errno: 150)和sql execution error #1452添加外键时错误解决方法
Can't create table './store/#sql-b2c_1a.frm' (errno: 150)解决方法 错误原因有四: 1.外键的引用类型不一样,主键是int外键是char 2.找 ...
- 【转载】错误:ORA-28002: the password will expire within 7 days 解决方法
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:xwdreamer 原文地址: 错误:ORA-28002: the ...
随机推荐
- ES6 Set和Map集合(六)
一.Set集合创建Set实例:let set = new Set();1.特性:a.Set本身是一个构造函数,用来生成Set数据结构[类比数组结构]b.Set函数可以接受具有Iterable接口的数据 ...
- (原)堆叠hourglass网络
转载请注明出处: https://www.cnblogs.com/darkknightzh/p/11486185.html 论文: https://arxiv.org/abs/1603.06937 官 ...
- Python基础(一)--变量、注释、文件头
一.变量 1.什么是变量 变量是变化的量,用来保存程序执行的状态以及状态的变化 2.变量定义规范 #1. 变量名只能是:字母.数字或下划线的任意组合 #2. 变量名的第一个字符不能是数字 #3. 关键 ...
- 【Spring Cloud】Spring Cloud之自定义@SpringCloudProfile注解实现@Profile注解的功能
一.为什么会想到定义@SpringCloudProfile这样的注解 首页提一下@Profile注解:它主要用与Spring Boot多环境配置中,指定某个类只在指定环境中生效,比如swagger的配 ...
- CentOS6.7编译安装mysql5.5(详解编译选项)
注意! mysql5.5之前一般都是用make编译 mysql5.5 -5.6 一般都是用cmake编译 cmake : 跨平台编译器, mysql官方提供的rpm包 mysql-client :提 ...
- AAC的RTP封装中的AU头分析
解码器收到一个RTP的AAC流,发现RTP流里的音频里带有4个字节AU头,然后才是AAC的ADTS头. 这种情况之前已经出现过多次,每次我们都告知对方,不要往AAC前面加AU头,解码器不支 ...
- Java多线程编程核心技术-第1章-Java多线程技能-读书笔记
第 1 章 Java 多线程技能 本章主要内容 线程的启动 如何使线程暂停 如何使线程停止 线程的优先级 线程安全相关的问题 1.1 进程和多线程的概念及线程的优点 进程是操作系统结构的基础:是一次程 ...
- 《MySQL性能优化篇》阅读笔记
建表的时候,不要用null赋默认值,如:字符串的设置'',数据类型的设为0,不要将null设为默认值. 在MySQL中没有 full [outer] join,用union代替 各种 JOIN SQL ...
- 小学四则运算口算练习app---No.3
今天主要是实现按照指定的题目出题数目出题.在昨天设置页面的基础上,今天首先要学习的是接收不同页面间的参数问题.详解如下: 然后就开始我的传参和接收参数的问题! 在当前的Activity上进行跳转, 代 ...
- epoll及实现http多任务(python)
1.epoll用到了文件描述符的概念: 首先,操作系统中一切皆文件 文件与文件描述符fd 文件是应用程序与系统(包括特定硬件设备)之间的桥梁,而文件描述符就是应用程序使用这个"桥梁" ...