ARM内部大家族详解---嵌入式回归第四篇

学习ARM,首先要对ARM有个大体宏观的了解!这样后边学起来也会更轻松一些!

常用熟悉的一般分为:

1. 芯片:6410    210    2440   (这三款都是三星的)

2. ARM核:arm11    A8    arm9

3. 指令架构:armv7   armv6

首先ARM大家族的一些名词:

上面的图简化一下就是ARM内部之间的一些区分:

下面简单的看一下S3C2440芯片的架构图:

从上面芯片架构图中可以看出有一部分是ARM9TDMI (processor core)芯片的核,这一部分就是ARM9的核,这样就把芯片和ARM核联系起来了!

同理6410上可以看出是ARM11的核,210上用的是cotexA8的核。

下面再来看看ARM核和ARM指令架构的关系!从S3C2440 ARM核手册上可以查到这样一段话

可以看到S3C2440用的ARM9的核采用的是ARMV4T(其中v4 代表versions4),即采用的是ARMV4指令架构

同理同样的方法也可以查阅ARM11的核采用的是ARMV6T指令架构版本,A8的核采用的ARMV7的指令架构!

在一个芯片中最重要的就是ARM核了!下面就来了解ARM核的相关知识!

cortex-M系列大多用于工控,其实就是单片机,不过比单片机性能要牛逼那么一点!

cortex-R系列一般用于实时性要求很强的应用!

cortex-A系列多用于多媒体应用,比如我们用到的手机等高端一点的嵌入式设备!

不同芯片之间的一些比较重要的对比参数:

1. 处理速度(一般指通过配置在一个范围内可选的速度范围)

2. 缓存

3. 内存接口(支持什么内存直接决定芯片的性能)

4. 支持的OS

5. 其他

这些信息基本上都要查阅芯片手册datasheet,这里也就不一个一个的截图了!这里记个笔记大脑中有个大概的概念!

这里只简要介绍一下自己用的开发板OK6410:

处理速度:533~667MHZ

缓存:16kb

内存接口:SDRAM和DDR(DDR性能比SDRAM强很多)

支持的OS:wince/linux/android

其他:2440已结停产了 6410还在生产(工作和学习时可综合考虑),就学习来说,个人认为刚开始学的时候最好还是选2440资料多还全!非常适合初学ARM的人!自学的话找到方法只要自己努力完全没问题!

ARM处理器的工作模式:

ARM官方宝典:ARM Architecture Reference Manual手册, 这个手册在后边的学习中也会经常用到!总之是一个very important datasheet

ARM的七种工作模式截图:(记得当初面试的时候有被问到,当然这只是个很基础的问题)

这里先简要说一下在不同的工作模式下有何区别:比如当一个程序运行在不同的模式下面的时候,能够运行的ARM处理器的指令是不一样的,能够访问的ARM处理器的寄存器都是不一样的!

User: 普通用户模式

FIQ: 快速中断模式

IRQ:  普通中断模式

Supervisor:保护模式(权限相对比较高)

Abort:异常模式 (比如程序访问出现异常)

Undefined:未定义模式(比如使用了一条未定义的汇编指令)

System:系统模式(在ARMV4以上才有的模式, 用的很少)

对于Linux而言,一般的应用程序运行在User模式,而Linux内核运行在SVC模式,即Supervisor模式(面试时可能被问到)

下面来进行ARM寄存器详解:

首先还是来张图看个大概!这个还是根据上面的ARM宝典官方datesheet来的,对A8, 6410,2440都通用,而这些对于学习底层编程来说这些寄存器大部分都会用到!总之脑子里面最起码要有个大概!

The ARM processor has a total of 37 registers;(也是很基础的,面试可能问到)

下面来段详细点的datesheet手册截图:

翻译总一下:

ARM微处理器公有37个32位寄存器,其中31个为通用寄存器,6个位状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决于ARM处理器的工作状态及具体的运行模式。但是在任何时候,通用寄存器R14-R0、程序计数器PC、一个状态寄存器都是可以访问的。

ARM寄存器一览图:

通用寄存器被分为三类:

不分组通用寄存器:

R0-R7是不分组的寄存器。这意味着在所有处理器模式下,访问的都是同一个物理寄存器。不分组寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器。

分组寄存器:

看到这些寄存器是不是感觉和学C语言时看到的SP指针 、还有学汇编时理解中断工作原理很熟悉!没错就是他!

程序计数器:

寄存器R15被用做程序计数器,也称为PC,其值等于当前正在执行的指令地址+8(因为在取址和执行之间多了一个译码的阶段)

程序状态寄存器:

1. CPSR

2. SPSR_svc(SPSR 中的S可以理解为save,这个如果理解中断工作模式的话就很好理解了)

3. SPSR_abt

4. SPSR_und

5. SPSR_irq

6. SPSR_fiq

CPSR在每种异常模式下都有一个对应的物理寄存器---程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存CPSR的值,以便在异常返回后恢复异常发生时的工作状态。

ARM所有工作模式下都可以访问程序状态寄存器CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息!稍微有点小复杂!记得第一次学的时候还在纸上把每一位标出来各种不同的值代表的含义!很费劲!现在也忘的差不多了!

这里简单的截图介绍一下!后边的程序中会用到!

CPSR/SPSR寄存器中比较重要的几位:

ARM寻址方式(这里简要介绍几种常用的寻址方式):

所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式

1. 立即数寻址

2. 寄存器寻址

3. 寄存器间接寻址

4. 基址变址寻址

