【嵌入式开发——ARM】1ARM架构

嵌入式领域,使用ARM架构的芯片公司可不占少数吧,intel的x86架构主要占据PC、服务器市场,ARM架构主要占据移动市场。x86架构和ARM架构不同的主要原因,是背后使用的计算机指令集不同。计算机有自己的语言系统(汇编,进一步地mov等指令也得翻译成相应二进制码),众多指令的集合称为指令集架构(Instruction Set Architecture, ISA),计算机发展历史终,指令集形成两种风格,即:复杂指令集计算机(CISC,Complex Instruction Set Computer),精简指令集计算机(RISC,Reduced Instruction Set Computer),ARM架构就是使用RSIC(这里插一句,使用不同指令集,CPU就设计成不同架构吗,还真是,一定程度上可以说软件/指令集决定硬件架构,RSIC能流行起来一个原因就是因为按照RSIC指令集能降低硬件设计成本)
RSCI与CSIS

1 架构

1.1 架构种类

有些人将“指令集体系结构”称为架构,于是有ARMv8架构,ARMv7-A架构等等,这些都是ARM设计的一些RISC指令集。
所谓指令集体系结构,就是ARM公司推出的一整套精简指令,它是计算机最底层的命令,如APP从内存读取数据,最终就是通过调用ARM设计的指令实现内存存取。

为了清楚表达ARM应用实例所使用的指令集,ARM公司定义了几种重要的ARM指令集架构版本,以版本号v1-v8表示。
ARM采用IP授权的商业模式,收取一次性技术授权费用和版税提成,有三种授权模式:使用层级授权模式,内核层级授权模式,架构层级使用模式。

ARMv7架构开始,命名方式有所改变,分为三个系列:Cortex-A,Cortex-R,Cortex-M;
Cortex-A:针对高性能计算。如现在手机常出现Cortex-A76等;
Cortex-R:针对实时操作处理,主要是面向嵌入式实时处理器。在汽车电子制动系统,工控等领域常见;
Cortex-M:专为低功耗,低成本系统设计。目前火热的IoT领域常用该系列。
ARM架构家族

1.2 ARM微处理器特点

1、ARM指令都是32位定长的;
2、寄存器数量丰富(37个);
3、普通的Load/Store指令;
4、多寄存器的Load/Store指令;
5、指令的条件执行;
6、单个时钟周期中的单条指令完成数据移位操作和ALU操作;
7、通过变种和协处理器来扩展ARM处理器功能;
8、扩展了16位的Thumb指令来提高代码密度;

1.3 ARM状态和Thumb状态

1.3.1 状态简介

ARM状态:ARM处理器工作于32位指令的状态,所有指令都是32位。
Thumb状态:ARM处理器执行16位指令的状态。
Thumb-2状态:这是ARM7版本处理器所具有的的状态,thumb-2内核技术兼有16位及32位指令,实现了更高的性能,更有效的功耗及更少地占用内存。

1.3.2 ARM状态和Thumb状态的切换

(1)由ARM状态切换到Thumb状态
寄存器最低位置为1
BX指令:R0[0]=1,则执行BX R0指令将进入Thumb状态
(2)由Thumb状态切换到ARM状态
寄存器最低位设置为0
BX指令:R0[0]=0,则执行BX R0将进入ARM状态

当处理器进行异常处理时,则从异常向量地址开始执行,自动进入ARM状态。
注意:
ARM处理器复位后开始执行时总是处于ARM状态;
Cortex-M3只有Thumb-2状态和调试状态;
由于Thumb-2具有16/32位指令功能,因此有Thumb-2就无需Thumb了;此外,具有Thumb-2技术的ARM处理器也无需在ARM状态和thumb状态之间切换了,因为thumb-2具有32位和16位指令功能。

1.3.3 为什么需要Thumb状态模式?

ARM体系结构除了支持执行效率很高的32位ARM指令集外,为了兼容总线宽度为16位的应用系统,所以也支持16位的Thumb指令集。Thumb指令集是ARM指令系统的一个子集,允许指令编码长度为16位。Thumb指令集大大节省了存储空间。

2 编程模型

