10/11
一、ARM课程大纲
二、ARM课程学习的目的
2.1 为了找到一个薪资水平达标的工作(单片机岗位、驱动开发岗位)
应用层(APP) 在用户层调用驱动层封装好的API接口,编写对应的API接口
-------------------------------------------------------------------
嵌入式工程师需要做的事:
驱动层(DRIVER) 1、分析电路图(为了查看对应外设的硬件连接核引脚)
2、分析芯片手册(为了控制对应的外设寄存器实现外设的工作)
3、编写驱动代码(HAL_GPIO_WritePin())
--------------------------------------------------------------------硬件层(HAL) FS-MP1A = 主控芯片(STM32MP157AAA = Cortex-A7核 * 2 + Cortex-M4核 )
|
|
LED FAN BEEP 温湿度传感器 心率/脉搏传感器
应用层(APP) 用户/程序员是需要看懂硬件的电路图(给对应引脚高电平还是低电平),然后调用API接口
就能实现对硬件的控制-------------------------------------------------------------------
驱动代码对应的API接口由芯片厂商(ST公司)已经封装好了
驱动层(DRIVER) 芯片厂商封装的是标准库,一些公司使用的HAL库
--------------------------------------------------------------------硬件层(HAL) FS-MP1A = 主控芯片(STM32MP157AAA = Cortex-A7核 * 2 + Cortex-M4核 )
|
|
LED FAN BEEP 温湿度传感器 心率/脉搏传感器
2.2 为了之后的系统移植和驱动开发打基础
三、ARM课程学习完的目标
1、熟悉ARM相关的概念(寄存器、串行接口)
2、能看懂汇编指令(汇编指令的格式、功能)
3、能看懂电路图/原理图
4、能够独立分析纯英文芯片手册(尽量)
四、ARM相关的概念
4.1 机器码
机器(计算机 / 芯片)能够识别的以 0和1 组成的编码
gcc分布编译中汇编过程最后生成的文件
4.2 汇编指令
通过gcc分布编译中的编译流程将c代码转换为汇编代码
a = b + c ----------------------------------------------> add r0, r1, r2由c代码生成的对应的汇编指令
4.3 汇编指令集
多条汇编指令组成的集和
如:x86指令集、arm指令集、Mips指令集。。。。。
4.4 架构
可以说是汇编指令集的别名,也可以说是由不同的汇编指令集设计出了不同的架构
ARM汇编指令集 设计出了 ARM架构
X86汇编指令集 设计出了 X86-64/32J架构
Mips汇编指令集 设计出了 Mips架构ARM-V1~V6架构:已经被淘汰了
ARM-V7架构:32位的架构,支持32位的汇编指令集
ARM-V8架构:既支持32位的汇编指令集,也支持64位的汇编指令集,向下兼容V7架构
ARM-V9架构:最新的架构,未来十来的主流架构
四大主流的芯片架构:
架构 ARM架构 x86架构 RISC-V架构 Mips架构
芯片厂商 ST inter nivida 龙芯中科(龙架构)
芯片厂商:ST(意法半导体、STM32)、高通(骁龙8gen3)、TI(德州仪器)、NXP(恩智浦)、台积电、MTK(联发科)
华为(海思)、小米(澎湃)、阿里(平头哥)、中芯国际、兆易创新(GD32)
4.5 内核
由不同的架构设计出来不同的内核
ARM公司基于不同的ARM架构设计出了不同的内核
Cortex-M核 - MCU 单片机(只能运行小型操作系统FreeRTOS)
Cortex-A核 - MPU(可以运行大型的操作系统Linux操作系统)
4.6 处理器
CPU:中央处理器
MCU:微控制器
MPU:微处理器
SOC(system on-chip):片上系统ARM公司在创建前期是做芯片开发(自研内核、自研芯片),但是到了后期ARM公司不在生产芯片,只做内核的授权
ARM公司基于不同的ARM架构(v7架构、v8架构、v9架构),设计出不同的内核(Cortex-M核、Cortex-R核、Cortex-A核)
ARM公司将这些内核授权给不同的芯片厂商,芯片厂商在基于这些内核设计出不同的芯片
企业购买这些芯片,焊制PCB板加上很多的外设,做出一个产品如:ARM公司把Cortex-A核和Cortex-M核授权给ST(意法半导体)公司,ST公司基于这两个内核设计出了STM32MP157AAA的芯片
华清远见从ST公司购买了STM32MP157AAA的芯片这款芯片,华清远见的研发部焊制了PCB板并外加了很多外设,最终得到了FS-MP1A产品
五、ARM公司的历史
里程碑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 处理器架构。
六、精简指令集和复杂指令集
6.1 精简指令集
指令相对来说比较简单易懂
特点:精简指令集的指令宽度和指令周期固定
指令宽度:精简指令集下的每一条指令所占用的空间固定,ARM指令集的指令宽度为32位(4个字节)
指令周期:执行一条汇编指令的时间固定精简指令集:ARM指令集、RISC指令集、Mips指令集、PowerPC指令集
上图现象说明:
ARM处理器默认使用的是Thumb指令集
Thumb指令集是ARM指令集的子集(儿子)
Thumb指令集的指令宽度默认为16位(2个字节),同时存在Thumb2指令集的指令宽度为32位(4个字节)
ARM指令集的指令宽度默认为32位(4个字节)
6.2 复杂指令集
特点:复杂指令集的指令周期和指令宽度不固定
x86指令集是复杂指令集
七、框图总结
八、寄存器相关概念
六大存储类型:auto static const extern volatile register
volatile(异变)的作用:防止编译器对代码进行优化,直接从内存中读取或者写入变量值
register(内核寄存器)的特点:访问速度快、不允许取地址,只能通过寄存器编号进行访问(R0-R15)核内寄存器:在内核中的寄存器,没有地址,只能通过编号进行访问
核外寄存器:是内存地址的映射,存在地址,可以通过地址访问定义变量的过程:
auto int a
存储类型 + 数据类型 + 变量名
寄存器(存储器)是一块可以用于存储的特殊空间
九、ARM处理器的工作模式
9.1 Cortex-M核的工作模式
线程模式:运行main函数
异常模式:对应不同的异常的异常处理函数
9.2 Cortex-A核的工作模式
十、寄存器的位置
十一、寄存器组织
根据上图所示:
1、每个小方块代表一个寄存器,每个寄存器占32位,4个字节的空间
2、USER、SYS模式下有17个寄存器
3、FIQ、IRQ、SVC、ABT、UDF、MON模式下有18个寄存器
4、HYP模式下有19个寄存器
5、可控制的寄存器一共有43个
注意:
1、深色字体是实际存在的寄存器,浅色字体是虚拟的寄存器
2、白色底的小方块代表着公用寄存器,蓝色底的小方块代表着私有寄存器
公有寄存器:这个寄存器可以被所有模式使用
私有寄存器:这个寄存器只能被对应的模式使用
十二、特殊功能寄存器(重要!!!!!!!!!!)
12.1 R13寄存器
R13寄存器 ---> sp(the stack pointer)寄存器 ---> 栈指针寄存器
SP寄存器的作用:保存了一块栈空间的地址
在ARM中栈空间的作用:压栈保存现场、出栈恢复现场
不同场景下的栈:
1、c语言中的栈区:0-4G虚拟内存中的一块空间,用于保存局部变量、函数参数等。。。。。
2、数据结构中的栈:是一种典型的数据结构,用于保存数据
3、ARM中的栈:保存了一块栈空间中的地址不管栈应用在任何场景下,都是一种存储数据的方式,并且所有的栈都遵循FILO(先进后出)
12.2 R14寄存器
R14寄存器 ---> LR(the linking register)寄存器 ---> 链接寄存器
LR寄存器的作用:用于保存函数的返回地址
12.3 R15寄存器
R15寄存器 ---> PC(the program counter)寄存器 -----> 程序计数寄存器
PC寄存器的作用:用于保存下一条取值指令的地址
12.4 CPSR寄存器
CPSR寄存器 --------> the current program statue register ------> 当前程序状态寄存器 CPSR寄存器的作用:用于保存当前程序的状态
12.5 SPSR寄存器
SPSR寄存器 --------> the saved program statue register -----> 备份程序状态寄存器
SPSR寄存器的作用:用于备份程序的状态
12.6 CPSR寄存器中的位(高4位、低8位)
N[31]位 :负数标志位
当指令的执行结果为负数时,N位被置1,否则清0(一般用于比较大小)
Z[30]位 :零标志位
当指令的执行结果为0时,Z位被置1,否则清0(一般用于判断两个数是否相等)
C[29]位 :进位/借位标志位
进位:
当指令的执行结果需要进位时(当低32位数向高32位数进位时),C位被置1,否则清0
借位:
当指令的执行结果需要借位时(当高32位数向低32位数借位时),C位被清0,否则置1
V[28]位 :符号标志位
当符号位发生变化时,V位被置1,否则清0
I[7]位 :IRQ普通中断屏蔽位
I = 0, 不屏蔽IRQ
I = 1, 屏蔽IRQ
F[6]位 :FIQ快速中断屏蔽位
F = 0, 不屏蔽FIQ
F = 1, 屏蔽FIQ
T[5]位 :状态位
T = 0时, 进入ARM状态,相当于使用ARM汇编指令集
T = 1时, 进入Thumb状态,相当于使用Thumb汇编指令集
M[4:0]位 :模式位
10000 User mode;10001 FIQ mode;
10011 SVC mode;
10111 Abort mode;11011 Undfined mode;
11111 System mode;
10110 Monitor mode;10010 IRQ;
相关文章:

