关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

这篇具有很好参考价值的文章主要介绍了关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AURIX的芯片手册:

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

内存

内存在电脑中起着举足轻重的作用。内存一般采用半导体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)

RAM作为主存的主要部分,按其结构分为:

动态随机存取存储器 (Dynamic Random Access Memory,DRAM), 同步动态随机存取内存(synchronous dynamic random-access memory,简称SDRAM), 静态随机存取存储器(Static Random-Access Memory,SRAM)。

可以理解为FLASH是一个静态的存储【也就是只读存储器(ROM)】,可以用来存储函数或者常量,也就是定义的这部分烧录到芯片里,执行内容不会有改变。即便掉电,里面的数据也不会丢失

RAM是一个动态的存储,可以读数据,也可以写数据。RAM可以在运行过程中,可以当flash用。但是如果掉电,RAM里的数据不会保存,一旦掉电,数据就全没了

举例:一个手机里存着我们很多的数据,如果手机关机,这些数据或者图片是存放在FLASH里的,因为FLASH是存放静态数据的,而当手机重新上电的时候,flash里的数据会通过指令传输到RAM里,之后在被系统里的函数调用,从而开机后,手机可以看到关机前的数据。

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

缓存: 

万字整理内存管理之Cache

高速缓冲存储器(Cache),是位于CPU与主内存间的一种容量较小但速度很高的存储器:

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

由于CPU的速度远高于主内存,CPU直接从内存【(RAM)、(ROM)】中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率

缓存需要把内存里的数据放进来。Cache 的数据放置的策略决定了内存中的数据块会拷贝到 CPU Cache 中的哪个位置上,因为 Cache 的大小远远小于内存,所以,需要有一种地址关联的算法,能够让内存中的数据可以被映射到 Cache 中来。这个有点像内存地址从逻辑地址向物理地址映射的方法,但不完全一样。

缓存的命中:

根据要寻址的地址的tag来逐一与cache中的tag字段比较,如果有与之匹配的cache line,也就是cache hit,如果遍历整个cache,也没有找到匹配的cache line,那就是cache miss了。

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

Cache的层次设计

Cache设计采用了指令 Cache(简称I-Cache)和数据Cache (简称D-Cache) 分开的方式。

  1.  I-Cache中存储有微处理器需要的指令,在微处理器的取指阶段,通过程序计数器PC提供给I-Cache的地址,微处理器可以获取需要的指令。
  2. 而D-Cache则是作为一个数据的存储,并提供对于Load/Store指令所要操作地址的数据,它地址则来自于ALU运算的结果。

I-Cache和微处理器的接口以及I-Cache和L2 I-Cache的接口都是单向的D-Cache和微处理器的接口以及D-Cache和L2 Cache的接口是双向的。这样处理的原因在于I-Cache存储的是指令,不需要更改所存储的数据的值。而D-Cache 中存储的是数据,其值会根据指令操作的不同而改变。比如:在运行 Store 指令的时候会对 D-Cache 中相应地址进行写入数据的操作。

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

AURIX中的Cache

在AURIX中,CPU分为Cache和Non-Cache,CPU0的PFlash访问方式如下图:

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

Cache使能的方式是配置下面这个寄存器:

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

(1)使能Cache以后,每个CPU各有一段PCache/DCache区域,以便于提前缓存指令和数据(例如访问8和9的 Segment,这是打开了P-Cache后,P-FlashLMU对应的地址)。

当CPUx取指令时,会先去PCache空间查找指令,如果在PCache中查找到对应的指令,即:Cache Hit,则不必再去Physical Area搬运对应的数据,提高了指令读取的效率。如果没有找到对应的指令,即:Cache Miss,再去Physical Area搬运对应的数据到PCache空间(Program Cache refills),而搬运的过程需要额外的等待时间,等效于Non-Cached方式,指令读取时间延长;同理,当CPU取数据时,会先去DCache空间查找数据,如果在DCache中命中数据,则直接读取,如果没有命中,再去Physical Area搬运。

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

(2)对于Non-Cache方式读取指令和数据(例如访问1011的 Segment,这是关闭了P-Cache后,P-FlashLMU对应的地址),CPU需要直接访问Physical Area,而访问Physical Area区域所消耗的时间远比访问PCache/DCache区域慢的多。

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

P-Cache(P-Cache就是I-Cache)与D-Cache的区别:

P-Cache的作用是缓存指令,D-Cache是缓存数据。指令一般不会被修改,所以P-Cache在硬件设计上是可以是只读的,这在一定程度上降低硬件设计的成本。D-Cache则是作为一个数据的存储,并提供对于Load/Store指令所要操作地址的数据,它地址则来自于ALU运算的结果。

在C语言中,内存主要分为5个区,分别为栈区、堆区、全局/静态存储区、常量存储区、代码区。其中代码区存放源程序的二进制代码,其余四个区都存储进程运行过程中需要的存储的变量。

一般,指令(P-Cache或者PSPR的内容)是放在代码区或者常量区,而数据(D-CacheDSPR的内容)放在全局(静态)区。

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

举例:

我定义一个函数:

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

观察他的map文件里的地址:.o是他所属的C文件,下面是函数所属的地址。同样的我定义一个未初始化的全局变量,也可以找到他的地址。

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

我定义一个全局变量:

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

他的map文件里的地址:.o是他所属的文件,下面是函数所属的地址。同样的我定义一个.bss或.data的全局变量,也可以找到他的地址。

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

linker file用来定义数据和代码具体存放在哪一块。比如它会规定存储在Flash的启动函数_START()的存储地址和BootROM里面reset vector内预设的地址匹配,这样复位以后就总会从启动函数_START()开始执行

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

如何在代码里将函数、变量、常量等由一个地址移到另一块地址:

举例:我想将代码里的函数从原来P-Cache的地址移到PSPR这个地址。要如何处理。原来P-Cache访问P-flash,现在改成PSPR访问P-flash

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

我在TASKING的.lsl文件中添加一个规则,这个规则的意思就是将代码中含有 PSPR_CORE2_CPULoad_Optimize 这个关键词的函数放到PSPR的地址里面

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

代码中添加的内容是:

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

函数地址的变化:由801ea848变成50100004

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)

上面是将某个函数换地址,也可以用上面的方式将整个文件的函数换地址,除此之外,还可以如下图将划线的内容改成CDD_SDH*,这样也可以将整个C文件的函数换个地址:

关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)文章来源地址https://www.toymoban.com/news/detail-470274.html

到了这里,关于关于Aurix的内存,缓存Cache,PSPR等的理解-(持续更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【linux】关于内存free转换到buffer/cache之后,内存被用完的解决思路

    最近跑程序,发现linux在执行大量读写操作后,内存的可用(free)会不断被buffer/cache所占据,导致内存空间被用完,一直以为是代码哪里写的问题,导致内存泄露,后来发现就是发生了I/O读写操作后,会产生buffer/cache,需要定时释放。 这个情况也是第一次遇到,不知道如何解

    2024年02月14日
    浏览(44)
  • 关于js的内存管理和垃圾回收机制的理解

    js的内存管理: 内存管理,顾名思义,js在创建变量时,会在内存中分配空间,来储存新增的变量,其中有两种方式, 1:基本类型,系统会在内存中分配实实在在的内存空间,来存放新增的变量,存储的数据结构为栈 2:引用类型,函数,对象等,系统也会在内存中分配空间

    2024年02月11日
    浏览(43)
  • 英飞凌AURIX 2G 系列MCU关于外设模块MCMCAN的实现原理及对应MCAL(EB Tresos)配置项详细讲解

    目录 一、版本控制 二、功能概述 三、主要模块及涉及EB配置项 (一)通用时钟方案与控制 (二)波特率产生与位定时 (三)轮询与中断 (四)Port输入输出接口 (五)CAN FD实现 控制器延迟补偿 (六)报文接收处理 Acceptance Filtering Rx FIFO 0 and 1 Dedicated Rx Buffers (七)报文发

    2024年02月03日
    浏览(41)
  • 英飞凌AURIX 2G 系列MCU关于外设模块EVADC的实现原理及对应MCAL(EB Tresos)配置项详细讲解

    目录 一、版本控制 二、功能概述 三、主要模块及涉及EB配置项 (一)通用时钟方案与控制 (二)内部相关模拟模块的激活与控制 1.模数转换器控制 2.模拟信号缓冲 3.校准 4.降噪方法 5.Alias功能 (三)转换请求产生 (四)请求源仲裁 (五)快速比较通道操作 (六)转换时间

    2024年02月07日
    浏览(55)
  • Spring Cache框架(缓存)

    1、介绍: Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单加个注解,就能实现缓存功能。它提供了一层抽象,底层可以切换不同的cache实现。具体就是通过 CacheManager 接口来实现不同的缓存技术。 针对不同的混存技术需要实现不同的 CacheManage r: CacheManager 描述

    2024年02月11日
    浏览(58)
  • SpringBoot Cache缓存

    application.properties配置文件 ehcache.xml配置文件 name:cache的名字,必须惟一。 eternal:是否持久化,若为true,则表示缓存元素不会过期。 maxElementsInMemory:cache中最多可以存放的元素的数量。 overflowToDisk:溢出是否写入磁盘。 diskPersistent:是否持久化磁盘缓存。 timeToIdleSeconds:访

    2024年01月18日
    浏览(45)
  • Buffer(缓冲)、Cache(缓存)

    Buffer 用途:缓冲通常用于临时存储数据,以平衡不同速度的数据传输过程直接的差异。它可以用来解决数据传输速度不匹配的问题。 例如: 当您在观看视频时,视频播放器会缓冲一段时间的视频数据,以便在网络速度慢或不稳定的情况下也能够流畅的播放 用完之后,就清除

    2024年02月03日
    浏览(47)
  • 【springboot】Spring Cache缓存:

    一、导入Maven依赖: 二、实现思路: 三、代码开发:

    2024年02月11日
    浏览(44)
  • 简述Spring Cache缓存策略

    Spring框架提供了一种名为Spring Cache的缓存策略。Spring Cache是一种抽象层,它提供了一种方便的方式来管理缓存,并与Spring应用程序中的各种缓存实现(如EhCache、Guava、Caffeine等)集成。 Spring Cache使用注解(如@Cacheable、@CachePut、@CacheEvict等)来描述与缓存相关的操作。这些注解

    2024年02月10日
    浏览(49)
  • Docker Build Cache 缓存清理

    Docker 18.09 引入了 BuildKit ,提升了构建过程的性能、安全、存储管理等能力。 docker system df 命令,类似于 Linux上的 df 命令,用于查看 Docker 的磁盘使用情况: TYPE 列出了 Docker 使用磁盘的 4 种类型: 类型 说明 Images 所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。

    2024年01月17日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包