nios 使用地址中31bit来表示访问是否bypass cache。
如果bit 31=0 表示不bypass cache,即使用cache里的数据;如果bit 31=1表示bypass cache,即直接使用mem中的数据。
如alt_remap_uncached函数

 #ifdef NIOS2_MMU_PRESENT
/* Convert KERNEL region address to IO region address */
#define BYPASS_DCACHE_MASK (0x1 << 29)
#else
/* Set bit 31 of address to bypass D-cache */
#define BYPASS_DCACHE_MASK (0x1 << 31)
#endif /*
* Convert a pointer to a block of cached memory, into a block of
* uncached memory.
*/ volatile void* alt_remap_uncached (void* ptr, alt_u32 len)
{
alt_dcache_flush (ptr, len);
return (volatile void*) (((alt_u32) ptr) | BYPASS_DCACHE_MASK);
}

其中

 #ifdef NIOS2_FLUSHDA_SUPPORTED
#define ALT_FLUSH_DATA(i) __asm__ volatile ("flushda (%0)" :: "r" (i));
#else
#define ALT_FLUSH_DATA(i) __asm__ volatile ("flushd (%0)" :: "r" (i));
#endif /* NIOS2_FLUSHDA_SUPPORTED */ /*
* alt_dcache_flush() is called to flush the data cache for a memory
* region of length "len" bytes, starting at address "start".
*
* Any dirty lines in the data cache are written back to memory.
*/ void alt_dcache_flush (void* start, alt_u32 len)
{
#if NIOS2_DCACHE_SIZE > 0 char* i;
char* end; /*
* This is the most we would ever need to flush.
*
* SPR 196942, 2006.01.13: The cache flush loop below will use the
* 'flushda' instruction if its available; in that case each line
* must be flushed individually, and thus 'len' cannot be trimmed.
*/
#ifndef NIOS2_FLUSHDA_SUPPORTED
if (len > NIOS2_DCACHE_SIZE)
{
len = NIOS2_DCACHE_SIZE;
}
#endif end = ((char*) start) + len; for (i = start; i < end; i+= NIOS2_DCACHE_LINE_SIZE)
{
ALT_FLUSH_DATA(i);
} /*
* For an unaligned flush request, we've got one more line left.
* Note that this is dependent on NIOS2_DCACHE_LINE_SIZE to be a
* multiple of 2 (which it always is).
*/ if (((alt_u32) start) & (NIOS2_DCACHE_LINE_SIZE - ))
{
ALT_FLUSH_DATA(i);
} #endif /* NIOS2_DCACHE_SIZE > 0 */
}

Nios II 中的缓存和内存数据的读写的更多相关文章

  1. 大话Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁

    大话Linux内核中锁机制之内存屏障.读写自旋锁及顺序锁 在上一篇博文中笔者讨论了关于原子操作和自旋锁的相关内容,本篇博文将继续锁机制的讨论,包括内存屏障.读写自旋锁以及顺序锁的相关内容.下面首先讨论 ...

  2. 基于Python项目的Redis缓存消耗内存数据简单分析(附详细操作步骤)

    目录 1 准备工作 2 具体实施   1 准备工作 什么是Redis? Redis:一个高性能的key-value数据库.支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使 ...

  3. NIOS II 中直接调用Modelsim仿真

    STEP1:创建一个工程,实现并编译该工程,编写TestBench文件. STEP2:设置启动Modelsim的路径 选择Nios II菜单Tools->Options..,在弹出的界面中,选择 ...

  4. Django中的缓存(内存,文件,redis)

    一.Django中的缓存的几种方法 1)单个视图缓存.时间测试 import time from django.views.decorators.cache import cache_page @ca ...

  5. Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁

    在上一篇博文中笔者讨论了关于原子操作和自旋锁的相关内容,本篇博文将继续锁机制的讨论,包括内存屏障.读写自旋锁以及顺序锁的相关内容.下面首先讨论内存屏障的相关内容. 三.内存屏障 不知读者是是否记得在笔 ...

  6. android 中使用缓存加载数据

    最近app快完工了,但是很多列表加载,新闻咨询等数据一直从网络请求,速度很慢,影响用户体验,所以寻思用缓存来加载一些更新要求不太高的数据 废话不多说,上代码 欢迎转载,但请保留文章原始出处:)  博客 ...

  7. 关于uboot中tftp上传内存数据到tftp服务器

    uboot下的tftp下载功能是非常重要和常见的功能.但是偶尔有些特殊需求的人需要使用uboot的tftp具有上传功能.默认的uboot没有tftp上传功能,如果需要修改uboot代码.使用时键入第4 ...

  8. abp中文件下载,将内存数据导出到Excel并下载

    1.数据导出为Excel的Stream using System; using System.Collections.Generic; using System.IO; using Abp.Colle ...

  9. JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder

    JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringB ...

随机推荐

  1. 「日常训练」 Soldier and Number Game (CFR304D2D)

    题意 (Codeforces 546D) 给定一个数x=a!b!" role="presentation">x=a!b!x=a!b!的形式,问其中有几个质因数. 分 ...

  2. 杀死 tomcat 进程的脚本

    新建一个.sh 文件 把下面的内容复制进去.然后 把这个文件放到tomcat 的bin目录下在关闭tomcat 执行这个脚本. 可以解决 在关闭tomcat的时候 总是遗留一些tomcat进程没有结束 ...

  3. 剑指offer-反转链表15

    题目描述 输入一个链表,反转链表后,输出新链表的表头. class Solution: # 返回ListNode def ReverseList(self, pHead): # write code ...

  4. 搭建高可用的Eureka注册中心

    搭建高可用的Eureka注册中心 一.搭建高可用的Eureka的作用 当服务器因种种原因导致Eureka注册中心(后面简称Eureka)服务当机(服务器跪了,异常关闭停止服务).这样就会影响到整个业务 ...

  5. AM5728通过GPMC接口与FPGA高速数据通信实现

    硬件:AM5728开发板:Artix-7开发板软件:Linux am57xx-evm 4.4.19:Vivado 2015.2作者:杭州矢志信息科技有限公司邮箱:admin@sysjoint.com ...

  6. 软件工程项目组Z.XML会议记录 2013/11/27

    软件工程项目组Z.XML会议记录 [例会时间]2013年11月27日星期三21:00-22:00 [例会形式]小组讨论 [例会地点]学生公寓3号楼会客厅 [例会主持]罗凡 [会议记录]罗凡 会议整体流 ...

  7. ajax中用jsonp接收json数据

    最近在做查快递网页时遇到一个问题,调用的快递100的api,但是快递100api不允许跨域请求,就是用127.0.0.1发的请求会直接被拦截. 只是个简单的网页,不想自己做服务器转发,最后找到了一个y ...

  8. Python调用MySQL的一些用法小结

    目标:1个excel表内容导入到数据库中,例如:原始excel文件为 aaa.xls 首先:将aaa.xls 转换成aaa.txt ,注意当文件中含有中文字符时,可以通过notepad++打开,在“格 ...

  9. Mac上基于hexo+GitHub搭建个人博客(一)

    原文地址: http://fanjiajia.cn/2018/11/23/Mac%E4%B8%8A%E5%9F%BA%E4%BA%8Ehexo+GitHub%E6%90%AD%E5%BB%BA%E4% ...

  10. js调用本地office打开服务器的office文件预览

    本来是想做成直接在网页上在线预览office文件的,但是找了好多,要不是收费,要不就是要调用别人的API不安全,所以纠结了好久还是用调用本地的office预览office文件. 废话不多说,那么怎么调 ...