10/11
一、ARM课程大纲 二、ARM课程学习的目的 2.1 为了找到一个薪资水平达标的工作(单片机岗位、驱动开发岗位) 应用层(APP) 在用户层调用驱动层封装好的API接口,编写对应的API接口 ----------------------------------------------------…...

C语言复习第6章 指针(未完成)
目录 一、内存单元与指针1.1 内存单元与内存单元的编号(地址/指针)1.2 内存单元的编号是如何产生的?1.3 地址/内存单元的编号/指针 本身是不需要保存的1.4 32/64位机器最多可以管理多大的内存空间?1.5 怎么计算指针(地址/编号)的大小 二、指针到指针变量2.1 怎么把二进制转换…...

Carrier Aggregation 笔记
### Carrier Aggregation 笔记 #### 引言 - Carrier Aggregation(CA)是 LTE 高级技术之一,srsRAN 4G 支持在 srsENB 和 srsUE 中进行双载波聚合。 - 使用 srsRAN 4G 进行 CA 实验需要能够调谐不同频率的 RF 设备,例如 Ettus Rese…...

JAVA的ArrayList 和 LinkedList的区别
ArrayList 和 LinkedList 都是 Java 中常用的 List 接口的实现类,主要的区别有: 1. 底层数据结构不同 -ArrayList 底层使用的是动态数组数据结构,LinkedList 底层使用的是双向链表数据结构。 2. 获取元素效率不同 ArrayList 支持快速随机访问,通过索引直接获取元素,时间复杂…...

