技术标签: aarch64 armv8 risc armv9 ARM 基础 嵌入式
快速链接:
.
个人博客笔记导读目录(全部)
- 付费专栏-付费课程 【购买须知】:
- 【精选】ARMv8/ARMv9架构入门到精通-[目录]
ARM体系结构定义了抽象机器的行为,称为处理元素(processing element),通常缩写为PE。与ARM体系结构兼容的实现必须符合处理元素所描述的行为。
ARM架构是一个精简指令集计算机(RISC)架构,具有以下RISC架构特征:
ARMv8体系结构的一个重要特性是向后兼容,并且可以在各种标准和更专门的用例中自由地进行优化实现。ARMv8架构支持:
通用名AArch64和AArch32描述64位和32位执行状态:
ARM定义了三个架构概要:
AArch64,64位执行状态:
AArch32,32位执行状态:
在AArch64和AArch32执行状态之间转移控制称为互处理(interprocessing)。PE只能在异常级别发生变化时在执行状态之间移动,并且必须遵守文中给出的规则。这意味着不同的软件层,例如应用程序、操作系统内核和管理程序,在不同的异常级别执行,可以在不同的执行状态中执行。
在ARMv8中,可能的指令集取决于执行状态:
系统寄存器提供了体系结构特性的控制和状态信息, The System registers 包含:
ARMv8 architecture extensions
ARMv8加密扩展
可靠性、可用性和可服务性(RAS)扩展
事件监视器
IVIPT扩展
基于PC示例的概要分析扩展。
统计分析扩展(SPE) SPE是ARMv8.2的一个可选扩展。也就是说,SPE需要实现ARMv8.2。
可伸缩向量扩展(SVE) SVE是ARMv8.2的可选扩展。也就是说,SVE需要实现ARMv8.2。
活动监视器扩展(AMU) AMU是ARMv8.4的可选扩展。也就是说,AMU需要实施ARMv8.4。
内存分区和监视扩展(MPAM) MPAM是ARMv8.2的一个可选扩展。也就是说,MPAM需要实现ARMv8.2。
ARMv8加密扩展
在armv8中,有EL0、EL1、EL2、EL3四个权限级别.
低级别像高级别切换是通过触发异常来进行的。例如:
(1)、在EL0时调用svc指令,触发一个同步异常,cpu则会陷入EL1;
(2)、在EL0时来了一个IRQ或FIQ,会触发一个异步异常,cpu则会陷入EL1或EL2或EL3(根据SCR寄存器中中断的配置来决定);
高级别向低级别切换是通过修改PSTATE寄存器
ARMv8有31个通用寄存器X0-X30, 还有SP、PC、XZR等寄存器
下面详细介绍写这些通用寄存器(general-purpose registers):
(1)、X0-X7 Argument registers
用于参数传递
(2)、X9-X15 Caller-saved temporary registers
在子函数中使用这些寄存器时,直接使用即可, 无需save/restore. 在汇编代码中x9-x15出现的频率极低
(3)、X19-X29 Callee-saved registers (X19-X29)
在callee子函数中使用这些寄存器时,需要先save这些寄存器,在退出子函数时再resotre
(4)、X8, X16-X18, X29, X30 Registers with a special purpose
这些都是特殊用途的寄存器
ELR_ELx 异常链接寄存器
该寄存器只有ELR_EL1 ELR_EL2 ELR_EL3, 没用ELR_EL0. 因为异常不会routing(target)到EL0.
例如在user mode时触发了一个target到EL1的irq异常,那么会将PC指针保持到ELR_EL1中,然后跳转到EL1的异常向量表中;
user mode时触发了一个target到EL3的irq异常,,那么会将PC指针保持到ELR_EL3中,然后跳转到EL3的异常向量表中;
ESR_ELx (exception Syndrome register )异常综合寄存器/异常状态寄存器 : 反应异常的原因等信息
该寄存器只有ELR_EL1 ELR_EL2 ELR_EL3, 没用ELR_EL0.
例如:s 16bit指令的异常、32bit指令的异常、simd浮点运算的异常、MSR/MRS的异常…
FAR_ELx (Fault Address Register) 错误的地址寄存器
当取指令或取数据时,PC对齐错误或者watchpoint异常(PC alignment fault and Watchpoint exceptions),会将错误的地址填入到该寄存器中;
MAIR_EL1, (Memory Attribute Indirection Register) 内存属性寄存器
配置内存的属性,如Tagged Normal Memory、normal memory、device memory
如果是normal memory,那么inner和Outer的配置是Write-Through /Write-back/write Allocate/write non-Allocate等
SCTLR_EL1, (System Control Register) 系统控制寄存器
如d-cache/i-cache/mmu的enable和disable
AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构
(1)、AXI (Advanced eXtensible Interface) 高级可拓展接口
(2)、APB (Advanced Peripheral Bus) 高级外围总线
(3)、AHB (Advanced High-performance Bus) 高级高性能总线
(4)、ASB (Advanced System Bus) 高级系统总线
AXI是ARM 1996年提出的微控制器总线家族AMBA中的一部分
(1)、AXI4:主要面向高性能地址映射通信的需求;
(2)、AXI4-Lite:是一个简单地吞吐量地址映射性通信总线;
(3)、AXI4-Stream:面向高速流数据传输;
AXI4总线分为主、从两端,两者间可以连续的进行通信
ACE接口是对AXI4的扩展,里面增加了许多cache相关的接口
思考
- 什么是协处理器?ARMV8-aarch64下有没有协处理器?
- MRS/MSR是什么指令,在aarch64架构下没有MCR/MRC指令?
- 什么是SError? 什么是prefetch abort,undefined instruction?
- LR和ELR的区别?
- 在aarch32中, R15是PC,那么在aarch64中X30为什么不是PC?
- MV PC ,#3 这样的指令是否可以
- 在aarch32中, R13是SP,那么在aarch64为什么没有通用寄存器作为SP?
- armv7和armv8的ARM NEON的区别?
- PSTATE和CPSR的区别?
- ARMv8上是否能接gicv2,armv7上是否能接gicv3?
svc和swi都是supervisor call指令,都是系统调用.
【问题】swi叫软中断、SGI也叫软中断、linux kernel中还有一个softirq也叫软中断,他们三个有什么区别呢?
【回答】:
在armv7下使用的是data abort、prefetch abort、undefined instruction,在armv8下使用的是SError.
注:在linux kernel中,armv7体系下均已实现data abort、prefetch abort、undefined instruction异常处理函数,在linux kernel的armv8体系下,没有实现SError异常处理
文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录
文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.
文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表
文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值
文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment
文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals
文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac
文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术
文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;::-webkit-scrollbar { height: 5px; } &amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner
文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!
文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点
文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue