1、什么是cache,有什么用(屏蔽硬件速度差异)
cache是一种内存,叫高速缓存。指令(iCache)、和数据(dCache)、两种。
从容量上来说:CPU < 寄存器 < cache < DDR
从速度上来说:CPU > 寄存器 > cache > DDR
cache的存在,是因为寄存器和ddr之间速度差异太大,ddr的速度远不能满足寄存器的需要(不能满足CPU的需要,所以没有cache会拉底整个系统的整体速度)
整个系统中CPU的供应链由:寄存器 + cache + DDR + 硬盘/flash 这四阶组成,这是综合考虑了性能,成本后得到的妥协结果。
210内部有32kb icache(指令缓存)和32kb dcache(数据缓存)
cache的意义:指令平时是放在硬盘或flash中的,运行时读取到ddr中,再从DDR读给寄存器,再由寄存器送给CPU(CPU不能直接读写DDR)。但是DDR的速度和寄存器(代表的是CPU)相关太大,如果CPU运行完一句再去DDR读取下一句,那么CPU的速度就被DDR给拖慢了,解决方案是icache。
icache工作时,会把CPU正在运行的指令的旁边几句指令(ddr中的数据)事先给读取到icache中。(CPU设计有一个基本原理:代码执行时,下一句执行的代码,执行当前代码旁边代码的可能性很大(顺序结构))。当下一句CPU要指令时,cache首先检查自己事先准备的缓存指令中有没这句,如果有就直接拿给CPU,如果没有则需要从DDR中重新去读取拿给CPU,并同时做一系列的动作:清缓存、重新缓存。(朱老师比喻皇帝吃饭口味改变和厨师甜咸菜品准备与清理)
dCache(数据缓存):开了MMU才可用(虚拟地址有关)在裸机里一般不用这,操作系统中会用到。
2、iROM中BL0对cache的操作
首先:iCache的一切动作都是自动的,不需人为干预,我们所要做的就是打或关闭iCache。
其次,在210的iROM中BL0已经打开了icache。所以之前看到的现象都是icache打开时的现象。
3、汇编代码读写cp15(协处理器)以开关cache
mrc p15,0,r0,c1,c0,0; //读出CP15的C1到r0中
bic r0, r0, #(1<<12) //bit12置0 关icache
//orr r0, r0, #(1<<12) //bit12置1 开icache
mcr p15,0,r0,c1,c0,0;
4、实验验证
我们看三种情况下的实验现象:
1、直接使用BL0中对icache的操作
2、关icache
3、开icache
预想实验会有什么现象。开icache后指令运行速度快,所以led闪烁频率高。icach
实验结果分析:
结论1:irom
今天的文章汇编代码call_汇编语言call指令分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/66971.html