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;
 

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

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

相关文章

Redis:通用命令 数据类型

Redis:通用命令 & 数据类型 通用命令SETGETKEYSEXISTSDELEXPIRETTLTYPEFLUSHALL 数据类型 Redis的客户端提供了很多命令用于操控Redis,在Redis中,key的类型都是字符串,而value有多种类型,每种类型都有自己的操作命…

pytorch 与 pytorch lightning, pytorch geometric 各个版本之间的关系

主要参考 官方的给出的意见; 1. pytorch 与 pytorch lightning 各个版本之间的关系 lightning 主要可以 适配多个版本的 torch; https://lightning.ai/docs/pytorch/latest/versioning.html#compatibility-matrix; 2. pytorch 与 pytorch geometric 各…

ComfyUI | 5分钟部署最新Flux大模型

Midjourney 和 Stable Diffusion 都是目前流行的 AI 图像生成工具,它们能够根据文本描述生成高质量的图像。都是基于深度学习技术的文本到图像生成模型,但它们各自基于不同的大模型。 但最近推出了一款比前两者更强大,生成图像更加逼真&…

windows端口被占用但是查不到进程的问题排查

在开发环境上经常遇到端口被占用,但是 netstat -ano|findstr 3306 查不到进程号,没法强杀解决。 这种情况,很有可能端口被排除了,可用命令: netsh interface ipv4 show excludedportrange protocoltcp 可以看到mysql的…

一、制作UI自适应

当前分辨率 更改分辨率 一、原因 一款游戏的UI,可能会根据玩家的分辨率和屏幕尺寸,产生不同的变化 例如:某一个Image位移到了摄像机外面 因此需要通过锚点和屏幕自适应来制作完美的效果 二、解决方法 1、锚点 作用是:根据当…

Unity3D相关知识点总结

Unity3D使用的是笛卡尔三维坐标系,并且是以左手坐标系进行展示的。 1.全局坐标系(global) 全局坐标系描述的是游戏对象在整个世界(场景)中的相对于坐标原点(0,0,0)的位置…

前端接收到的日期格式为 2021-12-07T16:44:53.298+00:00 怎么办?

在写项目的时候,给前端发送了一个 Date 类型的数据,发现格式不对: 可以通过在application 配置文件中进行如下配置: spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8 前端在获取就发现格式正确

嵌入式硬件设计:从原理到实践

嵌入式硬件设计:从原理到实践 嵌入式硬件设计在物联网、智能设备、工业自动化等领域中扮演着至关重要的角色。随着技术的发展,越来越多的设备依赖于嵌入式系统进行实时控制与数据处理。本文将详细介绍嵌入式硬件设计的各个方面,从设计原理到…

Study-Oracle-11-ORALCE19C-ADG集群搭建

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 一、ORACLE--ADG VS ORACLE--DG的区别 1、DG是Oracle数据库的一种灾难恢复和数据保护解决方案,它通过在主数据库和一个或多个备用数据库之间实时复制数据,提供了数据的冗余备份和故障切换功能。…

实现一个时钟

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QPainter>//画家类 #include<QTime>//时间类 #include<QTimer>//定时器类QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget …

项目管理——Gantt图与Pert图

目录 前言相关知识点相关题目 前言 本文是在关于软考中软件设计师中的项目管理中的知识点&#xff0c;关于Gantt图与Pert图 相关知识点 甘特&#xff08;Gantt&#xff09;图 优点 可以清晰的描述每个任务从何时开始的&#xff0c;到何时结束&#xff0c;任务的进程情况以及…

C++和OpenGL实现3D游戏编程【连载14】——VBO、VAO和EBO应用

&#x1f525;C和OpenGL实现3D游戏编程【目录】 1、本节实现的内容 我们从一开始学OpenGL到现在&#xff0c;OpenGL的图形绘图必须在glBegin()和glEnd()函数之间完成&#xff0c;在此基础之上&#xff0c;才能进行后续操作功能。但是我们今天要讨论一下OpenGL图形绘制的模式&a…

SSM(5)(动态sql <if>、<where>、返回主键值)

返回主键值&#xff1a; 方法一&#xff1a; useGeneratedKeys 为ture 声明 返回主键 keyProperty 表示要返回的值 封装到对象的属性中 但是这一种方法不支持Orcal数据库。 <insert id"save2" parameterType"com.findyou.entity.User" useGenerated…

使用IMX6UL定时器EPTI实现延时

上一节&#xff0c;我们讲解了如何使用Imx6uL上面的定时器EPTI&#xff0c;这一节我们将使用EPTI进行实战&#xff0c;也就是使用定时器的效果来使用延时 在之前的实验中我们都使用到了按键&#xff0c;用到按键就要处理因为机械结构带来的按键抖动问题&#xff0c;也就是按键消…

01 为什么要学习数据结构与算法

为什么要学习数据结构与算法 一、问题提出 ​ 最早计算机的设计初衷主要用于军事上枪炮的弹道计算和火力表的测试&#xff0c;后来更多的用于科学计算&#xff0c;即数值类的计算&#xff0c;而现在&#xff0c;计算机深入到日常生活的各个方面&#xff0c;其计算的数据早已从…

毕业设计选题:基于php+vue+uniapp的新闻资讯小程序

开发语言&#xff1a;PHP框架&#xff1a;phpuniapp数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;PhpStorm 系统展示 管理员登录界面 管理员功能界面 新闻类别管理 新闻信息管理 用户管理 管理员管…

基于SpringBoot+Uniapp的家庭记账本微信小程序系统设计与实现

项目运行截图 展示效果图 展示效果图 展示效果图 展示效果图 展示效果图 5. 技术框架 5.1 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更…

MicroFlow:一种高效的基于Rust的TinyML推理引擎

英文论文标题&#xff1a;MICROFLOW: AN EFFICIENT RUST-BASED INFERENCE ENGINE FOR TINYML 中文论文标题&#xff1a;MicroFlow&#xff1a;一种高效的基于Rust的TinyML推理引擎 作者信息&#xff1a; Matteo Carnelos&#xff0c;意大利帕多瓦大学&#xff0c;Grepit AB,…

潜水打捞系统助力,破解汽车打捞难题

随着人类活动的不断扩展&#xff0c;汽车落水事故频发&#xff0c;成为救援工作中的一大难题。汽车因其重量和结构特性&#xff0c;一旦沉入水体&#xff0c;打捞工作将面临巨大挑战。传统的打捞方法往往效率低下&#xff0c;且在操作过程中可能会对汽车造成进一步的损害&#…

Excel中使用SQL语句的四种方法

总结在 Excel 中使用 SQL 语句的四种方法&#xff0c;各种方法都有各自的适用场景&#xff0c;可以选择自己熟悉的或喜欢方式。本文以在 Excel 中操作 MS SQL 数据库的数据为例进行说明。MS SQL 的数据如下&#xff0c;使用微软 SQLExpress 版本。 方法 1&#xff1a; Excel 现…