ARM总结and复习

news2024/9/22 3:35:12

安装交叉编译工具链 

a. 为什么安装

因为arm公司的指令集在不断迭代升级,指令集日益增多,而架构是基于指令集研发的,所以架构不一样,指令集也不一样

eg:arm架构使用的是arm指令集 

x86架构使用的是x86指令集

而我们日常开发环境中linux的架构为x86架构  而开发板子的架构为arm架构他们两者的架构不一样,指令集不一样所以需要交叉编译工具链开弥补这个问题,使不同的架构环境下可以去开发板子

b. 步骤

1.~目录下创建一个文件夹

2.压缩包放到这个文件夹中

3.然后解压到这个文件夹中

4.配置环境变量(四种方法   使用当前用户有效的那种方法 sudo  vi  ~/.bashrc,path后添加:/路径 )

5.source重启环境变量   source ~/.bashrc

6.查看自己是否完成安装 (环境变量下路径名字 -v)

c. 版本gcc-7.5.0

ARM相关概念

a. 汇编指令

编辑器将汇编指令生成代码,占用代码段空间

b. 指令集

很多的汇编指令的集合

eg:

特殊寄存器操作(msr/mrs)

跳转操作指令(b/bl)

伪指令(ldr)

数据搬移指令(mov/mvn)

移动操作指令(lsl/lsr/ror/asr)

位运算指令(add/adc/sub/sbc/mul)

比较指令(cmp)

c. 架构

arm公司随指令集的不断迭代,会根据不同的指令集设计出不同的架构,因此架构不一样对应的指令集不一样

d. 内核

arm公司会根据不同的架构来设计内核

eg:

stm32mp157aaa=cortex-A7核*2+cortex-M4核

e. SoC

soc又称片上系统,大家一般喜欢叫做芯片,arm公司其实不生产芯片,而是将内核生产并授权给各个合作的厂商,厂商将这个内核加上一些外设之类的附加控制器(外设),进行二次开发就是所说的芯片了

RISC和CISC指令集区别

RISC精简指令集(arm架构)

对复杂指令集进行提取一些简单且常用指令且指令宽度和指令周期是固定的

指令宽度:指令编译器形成机器码所占空间大小

指令周期:执行一条指令所需要的时间

验证

arm-linux-gnueablinf-gcc -marm test.c

arm-linux-gnueabinf-objdump -D a.out > a.dis

vi a.dis

我们会发现从main函数入口后开始 地址偏移的大小都是4

CISC复杂指令集(x86架构)

对着指令的性能有着较高的要求而指令宽度和指令周期没有固定的要求

验证:

arm-linux-gnueablinf-gcc  test.c

arm-linux-gnueabinf-objdump -D a.out > a.dis

vi a.dis

我们会发现从main函数入口后开始 地址偏移大小都不一样

ARMv7架构和ARMv8架构区别

ARMv7架构是32位架构,而ARMv8架构是64位架构且向下兼容ARMv7架构

ARMv7架构是寻址地址是2^32大小,ARMv8架构寻址地址是2^64大小

ARMv7和ARMv8生成一条汇编指令的大小都是4字节

ARM处理器工作模式

ARM处理器首先分为特权模式和非特权模式

而非特权模式只有user模式

特权模式则又分为异常模式和非异常模式

其中非异常模式只有system模式

而其中异常模式又分为:

FIQ

IRQ

undef模式

SVC模式

data abort模式

prefech adbort模式

而cortex处理器多一个monitor模式(安全监测模式)

以上模式都可以通过软件和硬件的方式进行切换

且cortex处理器比arm处理器多一个monitor安全检测模式

寄存器

a. 位置

arm公司会根据不同的指令集设计不同的架构,而根据不同的软件架构生产不同的内核

而寄存器就存在于内核之中的储存器之中

访问 寄存器通过加关键词register进行访问,只可以用寄存器编号进行,地址不可以

b. 特点

短暂存储数据,运算速度极快,每个模式都有对应的寄存器,user和system模式公用一个寄存器 

c. 特殊功能寄存器

i. sp

栈指针寄存器,数据入栈和数据出栈时候需要移动栈指针(数据初始化)

ii. lr

链接寄存器,用于保存返回地址

iii. pc

