10/11

news2024/11/29 20:49:30

一、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.coloradmin.cn/o/2206057.html

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

相关文章

怎么做接口自动化测试

在分层测试的“金字塔”模型中,接口测试属于第二层服务集成测试范畴。相比UI层(主要是WEB或APP)自动化测试而言,接口自动化测试收益更大,且容易实现,维护成本低,有着更高的投入产出比&#xff0…

2024徐州科技企业-京东(无锡)基地数字经济交流座谈会

2024年6月4日下午,2024徐州科技企业-京东(无锡)基地数字经济交流座谈会在无锡市经开区京东(无锡)数字基地成功举办,本次活动由无锡经济开发区管理委员会指导,京东科技主办,无锡经开雪浪小镇未来园区有限公司、江南大学经贸学院协办。来自徐州市的40家高新技术企业以及行业专家、…

TTM-RE: Memory-Augmented Document-Level Relation Extraction(内存增强的文档级关系提取)

摘要 文档级关系提取旨在对文档中任意两个实体之间的关联进行分类。以往的文档级关系提取方法在充分利用不同噪声水平的大量训练数据的潜力方面是无效的。例如,在ReDocRED基准数据集中,在大规模、低质量、远距离监督的训练数据上训练的最先进的方法通常…

lnmp - RBAC方案设计与实现

概述 实践的是一套企业内部使用后台OA管理系统,对这套系统设计的RBAC(Role-Based Access Control,基于角色的访问控制),RBAC 方案旨在通过将后台用户与角色进行关联,再将角色与权限进行关联,实现对系统资源…

力扣之607.销售员

文章目录 1. 607.销售员1.1 题目说明1.2 准备数据1.3 解法1.4 结果截图 1. 607.销售员 1.1 题目说明 表: SalesPerson ------------------------ | Column Name | Type | ------------------------ | sales_id | int | | name | varchar | | salary | int | | commission_ra…

【CURL命令】命令行或脚本进行API测试

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 【CURL命令】命令行或脚本进行API测试 简介使用…

InfiniiVision HD3 系列示波器

_XLT_ InfiniiVision HD3 系列示波器 苏州新利通仪器仪表 使用带有定制专用集成电路 (ASIC) 的便携式示波器执行数字调试,该电路提供的垂直分辨率是其他通用示波器的四倍,注入噪声是其他通用示波器的一半。使用示波器进行调试&…

canvas:绘制点和点之间连线

效果图&#xff1a; <template><div class"home-box"><canvas id"canvas" /><div class"lightCircle" ref"circleRef" v-for"(item,index) in 5" :key"index"></div><div cla…

makefile与gdb的使用

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2024年10月11日 &#x1f4e8; 博主码云地址&#xff1a;渣渣C &#x1f4d5;参考书籍&#xff1a…

vue 解决高德地图Uncaught Error: Invalid Object: Pixel(NaN, NaN)

有点啰嗦&#xff0c;可以直接跳到最后看解决方法。 问题排查过程 原因起始于一个新需求&#xff1a;在编辑列表信息时需要修改设备位置。 按照文档一番操作&#xff0c;发现完美需求解决了。后续测试的时候就发现浏览器报错Uncaught Error: Invalid Object: Pixel(NaN, NaN)…

在 Notebook 中启动 FastAPI

如何在 Notebook 使用 FastAPI 对外提供 RestAPI&#xff0c;当我们测试完模型时&#xff0c;有事需要对外提供 API 进行测试。FastAPI 是 Python 中快速提供 Rest API 的框架&#xff0c;本文将对外实现一个 OCR 的图片转文字的服务。 OCR 服务 本文使用 GOT OCR 提供 OCR 识…

[Git] Git下载及使用 从入门到精通 详解(附下载链接)

前言 目录 Git概述 简介 下载 Git代码托管服务 Git常用命令 Git全局配置 获取Git仓库 在本地初始化一个Git仓库 从远程仓库克隆 基本概念 工作区文件状态 本地仓库操作 远程仓库操作 分支操作 标签操作 在IDEA中使用Git 在IDEA中配置Git 本地仓库操作 远程仓…

【unity框架开发7】对象池的使用,如何封装一个对象池管理器

文章目录 什么是对象池&#xff1f;对象池有什么用&#xff1f;对象池的原理对象池的实现1、从对象池获取对象2、回收对象3、回收所有对象4、预先往这个对象池中加载指定数量的游戏对象5、最终代码 封装对象池管理器1、对象池管理器代码2、测试调用3、生成和回收游戏对象时自动…

LLM基础常见面试题

#############【持续更新】############## LLM基础常见面试题 简单介绍一下大语言模型【LLMs】&#xff1f; 大模型&#xff1a;一般指1亿以上参数的模型&#xff0c;但是这个标准一直在升级&#xff0c;目前万亿参数以上的模型也有了。大语言模型&#xff08;Large Languag…

在 Windows 11 安卓子系统中安装 APK 的操作指南

这个软件好像不可以在纯android系统中使用&#xff08;不知道是缺了什么&#xff09;&#xff0c;其他对于android的虚拟机要不缺少必要功能组件&#xff0c;要不性能过于低下。本方法致力于在带有谷歌框架WSA中运行该APK 在 Windows 11 安卓子系统中安装 APK 的操作指南 本指…

渗透测试系列之靶机渗透

Helpline是一个困难的靶机&#xff0c;知识点涉及EFS解密和ME SDP的多个漏洞&#xff0c;包括XXE漏洞、LFI\任意文件下载漏洞、身份认证绕过漏洞以及远程代码执行漏洞等. 通关思维导图 0x01 侦查 端口探测 首先使用nmap进行端口扫描 nmap -Pn -p- -sV -sC -A 10.10.10.13…

Obsidian复制代码块代码正确方式

最近在用obsidain做笔记&#xff0c;整体使用下来感觉不错&#xff0c;尤其是强大的检索功能&#xff0c;但是刚才使用其内置的复制代码块功能时&#xff0c;却被恶心到了。 现有背景是&#xff1a;我有一个pydantic的 code block&#xff0c;编辑器处于编辑模式如下&#xff…

Visual Studio的实用调试技巧总结

对于很多学习编程的老铁们来说&#xff0c;是不是也像下面这张图一样写代码呢&#xff1f; 那当我们这样编写代码的时候遇到了问题&#xff1f;大家又是怎么排查问题的呢&#xff1f;是不是也像下面这张图一样&#xff0c;毫无目的的一遍遍尝试呢&#xff1f; 这篇文章我就以 V…

【C语言】深入理解指针(二)(上)

本篇博客将讲解的知识&#xff1a; &#xff08;1&#xff09;指针的使用和传址调用 &#xff08;2&#xff09;数组名的理解 1、指针的使用和传址调用 &#xff08;1&#xff09;strlen 的模拟实现 库函数strlen的功能是求字符串的长度&#xff0c;统计的是字符串中‘\0’之…

onnx代码解读

一、定义 torch.jit.trace 相关代码解读onnx 内部实现 3 查看是否为aten 算子aten 算子实现torch.autograd.Functions 算子实现自定义算子实现查找未实现的节点一次性发现所有的未实现 aten 算子 二、实现 torch.jit.trace 相关代码解读 1. torch.jit.script() : 将其转换为…