ARM 汇编写启动代码之开 iCache

news2024/11/15 10:06:58

一、什么是 cache,有什么用

cache是一种内存,叫高速缓存。
从容量来说:CPU < 寄存器 < cache < DDR
从速度来说:CPU >  寄存器 > cache > DDR

cache 的存在,是因为寄存器和 ddr 之间速度差异太大,ddr 的速度远不能满足寄存器的需要(不能满足 cpu 的需要,所以没有 cache 会拉低整个系统的整体速度)。

整个系统中 CPU 的供应链由:寄存器 + cache + DDR + 硬盘/flash 四阶组成,这是综合考虑了性能、成本后得到的妥协的结果。

210内部有 32KB icache和 32kb dcache。icache 是用来缓存指令的;dcache是用来缓存数据的。

cache 的意义:指令平时是放在 硬盘/flash 中的,运行时读取到 DDR 中,再从 DDR 中读给寄存器,再由寄存器送给 cpu 。但是 DDR 的速度和寄存器(代表的就是 CPU)相差太大,如果 CPU 运行完一句再去 DDR 读取下一句,那么 CPU 的速度完全就被 DDR 给拖慢了。解决方案就是 icache。

icache 工作时,会把我们 CPU 正在运行的指令的旁边几句指令事先给读取到 icache 中( CPU 设计有一个基本原理:代码执行时,下一句执行当前一句代码旁边代码的可能性要大很多)。当下一句 CPU 要指令时,cache 首先检查自己事先准备的缓存指令中有没这句,如果有就直接拿给 CPU,如果没有则需要从 DDR 中重新去读取拿给 CPU,并同时做一系列的动作:清缓存、重新缓存。


二、iROM 中BL0 对 cache的操作

首先,icache 的一切动作都是自动的,不需人为干预。我们所需要做的就是打开/关闭 icache。
其次,在 210 的 iROM 中 BL0 已经打开了 icache。所以之前看到的现象都是 icache 打开时的现象。

在这里插入图片描述


三、汇编代码读写 cp15 以开关 icache

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;

实验验证

我们来看三种情况下的实验现象:
	1 直接使用 BL0 中对 icache 的操作
	2 关 icache
	3 开 icache
实验结果分析:
	结论1:irom 中确实是打开了 icache 的。
	结论2:icache 关闭确实比 icache 打开时 led 闪烁变慢,说明指令执行速度变慢。

源自朱有鹏老师.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊云科技——云原生主题容器入门笔记

嗨&#xff0c;大家好&#xff0c;我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助&#xff0c;请支持一波。 希望未来可以一起学习交流。 目录 一、容器入门课程 二、容器入门课堂笔记 1.容器背后的发展历史 2.区分容器与逻辑服务器的虚拟机 3.容…

号称 Java 圣经,Github 上爆火的 1058 页 JVM 全栈小册到底有什么魅力?

对于 JVM&#xff0c;我想大部分小伙伴都是要面试了才会去学&#xff0c;其余时间基本不会去看&#xff08;掐指一算&#xff0c;你们书架上面的深入理解 Java 虚拟机第三版应该都一层灰了吧【手动狗头】&#xff09;。但值得一说的是&#xff0c;当你工作多年之后&#xff0c;…

谷歌要完,百度也危了

文 | 天于刀刀当我们在抱怨搜索引擎的时候我们具体在说些什么&#xff1f;也许是饱受诟病的广告&#xff1f;或者是不合理的网页排序&#xff1f;又或是一种最直观的感觉——不好使。但是从来没有人抱怨过搜索引擎这一个模式。尽管这些年&#xff0c;也诞生一些诸如Magi这样让人…

Nginx配置实例-负载均衡

随着互联网信息的爆炸性增长&#xff0c;负载均衡&#xff08;load balance&#xff09;已经不再是一个很陌生的话题&#xff0c; 顾名思义&#xff0c;负载均衡即是将负载分摊到不同的服务单元&#xff0c;既保证服务的可用性&#xff0c;又保证响应 足够快&#xff0c;给用户…

Nginx安装搭建和环境准备教程(Ubantu)

本文以Ubantu18.08为例&#xff1a; 首先进入虚拟机中升级apt-get&#xff1a; apt-get update nginx进行安装&#xff1a; apt install nginx 使用命令查看nginx是否启动&#xff1a; systemctl status nginx nginx已经启动&#xff0c;可以到前端页面去访问是否真的已经启…

Vue项目中使用AntV G6绘制自适应图谱

Vue项目中使用AntV G6绘制自适应图谱 一、需求 需求1&#xff1a;Vue3.x项目下使用AntV G6绘制图谱 需求2&#xff1a;图谱节点为两个IP地址&#xff0c;节点间存在多条连线情况 需求3&#xff1a;鼠标悬浮到节点上方时&#xff0c;高亮当前节点并出现tooltip气泡提示&#…