程序计数寄存器,用于记录下一条指令运行的位置

iv. cpsr

用于保存当前程序状态的寄存器

v. spsr

用于保存cpsr寄存器的数值

d. cpsr寄存器中高4位,低8位作用

n[31]:是否负数标志位

z[30]:是否为0标志位

c[29]:是否进位标志位

v[28]:是否溢出标志位

为1都是确认

I[7]:是否屏蔽IRQ

F[6]:是否屏蔽FIQ

T[5]:状态位

M[4:0]:模式位

汇编指令格式

数据操作指令

a. 数据搬移指令mov mvn ldr

mov :将立即数,有效数(取反为立即数),寄存器放入目标寄存器中

mvn:取反后放入目标寄存器中

ldr:伪指令,因为大部分的数不是一个有效数和立即数,需要赋值的话可以借助ldr伪指令来实现

b. 移位操作指令lsl lsr asr ror

lsl:逻辑左移,移出补0

lsr:逻辑右移,移出补0

asr:循环右移,低位移出,高位补0 

ror:算术右移,低位移出,高位补符号位

c. 位运算操作指令and orr bic eor

and:与运算, 与0为0 ,与1不变

orr:或运算,或0不变,或1为1 

eor:异或运算,异或0不变,异或1取反

bic:按位清除

d. 算数运算操作指令add adc sub sbc mul

add:相加不考虑进位

adc:相加考虑进位

sub:相减不考虑借位

sbc:相减考虑借位

mul:相乘

e. 比较指令cmp

本质上就是做相减运算,比较两个数大小关系

跳转指令 b bl

b:有去无回

bl:有去有回

回的表现在lr寄存器会不会记录返回地址

特殊功能寄存器操作指令 mrs msr

mrs:向cpsr的值读到目标寄存器中

msr:向目标寄存器的值写入目标寄存器中

内存操作指令

a. 单寄存器操作指令ldr str

ldr rd,[rm]向rm值读入rd中

str rd,[rm]将rd的值写入rm中

b. 多寄存器操作指令ldm stm

ldm rd,{r0-r5}:将rd的值读到r0-r5

stm rd,{r0-r5}:将r0-r5的值写到rd中

c. 栈指针操作指令ldmfd stmfd

栈指针操作指令  

ldmfd sp!,{寄存器列表} :将栈指针寄存器sp中的值读到寄存器列表中

stmfd sp!,{寄存器列表}:将寄存器列表中的值依次写入sp寄存器中

混合编程

a. ATPCS规范

ATPCS是Arm Thumb Produce Call  standard

arm默认使用的是满减栈

传参时默认使用r0-r3寄存器,参数最好不要超过4个

返回值使用r0进行返回

b. 汇编调用C

c. C调用汇编

d. 内联汇编

Cortex-A7核LED灯实验

a. 分析硬件电路图

b. 分析框图

c. 分析RCC章节

d. 分析GPIO章节

e. 编写程序

f. 通过串口工具下载程序,观察实验现象

如何封装函数,实现LED灯点亮 PE10 PF10 PE8

a. GPIO引脚初始化函数

b. GPIO引脚操作函数

Cortex-A7核UART实验

a. 总线概念

b. 连接方式(ST-LINK仿真器)

c. 配置信息

d. 协议

e. 分析框图

f. 分析RCC章节

g. 分析GPIO章节

h. 分析UART章节

i. 使用串口做过实验

异常处理流程

a. 异常源

b. 异常源和异常模式之间对应关系

c. 异常处理流程

d. 异常向量表

e. 软中断指令

f. 编写异常处理流程代码  

17. Cortex-A7核中断实验

a. 分析电路图: 操作的对应引脚编号

b. 分析框图: 分析芯片手册章节

c. 分析芯片手册:

i. 分析RCC章节: 使能对应组控制器

ii. 分析GPIO章节: 设置引脚为输入模式

iii. 分析EXTI章节: 设置引脚触发方式

iv. 分析GIC章节

d. 编写代码

e. 下载调试

18. Cortex-A7核IIC实验

a. 同步串行半双工总线:

i. SCL时钟线

ii. 只有一根双向的数据线SDA

iii. 按位进行数据传输(先发送高位,在发送低位)

