Day1 ARM基础

news2024/11/25 23:13:05

【ARM课程认知】

1.ARM课程的作用

承上启下

  • 基础授课阶段:c语言、数据结构、linux
  • 嵌入式应用层课程:IO、进程线程、网络编程
  • 嵌入式底层课程:ARM体系结构、系统移植、linux设备驱动
  • c++/QT

2.ARM课程需要掌握的内容

  • 自己能够实现简单的汇编编程
  • 能够看懂常见的电路原理图
  • 掌握软件编程控制硬件的思想
  • 了解芯片内部常用外设的工作原理:GPIO、UART、TIMER、IIC、SPI、GIC
  • 掌握数据手册读写的方法

3.ARM的学习方法

  • 上课好好整理明白硬件的工作原理
  • 充分利用硬件环境

【计算机相关理论】

1.计算机的组成

输入设备、输出设备、运算器、控制器、存储器

1.输入设备:将编写好的软件代码以及相关的数据输送到计算机中,转换成计算机能够识别、处理和存储的数据形式 键盘、鼠标、手柄、扫描仪、 2.输出设备:将计算机处理好的数据的结果通过输出设备输出到计算机的外部 显示屏、打印机、音响。。 3.存储器:计算机用于存放数据以及指令的部件。也是计算机实现"程序存储控制"的基础 外部存储器、内存、cache、寄存器 4.控制器(CU):计算机的控制中枢,对机器指令进行译码操作,并且按照译码之后的结果进行相关的控制 5.运算器(ALU):算数逻辑运算单元:根据控制器译码之后的指令和数据,进行算数逻辑运算,并且把运算的结果进行输出

2.程序编译的原理

程序编译的步骤:

  • 预处理:将程序中所有以#开头的内容展开到当前文件中 gcc -E 1.c -o 1.i
  • 编译:检查语法错误,生成汇编程序 gcc -S 1.i -o 1.s
  • 汇编:将汇编程序编译为二进制程序 gcc -c 1.s -o 1.o
  • 链接:将程序中用到的一些库链接到程序中,生成二进制可执行文件 gcc 1.o -o a.out

程序编译的原理:

CPU能够识别的唯一的语言是机器语言。一个CPU能够识别哪一些机器语言是由CPU的硬件(运算器的类型)决定的。

不同的机器指令代表不同的运算。相同运算在不同的机器上的机器指令不一定一样,不同的机器的机器指令不通用,不可移植。汇编指令就是特定机器指令的标志。汇编指令也是不通用的。我们可以采用不同的编译工具编译程序生成可以被不同架构的机器识别的机器指令文件

3.指令和指令集

  • 机器指令(指令的机器码):由二进制的0和1组成的一条机器码。计算机解析这条机器码可以做相应的运算处理
  • 汇编指令:一条汇编指令就是一条机器指令的标志。执行汇编指令也可以让机器进行相关的运算处理
  • 指令集:指令的集合

4.RISC(精简指令集)和CISC(复杂指令集)

RISC(精简指令集)的架构主要应用于嵌入式的设备上 精简指令集是选取了一些比较简单、使用频率比较高的指令组成的指令集 精简指令集的特点: 1.指令的长度和指令的执行周期固定 指令的长度:一条机器码在计算机中占用的空间 指令的周期:CPU执行一条指令花费的时间(时钟周期) 时钟周期:CPU主频率 2.基于精简指令集设计的CPU核心成本、功耗、体积更低,但是实现的功能也相对简单 CISC(复杂指令集) 基于复杂指令集设计的CPU核心更加注重功能的完善性,复杂指令集内核会集合各自各样的指令。 特点: 1.指令的长度和执行周期不固定 2.复杂指令集设计的CPU核心实现的功能更为复杂,但是功耗、成本都会更高

生成X86架构a.out的反汇编,查看a.out文件中每一条指令的大小和地址

5.目前几种主流的RISC内核

ARM内核:主流的嵌入式内核,需要得到ARM的授权 RISC-V:正在快速发展,未来会成为主流 MIPS:完全闭源,中国龙芯科技直接买断,完全垄断,在它的基础上还进行了一些拓展

【ARM相关内容】

1.ARM的发展历史

ARM发展史 (huawei.com)

