一、什么是Cache
Cache是一种容量比较小,但访问速度比较快存储器。由于处理器的速度远高于主存,处理器直接从内存中存取数据要等待一定周期,而Cache位于处理器与主存之间,保存着最近一段时间处理器涉及到的主存块内容。在需要读取数据是,处理器可能就会从Cache中读取需要的数据,而不是从主存中获取数据,这样就提高了系统的运行效率。更多嵌入式学习 2848988085
二、ARM处理器的Cache
ARM处理器支持Cache机制,并将Cache分开为I-Cache(指令缓存)和D-Cache(数据缓存)。系统刚上电时,I-Cacche中的内容是无效的,并且I-Cacche的功能也是关闭的,CP15协处理器的SCTLR寄存器(系统控制寄存器)的bit[12]控制I-Cache的打开和关闭。I-Cache关闭时,CPU每次取指令都要读主存,所以性能比较低。因此应该尽快打开I-Cache。同样,系统刚上电时, D-Cache中的内容是无效的,并且D-Cache的功能也是关闭的,SCTLR寄存器的bit[2]控制D-Cache的打开和关闭。因为D-Cache必须在开启MMU(内存管理单元)后才能使能,而本程序并不打算开启MMU,所以这里我们不是能D-Cache,只研究I-Cache。
三、Cache测试
我们使用Exynos4412处理器
开发板,该处理器采用32nm制程,拥有四枚主频可达1.4 GHz的Cortex-A9通用处理核心,拥有32 KB I- Cache和32 KB D- Cache,1 MB L2 Cache。以下是I-Cache的测试代码,如下:
.sec
tion .text
.globl _start
_start:
ldr r0, =WTCON
mov r1, #0
str r1, [r0]
mrc p15, 0, r0, c1, c0, 0
/* orr r0, r0, #0x1000
@Enable ICache */
bic r0, r0, #0x1000
@Disable ICache
mcr p15, 0, r0, c1, c0, 0
ldr r0, =GPF3CON
ldr r1, =0x10000
str r1, [r0]
led_flash:
ldr r0, =GPF3DAT
mov r1, #0x10
str r1, [r0]
bl delay
mov r1, #0x0
str r1, [r0]
bl delay
bled_flash
delay:
cmp r0, #0
subne r0, r0, #1
bne delay
.end更多嵌入式学习及需求
108519818
将该程序放到Exynos4412开发板上测试,先使能I-Cache,再关闭I-Cache,观察LED灯闪烁的频率变化。我们能够发现,使能I-Cache灯的闪烁频率比较高,关闭I-Cache闪烁频率低,这说明处理器执行过的指令被I-Cache缓存,当处理器再一次执行该指令时,处理器只需要从Cache中取出需要的指令,而不再需要访问主存储器,不必等待一段时间,从而提高了系统的效率。
0