b. 外接两个上拉电阻,作用:在总线为空闲状态时,总线默认为高电平状态

c. 单主机多从机模式,在总线上,每一个从机都有自己唯一的7位从机地址

d. 发送器、接收器、主机、从机

e. 时序:起始信号、停止信号、数据传输信号、应答/非应答信号

f. 协议:

i. 主机给从机发送一个字节

ii. 主机给从机发送多个连续的字节

iii. 从机给主机发送一个字节

iv. 从机给主机发送多个连续的字节

g. 分析温湿度传感器芯片si7006

h. 编写采集程序:

i. 时序:起始信号、停止信号、数据传输信号、应答/非应答信号

ii. 协议:

1. 初始化si7006芯片

2. 采集温湿度传感器协议

iii. 通过公式,完成数字量到模拟量之间转换

19. Cortex-A7核SPI实验

a. 同步串行全双工三线/四线总线

b. 主机产生时钟信号,作用给从机完成数据收发同步

c. 2根单向数据信号线(MOSI / MISO)

d. 单主机多从机模式

e. 四线制单主机多从机:

i. NSS

ii. SCL

iii. MOSI

iv. MISO

f. 三线制单主机单从机

g. SPI总线协议/通信模式: SPI总线边沿触发,边沿采样

h. IIC总线和SPI总线相同点/不同点

i. 分析M74HC595芯片:

i. 移位寄存器: 移位寄存器时钟源(上升沿)

ii. 锁存器: 锁存时钟源(上升沿)

iii. 串行一位一位写入到移位寄存器=>锁存器=>并行数据输出

20. Cortex-A7核PWM实验

a. PWM相关概念:脉冲、周期、频率、占空比

b. 分析框图(rcc / gpio / tim4)

c. RCC章节:使能对应组控制器

d. GPIO章节:设置复用功能模式,以及对应复用功能

e. TIM章节:方波信号

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

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

相关文章

QueryDet代码解析

配置文件 # 表示该配置文件是基于另一个配置文件BaseRetina.yaml进行扩展和覆盖的 _BASE_: "../BaseRetina.yaml" # 指定输出目录,训练过程中的日志、模型权重和评估结果将保存在该目录下。 OUTPUT_DIR: "work_dirs/visdrone_querydet" # 指定…

前端面试 跨域理解

2 实现 2-1 JSONP 实现 2-2 nginx 配置 2-2 vue 开发中 webpack自带跨域 2 -3 下载CORS 插件 或 chrome浏览器配置跨域 2-4 通过iframe 如:aaa.com 中读取bbb.com的localStorage 1)在aaa.com的页面中,在页面中嵌入一个src为bbb.com的iframe&#x…

Mybatis批量更新对象数据的两种方法

说明:遇到一次需要批量修改对象的场景。传递一个对象集合,需要根据对象ID批量修改数据库数据,使用的是MyBatis框架。查了一些资料,总结出两种实现方式。 创建Demo 首先,创建一个简单的Demo; &#xff08…

SOCKS55代理 VS Http代理,如何选择?

在使用IPFoxy全球代理时,选择 SOCKS55代理还是HTTP代理?IPFoxy代理可以SOCKS55、Http协议自主切换,但要怎么选择?为解决这个问题,得充分了解两种代理的工作原理和配置情况。 在这篇文章中,我们会简要介绍 …

java自动化之自动化框架项目(第五天-解析并执行初始化sql)

1.实现目标 先将常用变量占位符替换为实际值&#xff0c;然后解析并执行初始化sql&#xff0c;保证用例中的数据可用&#xff0c;这样不用每次执行测试前修改测试数据。 2.添加pom依赖 连接操作数据库&#xff08;pom.xml文件中添加&#xff09; <!-- https://mvnreposi…

深度学习PyTorch 之 RNN-中文多分类【代码解析】

上篇文章给出了RNN-中文多分类的代码实现&#xff0c;本次主要是对RNN的架构进行一个详细的解析 1、主代码 class RNN(nn.Module):def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim, n_layers, bidirectional, dropout):super().__init__()# 初始化函数…

白话transformer(一):注意力机制