ARM :Advanced RISC Machines(最初命名为Acorn RISC Machine)简称ARM。对ARM可以有三种理解:1)ARM公司:Advanced RISC Machines Limited;2)ARM处理器架构;3)一种技术——ARM技术。 ARM 公司是全球领先的半导体知识产权 (IP) 提供商,并因此在数字电子产品的开发中处于核心地位 ARM 的商业模式主要涉及 IP 的设计和许可,而非生产和销售实际的半导体芯片。 里程碑1——ARM成立 ARM前身为艾康电脑(Acorn),于1978年,英国剑桥成立,大学的孵化物。 1980年代晚期,苹果开始与艾康合作,开发新版ARM核心。 1985年,艾康开发出全球第一款商用RISC处理器,即ARM1,针对于PC市场,还没有嵌入式呢!!! 1990年,艾康财务危机,受苹果和VLSI(最早做超大规模集成电路的公司)的投资,成立独立子公司:Advanced RISC Machines(ARM),ARM公司正式成立面世 里 程碑2——嵌入式RSIC处理器 1991年,ARM推出第一款嵌入式RISC处理器,即ARM6。 1993年,发布ARM7。 1997年,发布ARM9TDMI,三星2440基于此内核。 1999年,发布ARM9E,增强型ARM9。 2001年,ARMv6架构。 2002年,发布ARM11微架构。 里程碑3——微控制器 2004年,发布ARMv7架构的Cortex系列处理器,同时推出Cortex-M3。 2005年,发布Cortex-A8处理器。 2007年,发布Cortex-M1和Cortex-A9 2009年,实现Cortex-A9、发布Cortex-M0 2010年,推出Cortex-M4(F)、成立Linaro(ARM公司牵头成立的公共组织,专门做ARM处理器在Linux平台上的一些软件的开发和移植),推出Cortex-A15 MPcore高性能处理器(性能比较高了,但是发热量很大)。 里程碑4——64位处理器时代 2011年,推出32位 Cortex-A7 处理器,ARMv8发布 2012年,开始推出64位处理器。推出 Cortex-M0+、ARM 首款64位处理器架构 Cortex-A53、Cortex-A57 架构。全球第一款64位ARM手机iPhone5s。 2013年,推出32位 Cortex-A12 处理器架构 2014年,推出 Cortex-M7(F) 微控制器架构;32位 Cortex-A17处理器架构。 2015年,推出64位 Cortex-A35、Cortex-A72 处理器架构。 2016年,推出 Cortex-M23 、Cortex-M33(F) 微控制器架构;32位 Cortex-A32 处理器架构;64位 Cortex-A73 处理器架构。 2017年,推出64位 Cortex-A55 、Cortex-A75 处理器架构。 2018年,推出微控制器 Cortex-M35P;64位 Cortex-A76 处理器架构。 2016---ARM被软银收购 2020---英伟达收购ARM未果

2.ARM架构

不同版本的指令集就是不同的架构

ARMV1-ARMV6:已经被淘汰 ARMV7架构:32位架构,支持32位指令集 ARMV8架构:64位架构,支持64位指令集,并且向下兼容32位指令 ARMV9架构:64位架构,支持64位指令集

3.ARM内核

基于不同的ARM架构设计出来的不同的处理器核心叫做不同的ARM内核

arm7/arm9/arm11 cortex-A7 ARMV7 cortex-A53 ARMV8 cortex-A55 ARMV8 cortex-A77 ARMV8 cortex-A78 ARMV8 cortex-x1 ARMV8 cortex-A710 ARMV9 cortex-A510 ARMV9

4.SOC(system on chip)

ARM公司只进行技术授权。将自己的IP授权给各个半导体公司。半导体公司根据ARM的授权,在CPU核心外围设计了一些外围电路和设备,集成在一个芯片上,这个芯片就被成为SOC。

SOC由CPU+外设备+总线组成

MCU(微控制器) MPU(微处理器)

公司 SOC名称 内核 架构 ST STM32MP157A cortex-A7 ARMV7 三星 S5P6818 cortex-A53 ARMV8 海思 麒麟9000 cortex-A77 ARMV8 高通 骁龙888 cortex-x1 ARMV8

5.ARM的产品分步

5.1 Cortex-A系列

Cortex-A系列 的核心是ARM处理器中性能最强的、最完善的处理器。属于高端处理器 在基于Cortex-A处理器为核心的开发板上可以搭载linux/鸿蒙灯标准化操作系统

5.2 Cortex-R系列

Cortex-R系列 处理器追求系统的实时性能。对数阶的实时性要求高的场景下使用Cortex-R系列 处理器 汽车、军工

5.3 Cortex-M系列

属于ARM处理器中比较低端的芯片处理器,工作主频一般在24M-256MHz之间 Cortex-M系列 处理器一般不跑操作系统,主要执行一些裸机程序 Cortex-M系列 处理器可以搭载一些轻量级的实时系统 FreeRtos

5.4 SecurCore系列

用于对安全性能要求比较高的场景

6.ARM数据约定

查询芯片手册时可以看到的一些数据大小的表述

A7采用的是32位架构. ARM 约定 Byte 8 bits. Halfword 16 bits. Word 32 bits. Doubleword 64 bits. 32位指令集:一条指令占据存储空间的大小是32位 32位处理器:处理器一条指令最大能进行32位数据的运算 想要在32位处理器中进行64位数据的运算: 0X 00000001 FFFFFFFE 0x 00000004 00000002 先让低32位进行运算,再让高32位进行运算 大部分ARM core 提供: ARM 指令集(32-bit) Thumb 指令集(16-bit ) Cortex-A处理器 16位和32位Thumb-2指令集 16位和32位ThumbEE指令集

7.ARM的工作模式

ARM处理器在面对不同的情境下需要进入不同的工作模式进行对应模式下的处理

ARM 有7种基本工作模式: User : 非特权模式,大部分任务执行在这种模式 FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式 IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式 Supervisor :当复位或软中断指令执行时将会进入这种模式 Abort : 当存取异常时将会进入这种模式 Undef : 当执行未定义指令时会进入这种模式 System : 使用和User模式相同寄存器集的特权模式 Cortex-A特有模式: Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式; 也是一种特权模式 HYP:虚拟化模式,当一个硬件上运行两种OS内核时进入这种模式

8.ARM寄存器组织

8.1 计算机内部存储模块介绍

8.2 寄存器概念

寄存器是集成在CPU内部的存储组织,CPU访问寄存器数据的时候只需要根据寄存器的编号就可以访问到寄存器的数值。访问寄存器的速度块。但是寄存器存在数量限制,保存的数据量也很少

8.3 ARM v7架构下的寄存器组织

ARM 有37个32-Bits长的寄存器: 1 个用作PC( program counter) 1个用作CPSR(current program status register) 5个用作SPSR(saved program status registers) 30 个通用寄存器 Cortex体系结构下有40个32-Bits长的寄存器: Cortex-A多出3个寄存器, Monitor 模式 r13_mon , r14_mon, spsr_mon 当前处理器的模式决定着哪组寄存器可操作. 任何模式都可以存取: 相应的r0-r12子集 相应的 r13 (the stack pointer, sp) and r14 (the link register, lr) 相应的 r15 ( the program counter, pc) 相应的CPSR(current program status register, cpsr) 特权模式 (除system模式) 还可以存取: 相应的 spsr (saved program status register) 每一个寄存器大小都是32位

8.4 ARMV8架构寄存器组织

8.5 ARMV7架构下一些具有特定功能的寄存器

R13寄存器(the stack pointer, sp)

R13寄存器又叫SP(栈指针寄存器),这个寄存器内部保存栈顶的地址 一般在内存中分出一部分内存当作栈来使用,SP寄存器时钟保存栈顶空间的地址 栈一般存放一些临时数据,也可以用于保护现场

r15寄存器(the program counter, pc)

R15寄存器又被称为PC寄存器(程序计数器) 这个寄存器始终保存马上要进行取址的指令的地址,当一条指令执行结束之后PC寄存器的数值会自动向下+4 另外,在特定情况下可以手动修改PC的值进行程序的跳转

R14寄存器(the link register, lr)

R14寄存器又被称为链接寄存器,当程序在实现跳转的时候,LR寄存器中保存当前跳转指令下一条指令的地址。方便 实现程序的返回 程序的跳转实现: PC-》跳转之后指令的地址 程序的返回: PC=LR

CPSR寄存器(current program status register, cpsr)

CPSR:程序状态寄存器 这个寄存器中保存当前程序的运行状态,比如工作模式等信息 SPSR:saved program status register SPSR寄存器可以用于保存程序某一时刻的状态 比如当发生异常之后,处理器的工作模式要切换到对应的异常模式去处理异常,这样CPSR的数值会发生对应的改变 在处理完异常结束后,我们需要将CPSR的值修改为没有发送异常之前的状态,这个时候就可以将SPSR保存的异常发送之前的状态赋值给CPSR

1. N[31] : 指令的运行结果为负数时,N位被自动置1,否则为0. eg : 100 - 200 2. Z[30] : 指令的运行结果为零时,Z位被自动置1,否则为0. 100-100 3. C[29] : 加法:加法运算如果产生进位,C位被自动置1,否则为0. 32位指令:低32位向高32位进位 0XFFFFFFFF+1 减法:减法运算如果产生借位,C位被自动清0,否则位1. 32位指令:低32位向高32位借位 1-0XFFFFFFFE 4. V[28] : 符号位发送变化,V位被自动置1,否则清0. 5. I[7] : IRQ中断屏蔽位 I = 0 : 不屏蔽IRQ中断 I = 1 : 屏蔽IRQ中断 6. F[6] : FIQ中断屏蔽位 F = 0 : 不屏蔽FIQ中断 F = 1 : 屏蔽FIQ中断 7. T[5] : 状态位 T = 0 : 表示ARM状态,执行的是ARM指令集 T = 1 : 表示Thumb状态,执行的是Thumb指令集 ARM指令集 : 一条汇编指令编译生成32位的机器码 thumb指令集:一条汇编指令编译生成16位的机器码 ARM指令集的代码的密度低,而thumb指令记得代码密度高。 ARM指令集的功能性要高于Thumb指令集。 8. M[4:0] : 模式位 10000 User mode; 10001 FIQ mode; 10010 IRQ 10011 SVC mode; 10111 Abort mode; 11011 Undfined mode; 11111 System mode; 10110 Monitor mode; 其他没有使用到的值,保留。

9.ARM的流水线工作

9.1 一条指令的执行过程

取址:CPU将PC寄存器中保持的指令地址通过地址总线传输给存储器,存储器将PC对应的指令通过数据总线传输给CPU。CPU将指令保存在IR(指令暂存寄存器)寄存器中 译码:IR寄存器的指令交给译码器,对指令进行译码 执行:译码器对指令译码之后由运算器对译码之后的指令进行运算

9.2 ARM三级流水线

当一条指令在被取址是,译码模块和执行模块处于空闲状态,这样这两个模块相当于没有得到充分利用。为了充分,利用资源,ARM引入了流水线工作,增加了指令的处理速度

【任务】

1.安装汇编环境:

开发工具-》汇编环境搭建

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

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

相关文章

宠物养成猫狗商城门店问诊档案流量主小程序开发

宠物养成猫狗商城门店问诊档案流量主小程序开发 猫狗宠物养成商城门店问诊档案流量主小程序开发,这是一个充满趣味性和创新性的项目。通过将宠物养成游戏与商城、问诊服务、社交功能等相结合,为用户提供一站式的宠物养育体验。 在宠物养成方面&#x…

高阶数据结构---并查集

文章目录 格子游戏搭配购买程序自动分析奇偶游戏银河英雄传说 一、格子游戏OJ链接 本题思路:本题首先我们将题目中所给的二维坐标映射到一维坐标中,从坐标从0开始进行,而题目中是从1开始,我们需要先进行--操作,然后利用并查集来判…

技术分享 | Appium环境安装与架构介绍

Appium架构 Appium 设计哲学 不需要为了自动化而重新编译或修改被测应用 不应该让移动端自动化测试限定在某种语言或者某个具体的框架 不要为了移动端的自动化测试而重新造轮子 移动端自动化测试应该是开源的 Appium 架构 Appium 架构图如下: Appium 的核心是…

【数据库】数据库模式 Schema

数据库模式 Schema 1.MySQL2.PostgreSQL3.SQL Server4.Oracle5.SQLite 在数据库的术语中,模式(schema)是一个逻辑概念,用于组织数据库中的对象。模式中的对象通常包括 表、索引、数据类型、序列、视图、存储过程、主键、外键 等等…

STM32笔记—DMA

目录 一、DMA简介 二、DMA主要特性 三、DMA框图 3.1 DMA处理 3.2 仲裁器 3.3 DMA通道 扩展: 断言: 枚举: 3.4 可编程的数据传输宽度、对齐方式和数据大小端 3.5 DMA请求映像 四、DMA基本结构 4.1 DMA_Init配置 4.2 实现DMAADC扫描模式 实现要求…

代码随想录 Day38 完全背包问题 LeetCode T70 爬楼梯 T322 零钱兑换 T279 完全平方数

前言 在今天的题目开始之前,让我们来回顾一下之前的知识,动规五部曲 1.确定dp数组含义 2.确定dp数组的递推公式 3.初始化dp数组 4.确定遍历顺序 5.打印dp数组来排错 tips: 1.当求取物品有限的时候用0-1背包,求取物品无限的时候用完全背包 结果是排列还是组合也有说法,当结果是组…

设计模式之工厂模式(Factory)