AI知识库如何提升服装电商的运营效率
随着人工智能技术的飞速发展,AI知识库在服装电商领域的应用日益广泛。AI知识库作为一个集成了海量数据、通过高级算法进行智能分析和处理的信息系统,正在深刻改变服装电商的运营模式和效率。本文将详细阐述AI知识库在商品信息管理、库存管理、订单处理等…...

鸿蒙开发(NEXT/API 12)【使用fetch发送网络请求】远场通信服务
场景介绍 发送一个HTTP请求,也可以设置请求头和请求体等参数,并返回来自服务器的HTTP响应。使用Promise异步回调。常用于获取资源,支持流处理和通过拦截器来处理请求和响应。 接口说明 接口名描述fetch(request: Request): Promise发送一个…...

详细解读“霸王面”战术
“霸王面”战术是指在没有得到雇主面试通知的情况下,强行加入面试,以此争取工作机会的求职策略。以下将以3000字左右的篇幅,通过生动形象的例子详细解释这一战术。 一、背景介绍 在当今竞争激烈的就业市场中,求职者需要经历网申…...

【网络安全】注册流程:电子邮件验证绕过
未经许可,不得转载。 文章目录 正文步骤1:修改电子邮件参数步骤2:拦截请求正文 目标:https://app.example.me 注册新账户时,需要输入邮箱进行注册,再在邮箱中验证链接。电子邮件验证链接如下所示: https://app.example.me/signup/activation?token=c6dc625e-5b5a-46…...

Spring和Spring Boot事务讲解和案例示范
引言 Spring框架提供了强大的事务管理支持,使得开发者能够更轻松地实现事务控制。在本篇文章中,我们将深入探讨Spring的事务管理机制,特别是编程式事务管理、声明式事务管理以及在多数据源环境下的事务处理。 第一章 编程式事务管理 编程式…...

前端的全栈混合之路Meteor篇:关于前后端分离及与各框架的对比
这篇属于番外,属于技术性的讨论文,主要谈一下可能困惑不少人的问题。meteor看似一个前后端混合的框架,但实际上它并不是前后端混合的,只是共享了一个数据结构(数据对象)。现实中很多团队都说是前后端分离的…...

OJ在线评测系统 微服务 OpenFeign调整后端下 nacos注册中心配置 不给前端调用的代码 全局引入负载均衡器
OpenFeign内部调用二 4.修改各业务服务的调用代码为feignClient 开启nacos注册 把Client变成bean 该服务仅内部调用,不是给前端的 将某个服务标记为“内部调用”的目的主要有以下几个方面: 安全性: 内部API通常不对外部用户公开,这样可以防止…...

QD1-P19 HTML 总结
本节简单总结:《前端学习笔记1》专题前18篇文章关于HTML的内容。 下一节开始学习CSS了。HTML还是挺易学的,比Linux命令容易。 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p19 在前面18节中,我们了解了HTML的基础知识: …...

Android Framework AMS(03)AMS关键类解读
该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要涉AMS的关键类及其设计理念的解读,主要关注图中下方AMS关键类解读部分即可。这么做的目的是为了后面章节分析AMS时更容易理解…...

Pygame开发贪吃蛇
Pygame专为Python设计,支持多平台(如Windows、Mac OS X、Linux、Android等),提供简单易用的API来创建2D游戏。它不仅仅局限于游戏开发,还可用于图形界面和音频应用。 Pygame提供了简洁的API,使得开发者可以…...

Linux进程间通信(个人笔记)
Linux进程通信 1.进程通信介绍1.1进程间通信目的1.2进程间通信发展1.3进程间通信的具体分类 2.管道2.1匿名管道2.1.1代码实例2.1.2 fork共享管道原理2.1.3 管道的读写规则与特点2.1.4 进程池 2.2 命名管道2.2.1 命名管道的创建2.2.2匿名管道与命名管道的区别2.2.3代码实例 3.Sy…...

SAP S/4HANA 迁移:IT 高管实用指南
新版《通往SAP S/4HANA之路》指南为计划从SAP ERP或SAP S/4HANA本地版本迁移到云端的组织提供了全面的参考。随着数字化转型的加速,尤其是在面临挑战的汽车行业等领域,企业必须采用云ERP解决方案,例如SAP S/4HANA云私有版,以应对瞬…...

Qt源码-Qt多媒体音频框架
Qt 多媒体音频框架 一、概述二、音频设计1. ALSA 基础2. Qt 音频类1. 接口实现2. alsa 插件实现 一、概述 环境详细Qt版本Qt 5.15操作系统Deepin v23代码工具Visual Code源码https://github.com/qt/qtmultimedia/tree/5.15 这里记录一下在Linux下Qt 的 Qt Multimedia 模块的设…...

卸载PLSQL及标准卸载流程
目录 1. 卸载PLSQL2. 删除注册表3. 删除数据信息 1. 卸载PLSQL 等待进度条走完 2. 删除注册表 regedit 右击删除 3. 删除数据信息 由于AppData是隐藏文件,需要勾选隐藏的项目。 重启电脑,PLSQL就卸载成功了。...