前面我们分篇讲述了transformer的原理&#xff0c;但是对于很多刚接触transformer的人来说可能会有一点懵&#xff0c;所以我们接下来会分三篇文章用白话的形式在将transformer 讲一遍。 前文链接 Bert基础(一)–自注意力机制 Bert基础(二)–多头注意力 Bert基础(三)–位置编…

Linux安装JumpServer并结合内网穿透实现公网访问本地服务

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

全新攻击面管理平台

首页大屏 内测阶段&#xff0c;免费试用一个月 有兴趣体验的师傅&#xff0c;来长亭云图极速版群里找我 py

基于改进的YOLO算法在TT100K数据集上的交通标志目标检测

交通标志是道路交通管理中的重要元素&#xff0c;准确高效地检测交通标志对于智能交通系统具有重要意义。本文基于改进的YOLO算法&#xff0c;结合TT100K数据集&#xff0c;实现了交通标志的目标检测。通过优化网络结构和训练策略&#xff0c;提升了交通标志检测的准确性和效率…

vue 安装各种问题

新下载了个项目模板&#xff0c;安装包就遇到了各种各样问题 电脑&#xff1a;mac 使用npm i 等命令一直安装项目&#xff0c;然后一直报错 2534 info run canvas2.11.2 install node_modules/canvas node-pre-gyp install --fallback-to-build --update-binary 2535 info r…

rocky使用yum安装msyql8.0

先查看一下源是否有mysql和mysql的版本 yum list mysql* 直接yum install mysql-server 会安装相关7个包 安装完毕后systemctl start mysqld启动mysql 然后mysql_secure_installation配置权限 mysql8的配置稍微有点不一样&#xff0c;按照英文提示来就行&#xff0c;不会的…

rocketmq+rocket-dashboard win10安装部署+注册为Windows服务

1.1 首先去官网下载zip包 选择自己需要的版本 下载 | RocketMQ 1.2 、下载后&#xff0c;解压到指定目录 1.3、配置RocketMQ环境变量 注意&#xff0c;看对应的版本需要jdk版本 1.4、启动mqnameserver 进入bin目录下&#xff0c;双击启动mqnamesrv.cmd 启动后&#xff0c;…

【推荐算法系列十八】:DSSM 召回算法

参考 推荐系统中 DSSM 双塔模型汇总&#xff08;二更&#xff09; DSSM 和 YouTubeDNN 都是比较经典的 U2I 模型。 U2I 召回 U2I 召回也就是 User-to-Item 召回&#xff0c;它基于用户的历史行为以及用户的一些个人信息&#xff0c;对系统中的候选物品进行筛选&#xff0c;挑…

蓝桥杯倒计时 41天 - 二分答案-最大通过数-妮妮的月饼工厂

最大通过数 思路&#xff1a;假设左边能通过 x 关&#xff0c;右边能通过 y 关&#xff0c;x∈[0,n]&#xff0c;通过二分&#xff0c;在前缀和中枚举右边通过的关卡数&#xff0c;保存 xy 的最大值。 #include<bits/stdc.h> using namespace std; typedef long long ll…

价格腰斩,腾讯云2024优惠活动云服务器62元一年,多配置报价

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

5、Linux-vi编辑器

目录 一、介绍 二、三种模式 1、命令模式&#xff08;默认&#xff09; 2、插入模式 3、末行模式 4、模式转换 三、基本操作 1、保存文件&#xff08;末行模式下&#xff09; 2、行号&#xff08;末行模式下&#xff09; 3、查找&#xff08;末行模式下&#xff09; …

Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Fastapi 景天的主页&#xff1a;景天科技苑 上一章&#xff0c;我们讲到了fastapi数据库操作ORM的配置和查询操作&#xff0…

【Matlab深度学习】详解matlab深度学习进行时间序列预测

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 &#x1f510;#### 防伪水印——左手の明天 ####&#x1f510; &#x1f497; 大家…

框架漏洞-->Struts2 Docker_Vulnhub搭建

来浅浅的讲一下Struts2漏洞 目录 1.Docker_Vulnhub搭建 2.Struts2 3.Struts2的框架特征 4.S2-029-->Remote Code Execution 5.漏洞复现 1.RCE 2.Getshell 1.Docker_Vulnhub搭建 因为我用的是Linux&#xff0c;所以我选择直接搭个docker&#xff0c;这里我建议先换个…