2.1 ARM数据类型

在ARM体系结构中,字(Word)的长度为32位,半字(Half-Word)长度为16位,字节(字节)长度为8位。

2.2 ARM处理器的工作状态

1、ARM状态,处理器执行32位的字对齐ARM指令,绝大部分工作在此状态;
2、Thumb状态,处理器执行16位的半字对齐Thumb指令。

2.3 ARM处理器工作模式

1、用户模式(usr,User Mode):ARM处理器正常执行程序;
2、快速中断模式(fiq,Fast Interrupt Request Mode):用于高速数据传输或通道处理,当触发快速中断时进入此模式;
3、外部中断模式(irq,Interrupt Request Mode):用于通常中断处理,当触发外部中断时进入此模式;
4、管理模式(svc,Supervisor Mode):操作系统使用的保护模式,在系统复位或执行软中断时进入此模式;
5、数据访问中止模式(abt,Abort Mode):数据或指令预取中止时进入此模式,可用于虚拟存储及存储保护;
6、系统模式(sys,System Mode):运行具有特权的操作系统任务;
7、未定义指令中止模式(und,Undefined Mode):未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真;
除用户模式外,其余六种都是特权模式。除用户模式和系统模式外,其余五种都是异常模式。在特权模式下可以访问所有系统资源。

2.4 ARM处理器寄存器组织

ARM处理器有37个32位寄存器,其中31个是通用寄存器,6个状态寄存器。
ARM处理器寄存器
在所有寄存器中,有些是各模式共用同一个物理寄存器,有些是各模式自己独立拥有的物理寄存器。

r0-r3主要用于子程序间传递参数;
r4-r11用于保存局部变量,但在Thumb状态下,通常只能使用r4-r7保存局部变量;
r12是子程序间的scratch寄存器,即ip寄存器;
r13通常用于栈指针,即sp;
r14是连接寄存器(lr),用于保存子程序和中断返回地址;
r15即程序计数器(pc),ARM采用流水线机制,该寄存器存储下一条指令地址。

不分组寄存器(r0-r7)
在所有运行模式下,都是同一个物理寄存器,系统未把它们用做特殊用途。

分组寄存器(r8-r14)
FIQ模式下,使用r8_fiq-r12fiq,其他模式下还是使用r8-r12;
对于r13,r14,每个寄存器对应6个不同的物理寄存器,系统模式和用户模式使用r13,r14,其他模式都有自己独立的物理寄存器;

SPSR
(Saved program status register备份的程序状态寄存器),除usr,sys外,用于保存CPSR的备份,异常时,保存CPSR值,异常退出时,将该值恢复到CPSR。五种异常模式都有各自的物理寄存器。
CPSR
(Current program status register当前程序状态寄存器),可以在任何模式下被访问,包括条件标志位,中断禁止位。
N:两整数运算时,1表示结果为负数,0表示结果为0或正数;
Z:1表示结果为0。对于CMP指令,1表示两数相等。
C,V代表溢出。
I:1表示禁止外部硬件中断(irq);
F:1表示禁止快速中断(fiq);
T:1表示Thumb状态,0表示ARM状态,默认都是ARM状态
M[4:0],用来设置处理器的工作模式。
CPSR寄存器bit位
CPSR寄存器每位含义

3 其他知识

ARM授权模式
当年知道ARM这么收钱的时候,有点纳闷又有点无语,包括现在,也对版权这个东西感到不可思议,还能这样收费。它不用造个成品出来,就是一套知识点,而且最麻烦的是能一直收费,不是像买个东西比如手机,一次交完就行了。即便是买手机,我下次买,那你厂商也得再造个新手机出来,和之前的手机是俩东西了,而这套知识点第一次买长这样,下次买还长这样,,,但就是能一直收费。顺便在吐槽一句,也不知道啥时候我们国家比如听歌啥的,也开始版权收费了,一次又一次的交,不要说这是贴近西方,西方也不是文明的代名词,也不是绝对权威,我一直感觉这基本就是西方搞得一种无赖收费方式;你但凡是那种花了一次钱买了就行了也不会说啥,毕竟给予知识创造者回馈是正常的,但这种一劳永逸的在我感觉就是很奇葩;而且这样能收费的话,我真替中西方古往今来各个领域研究出东西的先贤感到不值,毕竟我们现在生活用的的所有,包括衣食住行,琴棋书画,数理医艺等,肯定都是在先贤研究的基础上发展得到的,他们的版权费呢?找谁要?要不要给他们后代?我是理工科的,有点对资本这方面嗤之以鼻(尤其是前几年看到新闻ARM公司被其股东卖来卖去时候感到痛心,一个叱咤风云的技术公司被所谓股东说卖就卖,无语到令人想笑),很多东西和钱/利益挂钩后,就很难纯粹了,真切感觉每个人,或者说整个人类在近现代被金钱控制的有点离谱了,所有的道义等品质都被金钱破坏了,感觉都在像金钱看齐,这样下去的话,即便人类科技在进步,也会是生活在冰冷麻木的社会中。不好意思,有点愤青了,扯得有点远,大家就当看个热闹。
RSIC与CSIS对比
Cortex系列

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

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

相关文章

LabVIEW扫描探针显微镜系统

开发了一套基于LabVIEW软件开发的扫描探针显微镜系统。该系统专为微观尺度材料的热性能测量而设计,特别适用于纳米材料如石墨烯、碳纳米管等的研究。系统通过LabVIEW编程实现高精度的表面形貌和热性能测量,广泛应用于科研和工业领域。 项目背景 随着纳…

JavaScript day01 笔记

一、引入方式 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。通过 script 标签将 JavaScript 代码引入到 HTML 中 1️⃣内部 通过 script 标签包裹 JavaScript 代码&#xff08;一般就写在</script>的…

【Git】Liunx环境下Git的使用:“克隆,提交,推送“

目录 一、常用参数 二、我们为什么要使用Git&#xff1f; 三、创建远程仓库 第一步&#xff1a;创建对应代码托管平台账号。 第二步&#xff1a;在托管平台创建仓库 第三步&#xff1a;完善仓库内容&#xff08;选择性使用&#xff09; 开源和私有 四、克隆远程仓库到本…

机器人零位、工作空间、坐标系及其变换,以UR5e机器人为例

机器人中的主要坐标系 在机器人中&#xff0c;常用的坐标系包括&#xff1a; 基坐标系&#xff08;Base Frame&#xff09;&#xff1a;固定在机器人基座上的坐标系&#xff0c;用于描述机器人的整体位置和方向&#xff0c;是其他所有坐标系的参考点。 连杆坐标系&#xff08…

JavaSE:运算符 (学习笔记)

目录 一&#xff0c;算术运算符 【1】 共同点&#xff1a; 【2】 不同点&#xff1a; 二&#xff0c;关系运算符 三&#xff0c;逻辑运算符 2&#xff0c;&和&&的区别和联系 { |和||的区别和联系 }---两题类似 四&#xff0c;赋值运算符 五&#xff0c;拓展…

C++中类的默认成员函数

默认成员函数 1.构造函数2.析构函数3.拷贝构造函数4.赋值运算符重载4.1运算符重载4.2赋值运算符重载 #mermaid-svg-oipiwg9stvONvYK0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-oipiwg9stvONvYK0 .error-icon{f…

游戏引擎学习第一天

视频参考: https://www.bilibili.com/video/BV1zGDCYHErA/ 创建一个保存项目的路径 VS的安装略过&#xff0c;个人自行百度 1. vs 创建第一个CMAKE的窗口项目 game.cpp 修改如下的代码 到https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-winmain 去…

视频播放相关的杂记

基于QT FFMPEG设计一款 RTMP协议推流、视频录制软件 实现的功能&#xff1a; &#xff08;1&#xff09;将摄像头视频流 麦克风音频流合并&#xff0c;并推到流媒体服务器 &#xff08;2&#xff09;将摄像头视频流 麦克风音频流保存到本地磁盘 基于QtFFMPEG设计一款RTM…

2024年将尽,我们开始为ESG的未来感到担忧 | 深度

