目录
ARM(Advanced RISC Machines)是一个32位RISC(精简指令集)处理器架构,ARM处理器则是ARM架构下
的微处理器。ARM处理器广泛的使用在许多嵌入式系统。ARM处理器的特点有指令长度固定,执行效率高,低成本等。
(1)指令集——RISC减少了指令集的种类,通常一个周期一条指令,采用固定长度的指令格式,编译器或程序员通过几条指令完成一个复杂的操作。而CISC指令集的指令长度通常不固定;
(2)流水线——RISC采用单周期指令,且指令长度固定,便于流水线操作执行;
(3)寄存器——RISC的处理器拥有更多的通用寄存器,寄存器操作较多。例如ARM处理器具有37个寄存器;
(4)Load/Store结构——使用加载/存储指令批量从内存中读写数据,提高数据的传输效率;
(5)寻址方式简化,指令长度固定,指令格式和寻址方式种类减少。
双字节(DoubleWord):64位
字(Word):在ARM体系结构中,字的长度为32位。
半字(Half-Word):在ARM体系结构中,半字的长度为16位。
字节(Byte):在ARM体系结构中,字节的长度为8位。
ARM体系结构将存储器看作是从0地址开始的字节的线性组合。作为32位的微处理器,ARM体系结构所支持的
最大寻址空间为4GB。ARM体系结构可以用两种方法存储字数据,分别为大端模式和小端模式。
大端模式(高地高低):字的高字节存储在低地址字节单元中,字的低字节存储在高地址字节单元中。
小端模式(高高低低):字的高字节存储在高地址字节单元中,字的低字节存储在低地址字节单元中。
1、用户模式(user):正常程序执行模式;
2、快速中断模式(FIQ):高优先级的中断产生会进入该种模式,用于高速通道传输;
3、外部中断模式(IRQ):低优先级中断产生会进入该模式,用于普通的中断处理;
4、特权模式(Supervisor):复位和软中断指令会进入该模式;
5、数据访问中止模式(Abort):当存储异常时会进入该模式;
6、未定义指令中止模式(Undefined):执行未定义指令会进入该模式;
7、系统模式(System):用于运行特权级操作系统任务;
8、监控模式(Monitor):可以在安全模式和非安全模式之间切换;
取指令->译码->执行->缓冲/数据->回写
(1)取指令(Fetch):从存储器读取指令;
(2)译码(Decode):译码以鉴别它是属于哪一条指令;
(3)执行(Execute):将操作数进行组合以得到结果或存储器地址;
(4)缓冲/数据(Buffer/data):如果需要,则访问存储器以存储数据;
(5)回写:(Write-back):将结果写回到寄存器组中;
(1)互锁:
不同的指令顺序也会造成时钟周期的不同,比如一条指令的执行需要前一条指令执行的结果,如果这时结果
还没出来,那就需要等待,这就是流水线互锁:
LDR r1, [r2, #4]
ADD r0, r0, r1 //r1的值需要等到LDR的结果
(2)跳转指令:
跳转指令也会破坏流水线的行为,后续指令的取值步骤受到跳转目标的影响。
(1)ARM Cortex-A8处理器有40个32位长的寄存器:
a、32个通用寄存器
b、7个状态寄存器:1个CPSR(当前程序状态寄存器)
6个SPSR(备份程序状态寄存器)
c、1个PC(程序计数器)
(2)每一种处理器模式有一组响应的寄存器组,如下对应方式:
(3)通用寄存器包括R0-R15,可以分为3类:
A、未分组寄存器R0 – R7:
在所有运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途。因此在中断或异常
处理进行异常模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,所以可能造成寄存器中数据的破坏。
B、分组寄存器R8 – R14:
对于分组寄存器,他们每次所访问的物理寄存器都与当前的处理器运行模式相关。
R13常用作存放堆栈指针,用户也可以使用其他寄存器存放堆栈指针,称为SP;
R14称为链接寄存器(LR),当执行子程序时,R14可得到R15(PC)的备份,执行完子程序后,又将R14的值
复制回PC,即使用R14保存返回地址。
C、程序计数器PC(R15):
寄存器R15用作程序计数器(PC),在ARM状态下,位[1:0]为0,位[31:2]用于保存PC;在Thumb状态下,位[0]为0,
位[31:1]用于保存PC。对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的
地址值加8个字节。
(4)程序状态寄存器:
CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括
条件标志位、中断禁止位、当前处理器模式标志位以及其他一些相关的控制和状态位。包含以下内容:
ALU状态标志的备份;
当前的处理模式
中断使能标志;
设置处理的状态;
每一种运行模式下都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序
状态寄存器),当异常发生时,SPSR用于保存当前CPSR的值,从异常退出时则可由SPSR来恢复CPSR。
由于用户模式和系统模式不属于异常模式,这两种状态下没有SPSR,因此在这两种状态下访问SPSR,结果是未知的。
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption