当前位置: 首页 > news >正文

ARM基础 -- 2

文章目录

  • 一、可编程器件的编程原理
    • 1.1 电子器件的发展方向
    • 1.2 可编程器件的特点
    • 1.3 整个编程及运行过程
  • 二、指令集对CPU的意义
    • 2.1 汇编语言与C等高级语言的差异
    • 2.2 汇编语言的本质
      • 2.2.1 编程语言的发展过程
      • 2.2.2 汇编语言的特点和用途
  • 三、RISC和CISC的区别
    • 3.1 复杂指令集CPU --- CISC
    • 3.2 精简指令集CPU --- RISC
    • 3.3 CPU的设计方式发展
    • 3.4 RISC与CISC指令集对比
    • 3.5 发展趋势
  • 四、统一编址&独立编址
    • 4.1 什么是IO?什么是内存?
    • 4.2 内存访问方式
    • 4.3 IO访问方式
  • 五、程序与数据
  • 六、`冯诺依曼结构和哈佛结构`
    • 6.1 优劣对比
  • 七、软件编程控制硬件的关键 --- 寄存器
    • 7.1 寄存器的定义
    • 7.2 关于寄存器
    • 7.3 两类寄存器
  • 八、ARM 体系结构要点总结
    • 8.1 ARM 是RISC架构
    • 8.2 ARM 是哈佛结构的

本文来源于朱有鹏老师的课程,有兴趣购买课程学习的小伙伴,可以私聊我,我拉你进朱老师的学习群。

一、可编程器件的编程原理

1.1 电子器件的发展方向

模拟器件 --> 数字器件
ASIC(Application Specific Integrated Circuit 专用集成电路):这个是不可以编程的 --> 可编程器件

1.2 可编程器件的特点

  1. CPU在固定频率的时钟控制下, 节奏运行。
  2. CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行。
  3. 这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者(本文中提及的是ARM公司)定义的,本质上是一串串1和0组成的数字。这就是CPU的汇编指令集。

1.3 整个编程及运行过程

从源代码到CPU执行过程:
.c等高级语言源代码 ----(编译器)----- .S汇编源代码 ----(汇编器)----- Elf格式二进制可执行程序 ----(Objcopy工具)-----Bin格式烧录文件 ----(总线)----- CPU读入后先解码 ----(CPU内部指令流水线)----- CPU执行指令。

注: 对预编译,编译,汇编,链接过程不清楚的,可以看看这位小伙伴的博文。

二、指令集对CPU的意义

2.1 汇编语言与C等高级语言的差异

  1. 汇编难写,C好写。
  2. 汇编无可移植性,C语言有一定的可移植性,Java等更高级的语言移植性更高。
  3. 汇编语言效率最高,C语言次之,Java等更高级语言效率更低。
  4. 汇编不适合完成大型复杂的项目,更高级语言更适合完成更大,更复杂的项目。

2.2 汇编语言的本质

  1. 汇编的实质是机器指令(机器码)的助记符,是一种低级符号语言
  2. 机器指令集是一款CPU的编程特性,是这款CPU的设计者制定的。CPU的内部电路设计就是为了实现这些指令集的功能,机器指令集就好像CPU的API接口一样。

2.2.1 编程语言的发展过程

  • 纯机器码编程
  • 汇编语言编程
  • C语言编程
  • C++语言编程
  • Java C#等语言编程
  • 脚本语言

2.2.2 汇编语言的特点和用途

  • 汇编语言就是CPU的机器指令集的助记符,是一款CPU的本质特性。
  • 不同CPU的机器指令集设计不同,因此汇编程序不能在不同的CPU间互相移植。
  • 使用汇编编程可以充分发挥CPU的设计特点,所以汇编编程效率最高,因此在操作系统内核中效率极其重要处都需要汇编处理。

三、RISC和CISC的区别

3.1 复杂指令集CPU — CISC

  • Complex Instruction-set computer 复杂指令集CPU
  • CISC体系的设计理念是用最少的指令(注意说的是指令而不是指令集)来完成任务(譬如计算乘法只需要一条MUL指令即可),因此CISC的CPU本身设计复杂、工艺复杂,但好处是编程器好设计。CISC出现较早,至今Intel还一直采用CISC设计。