2024已经接近尾声了&#xff0c;今年ESG的发展状况非常两级分化。最极端者&#xff0c;有人觉得ESG要在2024年起飞的&#xff0c;毕竟今年三大交易所出台了《上市公司可持续发展报告指引》&#xff0c;“A股公司进入ESG信披新纪元”。而在另一个极端&#xff0c;有人认为ESG“将…

windows中docker安装redis和redisinsight记录

创建一个Redis运行容器&#xff0c;命令如下 docker run -it -d --name redis -p 6379:6379 redis --bind 0.0.0.0 --protected-mode no -d 代表Redis容器后台运行 --name redis 给创建好的容器起名叫redis -p 6379:6379 将容器的6379端口映射到宿主机的6379端口&#xff0c;注…

atcoder解题

#include <iostream> #include <vector>using namespace std;int main() {long long N, M;cin >> N >> M;vector<long long> X(M), A(M);long long totalStones 0;// 读入 X 和 Afor (int i 0; i < M; i) {cin >> X[i];}for (int i …

Vue:侦听属性

Vue&#xff1a;侦听属性 watch深度侦听异步任务 watch 在Vue中&#xff0c;允许用户在数据改变时&#xff0c;做出一定的处理。 语法&#xff1a; new Vue({watch:{属性名:{handler(newValue, oldValue){// 函数体} }} })当一个属性被写入watch中&#xff0c;每当这个属性…

《计算机原理与系统结构》学习系列——存储器(上)

系列文章目录 目录 存储器技术概要存储器层次cache&#xff0c;内存辅存存储器技术SRAM技术DRAM技术闪存磁盘存储器 局部性原理 高速缓存cache访存性能概念命中与缺失访存阻塞的周期数 cache基础&#xff1a;直接映射块号内存地址字段缺失缺失处理和写策略 全相联映射组相连映…

github高分项目 WGCLOUD - 运维实时管理工具

GitHub - tianshiyeben/wgcloud: Linux运维监控工具&#xff0c;支持系统硬件信息&#xff0c;内存&#xff0c;CPU&#xff0c;温度&#xff0c;磁盘空间及IO&#xff0c;硬盘smart&#xff0c;GPU&#xff0c;防火墙&#xff0c;网络流量速率等监控&#xff0c;服务接口监测&…

A021基于Spring Boot的自习室管理和预约系统设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

【EasyExcel】EasyExcel导出表格包含合计行、自定义样式、自适应列宽

目录 0 EasyExcel简介1 Excel导出工具类设置自定义表头样式设置自适应列宽添加合计行 2 调用导出工具类导出Excel表3 测试结果 0 EasyExcel简介 在数据处理和报表生成的过程中&#xff0c;Excel是一个非常常用的工具。特别是在Java开发中&#xff0c;EasyExcel库因其简单高效而…

2024年11月09号Drawing Memory Models Review 2

So lets start with a piece of code that well be thinking about and take a few seconds to read it carefully and try to explain, in your own words, what this piece of code does.

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (二)

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 &#xff08;二&#xff09; 一、前言 目前鸿蒙应用的实现逻辑&#xff0c;基本都是参考和移植Android端来实现。针对BLE低功耗蓝牙来说&#xff0c;在鸿蒙化的实现过程中。我们发现了&#xff0c;鸿蒙独有的优秀点&#xff0c…

2024年【流动式起重机司机】模拟考试及流动式起重机司机证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 流动式起重机司机模拟考试考前必练&#xff01;安全生产模拟考试一点通每个月更新流动式起重机司机证考试题目及答案&#xff01;多做几遍&#xff0c;其实通过流动式起重机司机模拟考试题很简单。 1、【多选题】( )和…

混合搜索与多重嵌入:一次有趣又毛茸茸的猫咪搜索之旅!(二)

这是继上一篇文章 “混合搜索与多重嵌入&#xff1a;一次有趣又毛茸茸的猫咪搜索之旅&#xff01;&#xff08;一&#xff09;” 的续篇。这这篇文章中&#xff0c;我们讲使用本地 Elasticsearch 部署来完成整个演示。这是一个简单的 Python Web 应用程序&#xff0c;展示了可…