Blackmagic黑魔法摄像机braw视频文件修复方法

Blackmagic是全球知名的影视级产品供应商&#xff0c;其高清摄像机是国内外各种剧组的最爱。Blackmagic的新产品目前使用braw格式&#xff0c;其编码采用自定义的raw编码&#xff0c;视频的效果和阿莱不相上下。近期我们处理了一例braw损坏无法播放的问题&#xff0c;我们来看看…

网络编程入门

什 么 是 网 络 编 程 网络编程的本质是多台计算机之间的数据交换。 数据传递本身没有多大的难度&#xff0c;不就是把一个设备中的数据发送给其他设备&#xff0c;然后接受另外一个设备反馈的数据。 现在的网络编程基本上都是基于请求/响应方式的&#xff0c;也就是一个设备发…

[附源码]计算机毕业设计基于springboot的小区宠物管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

css样式引入方式及优缺点

这篇文章主要介绍了css样式引入及优缺点&#xff0c;本文给大家分享三种css的引入方式&#xff0c;通过代码给大家介绍的非常详细&#xff0c;对大家的学习或工作具有一定的参考借鉴价值&#xff0c;需要的朋友参考下吧 三种css的引入方式 1.行内样式 优点&#xff1a;书写方…

【Python自然语言处理】文本向量化处理用户对不同类型服装评论问题(超详细 附源码)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 下面以文本向量化为目标&#xff0c;举例说明基于不同模型的实现过程&#xff0c;使用的数据集的主题是用户对不同类型的女性服装的评论&#xff0c;总共有23485条记录 实现步骤如下 一、导入库文件 首先导入需要的库文件…

MySQL数据库日志、备份与恢复

目录 前言 一.MySQL 日志管理 数据的重要性 造成数据丢失的原因 1、错误日志 2、通用查询日志 3、二进制日志 4、慢查询日志 5、查看日志 6.中继日志&#xff08;relay log&#xff09; 7、普通日志&#xff08;general log&#xff09; 配置文件 二、数据库备份的…

Metabase学习教程:系统管理-4

序列化&#xff1a;在Metabase实例间迁移 如何使用Metabase的序列化功能将问题、仪表板、集合、设置等从一个Metabase实例复制到新的Metabase实例。 Metabase序列化 序列化仅在商业版上可用&#xff08;仅在自托管计划上&#xff09;。 许多客户在迁移到本地部署的商业版时…

二叉树OJ题详解

第一题&#xff1a;单值二叉树 力扣链接&#xff1a;力扣 单值二叉树就是每一个节点存放的数据都相同&#xff0c;那么如何判断一棵树为单值二叉树呢&#xff1f;我们就拿最简单的一棵树为例子&#xff0c;比如根节点为1它的左子树和右子树也为1的一棵树&#xff0c;我们只需要…

以太网 TCP协议(TCP报文交互后的状态机变化)

2.7.2 以太网 TCP协议&#xff08;TCP报文交互后的状态机变化&#xff09; 一、TCP状态机&#xff1a; 二、TCP状态机变化 1、TCP三次握手 客户端主动发起SYN置位TCP之后&#xff0c;状态变为SYN_SENT(请求发送状态)服务器默认处于LISTEN(监听状态)。收到SYN报文之后&#x…

VMwareWorkStation如何添加万兆网卡,万兆网卡添加教程

1.引言 不同于ESXi&#xff0c;在VMware WorkStation&#xff08;后文简称VMware&#xff09;中添加网卡后没有选择网卡速度等级的选项&#xff0c;例如百兆、千兆、万兆等。就算点开右下角的”高级“也不管用。不过按照VMware的默认设定&#xff0c;当新建虚拟机选择32位操作系…

【玩转STL】STL的简介和string类用法和接口讲解(源码解析)

接触编程时间长一点的朋友想必都多多少少听过vector、string、queue等容器&#xff0c;也大抵了解一些有关STL的概念&#xff0c;这一节&#xff0c;我们就一起来谈一谈STL的六大组件&#xff0c;再来一起深入理解string类。 这里写目录标题&#x1f34e;、什么是STL&#xff0…

人工智能:语音合成技术介绍

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

PCL 点云采样

一、简介 点云采样一般有三种方式&#xff0c;上采样&#xff0c;下采样&#xff0c;平均采样 原理介绍 下采样&#xff1a; 一般是采样是通过构建一个三维体素的格栅&#xff0c;然后在每个体素内用体素的重心近似的作为这个体素的整体特征&#xff0c;也就是说用这一个体素…

python 拆分pdf(有可执行文件exe)

1.背景 被那些软件pdf拆分整气死了&#xff0c;今天用python写一份pdf拆分的代码。 2.代码&#xff1a;&#xff08;计算机的可以去学习一下&#xff0c;自己改改&#xff09; pdf_split.py from PyPDF2 import PdfFileReader, PdfFileWriter# PDF文件分割 def split_pdf():…