本节内容主要讲述CortexR52内核Cache的具体操作包括使缓存无效(invalidate)操作,清除(clean)缓存。有的时候客户可能需要对cache做一些清理,比如invalidate,clean等操作。虽然目前在cortex R52内核很少需要操作cache,但是本节依然给一些操作指导和实践,以备以后不时之须。
Cache Line缓存行的概念
操作cache相关指令需要通过汇编代码来操作,也都是以缓存行(Cache Line)为单位来进行操作。CortexR52缓存行的长度是64字节,比如下面的invalidate指令:

点击可查看大图
指令的解释如下:

点击可查看大图
1__asm volatile
这表示这是一段内联汇编代码,并且使用volatile关键字告诉编译器不要对这段代码做优化。
2"mcr p15, #0, %[bsc_sdram_cs3_mirror_space], c7, c6, #1 "
这是ARM处理器的指令。mcr是一个协处理器数据操作指令,用于向协处理器(如CP15)中的特定寄存器写入数据。在这里,它将数据写入到CP15寄存器中。p15, #0: 指定了协处理器的编号,这里表示CP15。
3%[bsc_sdram_cs3_mirror_space] "r" (n)
这里使用了内联汇编中的替换字符串(substitution strings),%[bsc_sdram_cs3_mirror_space] 用于指定一个替换占位符,它将在后面的 :: 部分中提供实际的值。"r" (n) 则表示使用寄存器(register)约束,这意味着n是一个变量。通常情况下,使用 "i" 约束表示将一个立即数直接嵌入到汇编指令中,而不是从变量中加载。但在你的代码中,你想要从一个变量中加载一个值传递给汇编指令。因此,你应该使用 "r" 约束来表示将一个寄存器中的值传递给汇编指令,而不是使用 "i"。
4:: 和 : "memory"
这两个部分是内联汇编的修饰符。:: 表示没有输出寄存器,"memory" 则表示该内联汇编代码可能会对内存进行读写操作,因此编译器需要考虑到内存屏障(memory barrier)的影响。
以RZT2M为例对cache作一些操作
1以rzt2m读取SDRAM为例,做一个打开和关闭cache的性能比较
SDRAM在代码中如果使用external Address sapce mirror的地址空间,那么开启和关闭cache的配置如下图所示:

点击可查看大图

点击可查看大图
从上图可以看出关闭cache后读取数据的时间是打开cache后时间开销的十多倍。所以cache是否使能,性能差别十分显著。
2如果同样是读取10K bytes的数据,加上一起对cache invalidate/clean的操作之后,时间开销如下

点击可查看大图
上面的代码每读取sdram一次,都有对cache做操作。所以时间开销增加了很多,但是实际情况,是否需要频繁的操作cache需要看实际情况而定。注意每次对cache的操作都是以,cache line的长度(64字节)对cache做处理的。比如invalidate某段sdram地址对应的cache, 0x58000000-0x58000040, 那么对这段地址的invalidate操作是:
左右滑动查看完整内容
__asm volatile ( "mcr p15, #0 , %[bsc_sdram_cs3_mirror_sapce], c7, c6, #1 " /*DCIMVAC ->Invalidate data cache line by VA to PoC: test OK*/ ::[bsc_sdram_cs3_mirror_sapce] "i" (0x58000000) : "memory");
注意代码中 "i" 与 "r" 的区别,在上文中已经有提到。
注意对cache的操作需要十分慎重,并且充分验证的情况下进行。
-
内核
+关注
关注
4文章
1436浏览量
42491 -
指令
+关注
关注
1文章
617浏览量
37300 -
Cortex
+关注
关注
2文章
220浏览量
48411
发布评论请先 登录
电能质量在线监测装置数据日志加密存储的具体操作方法是什么?
校准电能质量在线监测装置精度等级的具体操作步骤是什么?
AppGallery Connect(HarmonyOS 5及以上) --公开测试创建并发布测试版本(二)
WHIS与高通达成战略合作
降低分布式光伏集群通信网络延迟的具体操作步骤是什么?
在IAR Embedded Workbench for Arm中使用Arm Cortex-R52 NEON
【RA-Eco-RA4M2开发板评测】利用GPIOPUT结合继电器控制台灯频闪
渗压计‘喝饱水’有多重要?透水板浸饱和的具体操作步骤
DeepSeek企业部署依托raksmart裸机云具体操作指南
如何从R52_0使用SD Boot启动S32z ?
集成应用处理功能和高精度实时控制性能的高端 MPU RZ/T2H数据手册
定位器气密性检测仪的具体操作流程

Cortex R52内核Cache的具体操作(2)
评论