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. 相对寻址
ARM内部大家族详解---嵌入式回归第四篇相关推荐
- ARM开发工具软件命令详解---嵌入式回归第三篇
先从bootloader开始,因为暂时目前这些都会是裸机程序相关! 本人这里是VMwarm10.0上安装的红帽linux虚拟机.从下面的截图中可以看出 裸机开发流程: 这里先做第三步(第一步第二步已提 ...
- [转]Redis内部数据结构详解-sds
本文是<Redis内部数据结构详解>系列的第二篇,讲述Redis中使用最多的一个基础数据结构:sds. 不管在哪门编程语言当中,字符串都几乎是使用最多的数据结构.sds正是在Redis中被 ...
- 探索Redis设计与实现6:Redis内部数据结构详解——skiplist
Redis内部数据结构详解(6)--skiplist 2016-10-05 本文是<Redis内部数据结构详解>系列的第六篇.在本文中,我们围绕一个Redis的内部数据结构--skipl ...
- Redis内部数据结构详解(2)——skiplist
Redis里面使用skiplist是为了实现sorted set这种对外的数据结构.sorted set提供的操作非常丰富,可以满足非常多的应用场景.这也意味着,sorted set相对来说实现比较复 ...
- Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
编者按:HDFS和MapReduce是Hadoop的两大核心,除此之外Hbase.Hive这两个核心工具也随着Hadoop发展变得越来越重要.本文作者张震的博文<Thinking in BigD ...
- ARM指令CMP详解
ARM指令CMP详解 1.加减指令 add r1, r ...
- 晶振及其内部电路详解
晶振及其内部电路详解: 晶振原理:晶振,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低 的频率是串联谐振,较高的频率是并联谐振 ...
- BIOS内部模块详解
BIOS内部模块详解 时间:10月17日 Award BIOS内部模块 AwardBIOS内部模块的相关说明如表1所示. 1 AwardBIOS内部模块 模块名称 在BIOS中的 文件名 模块用途 S ...
- 酷6网证实80后员工猝死 内部邮件详解死因
本文转载自 MSN ,原文地址: http://msn.ynet.com/view.jsp?oid=58168767 相关阅读: 多少钱也不能买我的命 --Leo 谈酷 6 程序员猝死 日前,有关酷 ...
最新文章
- 潜移默化学会WPF(转载篇二)--退出应用程序
- u852日期限制解决补丁_用友U8hotfix和补丁包替换原则及注意事项
- 系列笔记 | 深度学习连载(4):优化技巧(上)
- Mac 可设置环境变量的位置、查看和添加PATH环境变量
- NSLog(@%@,类对象); 默认输出类名
- C# Struct 内存对齐
- 【Linux】一步一步学Linux——apt-sortpkgs命令(280)
- 数学--数论--POJ 1061青蛙的约会 (扩展欧几里得算法)
- 【转载】JSON介绍
- 分层架构(第一张章)
- 【心电信号】基于matlab心电图峰值检测【含Matlab源码 1548期】
- Python 详解K-S检验与3σ原则剔除异常值
- 【统计分析】(task1) 假设检验1:方法论与一元数值检验
- 计算机设备替换法,同义词替换表的挖掘方法及装置、电子设备、计算机可读介质与流程...
- SWF游戏软件逆向基础知识1
- NoteExpress
- Redis基本应用及Java代码实现
- 每日10行代码57: appium测试坚果手机出现socket hang up报错的解决
- McNemar test麦克尼马尔检验
- 儿童保健管理系统技术方案