3.2 精简指令集CPU — RISC

  • Reduced Instruction-set Computer 精简指令集CPU
  • RISC的设计理念是让软件来完成具体的任务,CPU本身只提供基本功能指令集。因为RISC CPU 的指令集只有很少的指令,这种设计相对于CISC,CPU的设计和工艺简单了,但是编译器的设计变难了。

3.3 CPU的设计方式发展

  • 早期简单CPU,指令和功能都很有限。
  • CISC年代-------CPU功能拓展依赖于指令集的拓展,实质是CPU内部组合逻辑电路的拓展。
  • RISC年代-------CPU仅仅提供基础功能指令(譬如内存与寄存器通信指令,基本运算与判断指令符等),功能拓展由使用CPU的人利用基础架构来灵活实现。

3.4 RISC与CISC指令集对比

  • 一般典型的CISC CPU指令在300左右。
  • ARM CPU常用指令在30条左右。
    注:ARM为什么功耗低? (乱序执行能力不如X86)

3.5 发展趋势

  • 没有纯粹的RISC或CISC,发展方向是RISC与CISC结合,形成一种介于两者之间的CPU类型。

四、统一编址&独立编址

4.1 什么是IO?什么是内存?

  • 内存是程序的运行场所,内存和CPU之间通过总线连接,CPU通过一定的地址来访问具体的内存单元。
  • IO(input and output)是输入输出接口,是CPU和其它外部设备(如串口、LCD、触摸屏、LED等)之间通信的道路,一般的,IO就是指CPU的各种内部和外部的外设。

4.2 内存访问方式

  • 内存通过CPU的数据总线来寻址定位,然后通过CPU的数据总线来读写。
  • CPU的地址总线的位数是CPU设计时确定的,因此一款CPU所能寻址的范围是确定的,而内存是需要占用CPU的寻址空间的。
  • 内存和CPU的这种总线连接方式属于直接连接,优点是效率高,访问快,缺点是资源有限,拓展性差。

4.3 IO访问方式

  1. IO是指CPU连接的各种外设。
  2. CPU访问各种外设有两种方式,具体如下:
      (1) 类似于访问内存的形式,即把外设的寄存器当做一个内存地址来读写,从而以访问内存相同的方式来访问各种外设,叫 IO与内存统一编址方式。
      (2) 使用专用的CPU指令来访问某种特定外设,叫 IO与内存独立编址。

对比

  • 由于内存访问频率高,因此采用总线式连接,直接地址访问,效率最高。
  • IO与内存统一编址方式,优势是IO当作内存来访问,编程简单;缺点是IO也需占用一定的CPU地址空间,而CPU的地址空间是有限资源。
  • IO与内存独立编址方式,优势是不占用CPU地址空间,缺点是CPU设计变复杂了。

五、程序与数据

  • 程序运行时两大核心元素:程序+数据
  • 程序是我们写好的源代码经过编译,汇编之后得到的机器码,这些机器码可以拿给CPU去解码执行,CPU不会也不应该去修改程序,所以程序是只读的。
  • 数据是程序运行过程中定义和产生的变量的值,是可以读写的,程序运行实际就是改变数据的值。

六、冯诺依曼结构和哈佛结构

  • 程序和数据都放在内存中,且彼此不被分离的结构称为冯诺依曼结构。譬如Intel的CPU均采用冯诺依曼结构。
  • 程序和数据分开独立放在不同的内存块中,彼此完全分离的结构称为哈佛结构。譬如大部分的单片机(MCS51、ARM9等)均采用哈佛结构。

6.1 优劣对比

  • 冯诺依曼结构中程序和数据放在一起,因此安全和稳定性是个问题,好处是处理起来简单
  • 哈佛结构中程序(一般放在ROM、FLASH中)和数据(一般放在RAM中)独立分开存放。因此好处是安全和稳定性高,缺点是软件处理复杂一些(需要统一规划链接地址等)。
注:FLASH=ROM=硬盘(只读属性) DDR=内存=RAM

七、软件编程控制硬件的关键 — 寄存器

7.1 寄存器的定义

  • 寄存器属于CPU外设的硬件组成部分。
  • CPU可以像访问内存一样访问寄存器。
  • 寄存器是CPU的硬件设计者制定的,目的是留作外设被编程控制的“活动开关”。
  • 正如汇编指令集是CPU的编程接口API一样,寄存器是外设硬件的软件编程接口API。使用软件编程控制某一硬件,其实就是编程读写硬件的寄存器。

7.2 关于寄存器

  • 编程操作寄存器类似于访问内存。
  • 寄存器中每个bit位都有特定的含义,因此编程操作时需要位操作。
  • 单个寄存器的位宽一般和CPU的位宽(int/char)一样,以实现最佳访问效率。
注:CPU的位宽指的是数据总线的条数

7.3 两类寄存器

Soc中有两类寄存器:通用寄存器和SFR。

  • 通用寄存器(ARM中有37个)是CPU的组成部分,CPU的很多活动都需要CPU的支持和参与。
  • SFR(Special Function Register,特殊功能寄存器)不在CPU中,而存在CPU的外设中,我们通过访问外设的SFR来编程操控这个外设,这就是硬件编程控制的方法。
    注: SFR:硬件外设某个寄存器的地址,对应的数据位都是设计时定义的。

八、ARM 体系结构要点总结

8.1 ARM 是RISC架构

  • 常用ARM汇编指令只有二三十条
  • ARM是低功耗CPU
  • ARM 的架构非常适合单片机、嵌入式、尤其是物联网领域,而服务器等高性能领域, 目前主导还是IntelARM是统一编址的,
  • 大部分ARM (m3 m4 m7 m0 ARM9 ARM11 A8 A9等)都是32位架构
  • 32位ARM CPU 支持的内存少于4G,通过CPU 地址总线来访问
  • SOC的各种内部外设通过各自的SFR 编程访问,这些SFR的访问方式类似于访问普通内存,这叫IO与内存统一编址

8.2 ARM 是哈佛结构的

  • 常见ARM (除ARM7外)都是哈佛结构的
  • 哈佛结构也决定了 ARM逻辑程序(使用实地址即 物理地址)的链接比较麻烦,必须使用复杂的链接脚本告知连接器如何组织程序,对于OS之上的应用(工作在虚拟地址之中)则不需要考虑这么多

相关文章:

ARM基础 -- 2

文章目录一、可编程器件的编程原理1.1 电子器件的发展方向1.2 可编程器件的特点1.3 整个编程及运行过程二、指令集对CPU的意义2.1 汇编语言与C等高级语言的差异2.2 汇编语言的本质2.2.1 编程语言的发展过程2.2.2 汇编语言的特点和用途三、RISC和CISC的区别3.1 复杂指令集CPU --…...

Java 类型转换

Java 类型转换 int转Integer int int0 1; Integer integer1 int0; // 自动装箱 Integer integer2 new Integer(int0); Integer integer3 Integer.valueOf(int0);Integer转int Integer integer0 2; int int1 integer0; // 自动拆箱 int int2 integer0.intValue(); // …...

【Java开发】JUC基础 05:线程通信/协作

1 生产者消费者问题📌 线程通信应用的场景可以简单地描述为生产者和消费者问题假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费;如果仓库中没有产品,则生产者将产品放入仓库&a…...

哪些工具可以实现在线ps的需求

在线Photoshop有哪些工具可以选择?在 Adobe 的官网上就能够实现,很惊讶吧,其实 Adobe 官方推出了在线版本的 Photoshop 的,尽管目前还是 Beta版本,但其实也开放了蛮久了。编辑切换为居中添加图片注释,不超过…...

如何使用C2concealer生成随机化的C2 Malleable配置文件

关于C2concealer C2concealer是一款功能强大的命令行工具,在该工具的帮助下,广大研究人员可以轻松生成随机化的C2 Malleable配置文件,以便在Cobalt Strike中使用。 工具运行机制 开发人员对Cobalt Strike文档进行了详细的研究,…...

网络基础之IP地址和子网掩码

一、IP地址IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0 一直到255.255.255.255。互联网上的…...

G1D54-CRF

一、CRF的输入X是什么?是构造的特征吗? 如此,CRF的x只用于状态函数吗? CRF的例子解释调用代码 机器之心 知乎忆榛 此处线性链条件随机场的特征函数形式被统一了? BilstmCRF,强烈推荐!&#x…...

vue3 使用defineAsyncComponent与component标签实现动态渲染组件

内容有些啰嗦,内容记载了当时遇到了bug以及解决问题的思路。 业务场景简述: 前端做配置化组件,通过url内的唯一标识,请求后端sql 哪取页面配置信息,前端通过配置信息动态渲染查询表单,导出、表格&#xff…...

Linux下 C/C++ NTP网络时间协议详解

NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议。它是通过网络在计算机系统之间进行时钟同步的网络协议。NTP 在公共互联网上通常能够保持时间延迟在几十毫秒以内的精度,并在理想条件下,它能…...

Pytest自动化框架-权威教程02-Pytest 使用及调用方法

Pytest 使用及调用方法使用python -m pytest调用pytest2.0版本新增你可以在命令行中通过Python编译器来调用Pytest执行测试:Copypython -m pytest [...]通过python调用会将当前目录也添加到sys.path中,除此之外,这几乎等同于命令行直接调用pytest [...]。可能出现的执行退出cod…...

大数据技术——概述

根据IBM前首席执行官郭士纳的观点,IT领域每隔十五年就会迎来一次重大变革三次信息化浪潮1.存储设备容量不断增加2.CPU处理能力大幅提升3.网络带宽不断增加运营式系统阶段数据库的出现使得数据管理的复杂度大大降低,数据往往伴随着一定的运营活动而产生并记录在数据库…...

java-代理模式

背景 代理模式指的是提供一个代理对象用于访问目标对象,可以很方便的在不修改目标对象的情况下,提供额外的功能,扩展目标对象。 case1:静态代理 约束:代理对象和目标对象要实现相同的接口 优点:不修改目标对象的情况下扩展功能 缺点:必须实现相同的接口,如果接口发生变…...

路由网络的构建与配置

Part.1 ⑴ 需求分析 在构建的局域网中,通过路由器间配置静态路由,实现PC1和PC2主机直接连通,主机网段不能与路由器直接互联网段通信。 ⑵ 环境要求 配置虚拟网卡的计算机,安装华为eNSP模拟软件。 规划拓扑 Part.2 ⑴ 拓扑描述…...

软件测试-接口测试-数据库管理

文章目录 1.数据库介绍2.数据库基本操作2.1安装2.2 操作流程2.3数据准备2.4数据的基本操作2.4.1 连接数据库并查询数据库版本2.4.2 连接数据库执行数据库查询操作2.4.3 连接数据库执行数据库插入操作2.4.4 连接数据库执行数据库更新操作3.数据库事务操作3.1 案例:数据不一致性…...

【华为OD机试 】天然蓄水库(C++ Java JavaScript Python)

文章目录 题目描述输入描述输出描述备注用例题目解析C++JavaScriptJavaPython题目描述 公元2919年,人类终于发现了一颗宜居星球——X星。 现想在X星一片连绵起伏的山脉间建一个天热蓄水库,如何选取水库边界,使蓄水量最大? 要求: 山脉用正整数数组s表示,每个元素代表山脉…...

普元EOS中导出excl页面下载

起因 需要做一个筛选功能的导出表格 解决办法 这个垃圾eos我是真受不了,sb玩意的缺点三天三夜也说不完 后边就没法整response的这些个东西,可真是够愁人的 在网上搜了搜 在普元的帮助文档里也看了看 普元提供的像是老太太的裹脚布一般又臭又长 参照这个可以看一下...

内存的管理

取指令——译码——执行——返存 计组课我们学过cpu真正读指令并非是从内存中读入,而是从cache读和存,再由cache进行取指或返存,因为cpu指令周期比内存周期速度快很多,cpu若要取指或返存都需要等待内存完成他的动作才可以进行下一…...

OpenFeign 切换HttpClient遇到的问题

背景 OpenFeign支持三种Http请求方式,默认情况下通过jdk中的HttpURLConnection向下游服务发起http请求(详见下图,源码详见feign.Client.Default), 默认的Client 采用 HttpURLConnection, 这种是无法复用的…...

流计算框架storm概览

Attention: supervison 和 nimbus的状态都实时保存在zookeeper集群中和本地. Enchance, this means you can kill -9 Nimbus or the Supervisors and theyll start back up as nothing happened. Topologies 1. storm jar all-my-code.jar org.apache.storm.MyTopology a…...

如何使用Coercer强制Windows Server认证任意主机

关于Coercer Coercer是一款功能强大的Python脚本,该工具可以通过九种不同的方法来强制让一台Windows Server认证任意主机。 功能介绍 1、自动检测远程设备的开放SMP管道; 2、一一调用存在安全漏洞的RPC功能来强制一台Windows Server认证任意主机&#…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

零基础设计模式——行为型模式 - 责任链模式

第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...