如何使用ssm实现办公OA系统0
TOC 10907ssm办公OA系统10907ssm0 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作,对于办公OA系统所牵扯的管理及数据保存都是非常多的,例如管理员;主页、个人中心、公司公告管理、设备分类管理、办公设备管理、…...

IPguard与Ping32—选择合适的企业数据保护解决方案
在数字化时代,企业面临着各种数据安全挑战,选择合适的保护工具至关重要。IPguard与Ping32是两款备受关注的数据保护软件,但它们各自的功能和适用场景有所不同,企业在选择时需根据自身需求做出明智决策。 Ping32:全面的…...

2024 kali虚拟机安装教程,分两大步骤,图文讲解(2)
准备工作: 按照图文讲解(1)搭建好虚拟机,继续以下步骤 2024 kali虚拟机安装教程,分两大步骤,图文讲解(1)-CSDN博客 正式开始 1.开启,↑ ↓ 方向键,选择第一…...

【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem
git clone 是 Git 版本控制系统中的一个基本命令,用于从远程仓库复制一个完整的版本库到本地。这个命令不仅复制远程仓库中的所有文件,还复制仓库的历史记录,使得你可以在本地进行版本控制操作,如提交(commitÿ…...

基于STM32的智能家居--硬件接线
分配GPIO 1.首先分配串口通讯引脚,该开发板中有三组串口引脚分别分配如图所示。 2.分配SPI。 3.其他为普通GPIO口,B8,B9模拟IIC协议与OLED屏幕进行通讯。...

mac电脑如何删除应用程序?怎么删除苹果电脑里的软件
在使用Mac电脑的过程中,随着时间的推移,我们可能会安装大量的应用程序。然而,这些应用程序中有很多可能只是临时使用,或者已经不再需要了。这些无用的应用程序不仅占据了宝贵的硬盘空间,还可能拖慢Mac系统的运行速度。…...

Hive优化操作(一)
Hive SQL 优化指南 在使用 Hive 进行数据分析时,提高查询性能至关重要。以下是一些具体的优化策略,帮助我们在工作中更有效地管理和查询数据。 一、 减少数据量进行优化 1. 分区表优化 分区是一种表的子集,用于按某一列(如日期…...

Vue中常用指令——(详解,并附有代码)
文章目录 一.指令合集1.0 概述1.1 插值表达式1.2 v-text/v-html1.3 v-show/ v-if1.4 v-on1.4.1 内联语句1.4.2 事件处理函数 1.5 v-bind1.6 Test1.7 v-for 一.指令合集 内容渲染指令(v-html、v-text)条件渲染指令(v-show、v-if、v-else、v-e…...

redistemplate实现点赞相关功能
使用Redis的SET数据结构来存储每个实体的点赞用户ID列表,方便进行点赞数量的计数和用户点赞状态的检查。以下是一个小demo,只提供简单思路。 Service public class LikeService {Autowiredprivate RedisTemplate redisTemplate;//点赞public Long like(…...

C++ 算法学习——7.4.1 优化算法——双指针
双指针法(Two Pointers)是一种常用的算法技巧,通常用于解决数组或链表中的问题。这种技巧通过维护两个指针,通常分别指向数组或链表的不同位置,来协同解决问题。双指针法一般有两种类型:快慢指针和左右指针…...

镁光DDR3的命名
64M16的解释如图。 125是指一个时钟周期需要1.25ns走完,1us对应 1MHZ, 1ns对应1000MHZ ,那么1.25ns对应的时钟频率,就先用 1/1.25得到 1.25us对应的时钟频率 0.8 ,然后再乘以1000,得到800就是MHZ 带宽的计算就是 800M…...

[Git] Git下载及使用 从入门到精通 详解(附下载链接)
前言 目录 Git概述 简介 下载 Git代码托管服务 Git常用命令 Git全局配置 获取Git仓库 在本地初始化一个Git仓库 从远程仓库克隆 基本概念 工作区文件状态 本地仓库操作 远程仓库操作 分支操作 标签操作 在IDEA中使用Git 在IDEA中配置Git 本地仓库操作 远程仓…...