ARM总结and复习
安装交叉编译工具链
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章节:方波信号
相关文章:

ARM总结and复习
安装交叉编译工具链 a. 为什么安装 因为arm公司的指令集在不断迭代升级,指令集日益增多,而架构是基于指令集研发的,所以架构不一样,指令集也不一样 eg:arm架构使用的是arm指令集 x86架构使用的是x86指令集 而我们日常开发环境中linux的架构…...
非功能测试的定义、类型和示例
软件已从推动者转变为不同行业企业成功的核心支柱。因此,非功能测试活动成为人们关注的焦点。然而,许多技术和质量保证专业人员并没有意识到非功能测试的必要性。 他们必须了解什么是非功能测试以及为什么必须鼓励将其作为企业应用程序开发项目的实践。…...

Angular基础---HelloWorld---Day1
文章目录 1. 创建Angular 项目2.对Angular架构的最基本了解3.创建并引用新的组件(component)4.对Angular架构新的认识(多组件)5.组件中业务逻辑文件的编辑(ts文件)6.标签中属性的绑定(1) ID的绑定(2) class…...
k8s部署项目常见的问题及解决方案
在Kubernetes(k8s)部署项目中,确实存在一些常见问题和挑战。以下是这些问题及其相应的解决方案: 网络插件问题: 问题:网络插件配置不当或版本不兼容可能导致Pod间通信问题。解决方案:重新部署或…...
Redis实现乐观锁+秒杀场景demo
在Redis中,乐观锁通常是通过使用 WATCH、MULTI 、EXEC和DISCARD命令实现的。这种乐观锁机制允许客户端在执行事务期间监视一个或多个键,并且只有在事务执行期间没有其他客户端修改被监视的键时,才会执行事务。 应用场景: 库存控…...

阅读笔记 | Transformers in Time Series: A Survey
阅读论文: Wen, Qingsong, et al. “Transformers in time series: A survey.” arXiv preprint arXiv:2202.07125 (2022). 这篇综述主要对基于Transformer的时序建模方法进行介绍。论文首先简单介绍了Transformer的基本原理,包括位置编码、多头注意力机…...
WPF MVVM中List<>和ObservableCollection<>的区别与对比分析
在WPF MVVM(模型-视图-视图模型)架构中,数据绑定是实现UI与后端逻辑分离的关键特性。为了使UI能够响应后端数据的变化,通常需要用到特定的集合类型。在WPF中,最常见的两种集合类型是List< T>和ObservableCollect…...
python给企微发消息
方法一:webhook方式。使用群机器人给企微群发消息 import requestsdef qwxsendmessage(msg):urlhttps://qyapi.weixin.qq.com/cgi-bin/webhook/send?key6c598840-804a-4eb5-a999-a023313 #url换成自己群机器人的webhookurldata{msgtype:text,text:{content:msg}}…...
TCP/IP状态迁移
TCP(传输控制协议)是一种面向连接的流式控制协议,它定义了不同的状态以管理通信过程中的连接。TCP 状态迁移描述了 TCP 连接在不同状态之间的转换过程,常见的 TCP 状态包括 CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、…...
C语言实现各类排序算法
排序算法是计算机科学中的一个重要概念,它是一种将一个无序的数列重新排列成有序的方法。常见的排序算法有: 选择排序(Selection Sort) 选择排序是一种简单直观的排序演算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序…...

Network LSA 结构简述
Network LSA主要用于描述一个区域内的网络拓扑结构,包括网络中的路由器和连接到这些路由器的网络。它记录了每个路由器的邻居关系、连接状态以及连接的度量值(如带宽、延迟等),以便计算最短路径和构建路由表。display ospf lsdb n…...

揭示IP风险画像的作用与价值
在当今数字化时代,互联网的快速发展为企业和个人带来了巨大的机遇,同时也带来了各种安全风险和威胁。随着网络攻击手段的不断升级和演变,传统的安全防御手段已经无法满足对抗复杂多变的网络威胁的需求。IP风险画像作为一种新型的网络安全解决…...
[python] dataclass 快速创建数据类
在Python中,dataclass是一种用于快速创建数据类的装饰器和工具。自Python 3.7起,通过标准库中的dataclasses模块引入。它的主要目的是简化定义类来仅存储数据的代码量。通常,这样的类包含多个初始化属性,但没有复杂的方法…...

opencv实现图像的融合
实现图像的融合并且输出一张jpg格式的照片。 先显示一个彩色图的照片 然后我以彩色方式读取1.png,以灰度图方式读取3.png这张图片,并且用两个窗口独立地去显示(我后来发现不能把灰度图和彩色图相融合) 然后实现两个融合 #include <opencv2/highgu…...

Orbit 使用指南 02 | 在场景中生成原始对象| Isaac Sim | Omniverse
如是我闻: Orbit使用指南02将 深入探讨如何使用Python代码在Orbit中向场景生成各种对象(或原始对象)。一起探索如何生成地面平面、灯光、基本图形形状以及来自USD文件的网格。前置知识:如何生成空白场景,Orbit 使用指…...

【2024】利用python爬取csdn的博客用于迁移到hexo,hugo,wordpress...
前言 博主根据前两篇博客进行改进和升级 利用python爬取本站的所有博客链接-CSDN博客文章浏览阅读955次,点赞6次,收藏19次。定义一个json配置文件方便管理现在文件只有用户名称,后续可加配置读取用户名称,并且将其拼接成csdn个人博客链接ty…...

从嵌入式Linux到嵌入式Android
最近开始投入Android的怀抱。说来惭愧,08年就听说这东西,当时也有同事投入去看,因为恶心Java,始终对这玩意无感,没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业,所以只能回过头又来学。 首先还是…...

蓝桥ACM培训-实战1
前言: 今天老师没讲课,只让我们做了一下几道题目。 正文: Problem:A 小蓝与操作序列: #include<bits/stdc.h> using namespace std; stack<int> a; int main(){int n,flag1,ans;string cz;cin>>n;for(int i1;…...
波动数列(蓝桥杯)
问题描述: 观察如下数列: 1 3 0 2 -1 1 -2 … 这个数列中后一项总是比前一项增加 2 或者减少 3。 栋栋对这种数列很好奇,他想知道长度为 n nn 和为 s ss 而且后一项总是比前一项增加 a aa 或者减少 b bb 的整数数列可能有多少种呢?…...

第二篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas金融数据分析
传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas 在金融数据分析中的常见用途和功能介绍二、金融数据清洗和准备示例代码三、金融数据索引和选择示例代码四、金融数据时间序列分析示例代码五、金融数据可视化示例代码六、金融数…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...