5. 相对寻址

时间: 2024-10-08 10:29:15

ARM内部大家族详解---嵌入式回归第四篇的相关文章

ARM开发工具软件命令详解---嵌入式回归第三篇

先从bootloader开始,因为暂时目前这些都会是裸机程序相关! 本人这里是VMwarm10.0上安装的红帽linux虚拟机.从下面的截图中可以看出 裸机开发流程: 这里先做第三步(第一步第二步已提供好),感受总结一下ARM裸机开发需要哪些工具,用到的时候再详细介绍. 要做第三步,首先要安装交叉编译器! 找到安装包,解压到根目录下(解压后边加上 -C  /) 这里交叉工具链会自动解压到根目录下的 /usr/local/arm/ 目录下面 但是这时候还不能直接在任意目录下使用arm-linux-

[转]Redis内部数据结构详解-sds

本文是<Redis内部数据结构详解>系列的第二篇,讲述Redis中使用最多的一个基础数据结构:sds. 不管在哪门编程语言当中,字符串都几乎是使用最多的数据结构.sds正是在Redis中被广泛使用的字符串结构,它的全称是Simple Dynamic String.与其它语言环境中出现的字符串相比,它具有如下显著的特点: 可动态扩展内存.sds表示的字符串其内容可以修改,也可以追加.在很多语言中字符串会分为mutable和immutable两种,显然sds属于mutable类型的. 二进制安全(

【转】Redis内部数据结构详解 -- skiplist

本文是<Redis内部数据结构详解>系列的第六篇.在本文中,我们围绕一个Redis的内部数据结构--skiplist展开讨论. Redis里面使用skiplist是为了实现sorted set这种对外的数据结构.sorted set提供的操作非常丰富,可以满足非常多的应用场景.这也意味着,sorted set相对来说实现比较复杂.同时,skiplist这种数据结构对于很多人来说都比较陌生,因为大部分学校里的算法课都没有对这种数据结构进行过详细的介绍.因此,为了介绍得足够清楚,本文会比这个系列的

linux-2.6.26内核中ARM中断实现详解(转)

转载:http://www.cnblogs.com/leaven/archive/2010/08/06/1794293.html 更多文档参见:http://pan.baidu.com/s/1dDvJRaD 作者:刘洪涛,华清远见嵌入式学院金牌讲师,ARM ATC授权培训讲师. 看了一些网络上关于linux中断实现的文章,感觉有一些写的非常好,在这里首先感谢他们的无私付出,然后也想再补充自己对一些问题的理解.先从函数注册引出问题吧. 一.中断注册方法 在linux内核中用于申请中断的函数是req

热烈祝贺华清远见《ARM处理器开发详解》第2版正式出版

2014年6月,由华清远见研发中心组织多名业 内顶尖讲师编写的<ARM处理器开发详解>一书正式出版.本书以S5PV210处理器为平台,详细介绍了嵌入式系统开发的各个主要环节,并注重实践,辅以 代码讲解,从分析的角度来讲解嵌入式开发的各种技术,将嵌入式软.硬件理论和嵌入式实验实践融合在一起. 华清远见作为国内最早推出嵌入式培训的机构,到 目前为止教学采用的实验平台.图书.课件全部来自自主研发,成为业内唯一公开连续出版图书的培训机构.这次最新出版的<ARM处理器开发详解>同样秉承了 华

【转】Redis内部数据结构详解——ziplist

本文是<Redis内部数据结构详解>系列的第四篇.在本文中,我们首先介绍一个新的Redis内部数据结构--ziplist,然后在文章后半部分我们会讨论一下在robj, dict和ziplist的基础上,Redis对外暴露的hash结构是怎样构建起来的. 我们在讨论中还会涉及到两个Redis配置(在redis.conf中的ADVANCED CONFIG部分): hash-max-ziplist-entries 512 hash-max-ziplist-value 64 本文的后半部分会对这两个配

详解WebService开发中四个常见问题(1)

详解WebService开发中四个常见问题(1) WebService开发中经常会碰到诸如WebService与方法重载.循环引用.数据被穿该等等问题.本文会给大家一些很好的解决方法. AD:WOT2014:用户标签系统与用户数据化运营培训专场 任何问题都需要从它的根源说起,所以简单说一下WebService的工作原理.客户端调用一个WebService的方法,首先需要将方法名和需要传递的参数包装成XML(也就是SOAP包),通常是通过HTTP传递到服务器端,然后服务器端解析这段XML,得到被调

详解WebService开发中四个常见问题(2)

详解WebService开发中四个常见问题(2) WebService开发中经常会碰到诸如WebService与方法重载.循环引用.数据被穿该等等问题.本文会给大家一些很好的解决方法. AD:WOT2014:用户标签系统与用户数据化运营培训专场 问题三:循环引用 还是先来看一个例子.下面是WebService的接口: 1 @WebService2     public interface IHello {3     4         @WebMethod5         public Str

《HTML5网页开发实例详解》连载(四)HTML5中的FileSystem接口

HTML 5除了提供用于获取文件信息的File对象外,还添加了FileSystem相关的应用接口.FileSystem对于不同的处理功能做了细致的分类,如用于文件读取和处理的FileReader和FileList对象.用于创建和写入的Blob和FileWriter对象.用于目录和文件系统访问的DirectoryReader和LocalFileSystem对象等,FileSystem功能的出现是浏览器在文件系统上的突破,具有里程碑的意义,虽然目前还尚未完全成熟,但足以让开发者发挥更大的想象空间.