任何可以产生对象的方法或类,都可以称为工厂。 下面的代码定义了Car这种交通工具: public class Car {public void go() {System.out.println("Car go wuwuwuwuw....");} }然后在main函数里面想要调用调用Car的go方法,就需要new一个car对象&…

Netty入门指南之传统通信的问题

作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者! 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏:Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言多线程…

管理类联考——写作——技巧篇——书写标点符号使用要求规范文档

写作答题卡书写标点符号使用要求规范文档 常用标点符号有逗号、句号、叹号、问号等 11 种,下面一一列举其用法和书写规范。 一、句号 用法:用于陈述句的末尾。 占格情况:占一格,写在格子左下方。 举例: 我看见妈妈走…

web3案例中解决交易所中 ETH与token都是0问题 并帮助确认展示是否成功

可能写了这么久 很多人会发现一个问 我们前面的案例 个人在交易所中的 自定义token 和 ETH 一直是放了个0 大家也不太敢确认是否真的有效 那么 很简单 我们操作 存入一些进交易所 不就ok了 我们 来看之前交易所写的代码 我们写了 depositEther 存入 ETH 和 depositToken 存入…

03 贝尔曼公式

贝尔曼公式 前言1、Motivating examples2、state value3、Bellman equation:Derivation4、Bellman equation:Matrix-vector form4、Bellman equation:Solve the state value5、Action value 前言 本文来自西湖大学赵世钰老师的B站视频。本节课主要介绍贝尔曼公式。 本节课概要…

海外问卷项目是怎么赚钱的?

大家好,我是橙河老师,今天聊一聊海外问卷项目是怎么赚钱的? 在海外国家,问卷调查这种商业模式一直都很流行,很多商业公司为了收集消费者的意见,会对外发有偿的调查问卷,从最开始的纸质调查&…

MySQL第五讲·关于外键和连接, 如何做到关联查询?

你好,我是安然无虞。 文章目录 外键和连接:如何做关联查询?如何创建外键?连接关联查询中的误区 外键和连接:如何做关联查询? 在实际的数据库应用开发过程中,我们经常需要把2个或2个以上的表进…

C语言函数初使用

目录 1知识点: 2一个小代码,后续知识点讲解: 3知识点: 定义函数 实例 函数声明 调用函数 函数参数 4总结: 1知识点: 函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,…

网站源码备份 [极客大挑战 2019]PHP1

打开题目 题目提示我们备份网站 我们输入/www.zip 下载zip文件&#xff0c;打开发现 打开index.php <?phpinclude class.php;$select $_GET[select];$resunserialize($select);?> 文件包含class.php&#xff0c;get传参一个select函数&#xff0c;反序列化select参…

HMM与LTP词性标注之命名实体识别与HMM

文章目录 知识图谱介绍NLP应用场景知识图谱&#xff08;Neo4j演示&#xff09;命名实体识别模型架构讲解HMM与CRFHMM五大要素&#xff08;两大状态与三大概率&#xff09;HMM案例分享HMM实体识别应用场景代码实现 知识图谱介绍 NLP应用场景 图谱的本质&#xff0c;就是把自然…

JS逆向爬虫---请求参数加密②【某麦数据analysis参数加密】

主页链接: https://www.qimai.cn/rank analysis逆向 完整参数生成代码如下&#xff1a; const {JSDOM} require(jsdom) const dom new JSDOM(<!DOCTYPE html><p>hello</p>) window dom.windowfunction customDecrypt(n, t) {t t || generateKey(); //…

ZZULIOJ 1108: 打印数字图形(函数专题) (C/C++)

1108: 打印数字图形&#xff08;函数专题&#xff09; 题目描述 从键盘输入一个整数n(1≤n≤9),打印出指定的数字图形。要求在程序中定义并调用如下函数&#xff1a;PrintSpace(m)用来输出m个空格&#xff1b;PrintDigit(m)来输出一行中的数字串"12…m…21"&#xff…

element树形结构下拉组件组装对应格式数据

element树形结构下拉组件组装对应格式数据 <el-row><el-col :span"24"><el-form-item label"购买渠道" prop"treeData" class"grid-content bg-purple"><el-cascaderv-model"testForm.treeData":optio…

鳄鱼指标的3颜色线都代表什么?澳福官网一段话明白了

投资者一直在使用鳄鱼指标进行交易&#xff0c;但是对指标上面的3种颜色的K线都代表什么不明白&#xff1f;直到看到澳福官网一段话才明白&#xff0c;原来这么简单&#xff01; 鳄鱼指标&#xff0c;这一工具是由三条移动平均线组合而成。具体来说&#xff0c;蓝线&#xff0…