二、冯式结构与哈佛结构及ARM处理器状态和处理器模式
2.1 冯式结构与哈佛结构
2.1.1 两者的区别
- 如果是独立的存储架构和信号通道那就是哈佛结构,否则就是冯式结构
- 结构与是否统一编址没有关系,也与 CPU 没有关系,与计算机的整体设计有关
- CACHE 的引入(CPU 内部哈佛结构)
- 总结:高性能单片机的为冯式结构,单片机为哈佛结构
| 8086 | 冯式结构 |
相同存储(RAM) 相同的通道 |
统一编址 |
| STM32F103 | 哈佛结构 |
不同的存储(ROM/RAM) 不同的通道 |
统一编址 |
| 8051 | 改进型的哈佛结构 |
不同的存储(ROM/RAM) 相同的通道 |
独立编址 |
| ARM9 | 改进型的冯式结构 |
相同的存储(RAM/ROM) 不同的通道 |
统一编址 |
2.1.2 总线与 IO 访问
- ARM 总线结构(AHB, APB, AXI)与内部外设进行通讯方式:
- (系统总线)访问与IO访问(独立与统一)
- IO 就是指 CPU 的各种内部与外部外设
- IO 接口的编址方式:
- 区别于单片机中的 GPIO 通信访问,GPIO 本身是一个内部外设
- IO 接口中能被 CPU 访问的寄存器称为端口/寄存器
- 端口与存储器统一编址(ARM) uart gpio
- 端口与存储器独立编址(X86) 8259A 8255(并口) 8253(定时器)
- 通过 MEMR/MEMW 和 IOR/IOW 两组控制信号来实现对 I/O 端口和存储器的不同寻址
2.2 ARM处理器状态和处理器模式
- 注意: 在不同的体系下一些概念有所不同, 在这里我们使用 S3C2440 手册进行参考
2.2.1 处理器状态
- 从程序员的角度看,ARM920T 处于以下两种状态之一:
- ARM 状态:执行 32 位以字对齐的 ARM 指令。
- Thumb 状态:执行 16 位以半字对齐的 Thumb 指令。在此状态下,程序计数器(PC)使用位 1 来切换半字。代码密度好
- 两种状态的切换并不影响处理器模式或寄存器内容。
- 进入 Thumb 状态
- 执行一个 BX 指令可以实现进入到 Thumb 状态,操作数寄存器设置状态位(位[0])
- 如果处理器在 Thumb 状态进入发生异常(如 IRQ、FIQ、UNDEF、ABORT、SWI 等),异常处理返回时也将自动切换回 Thumb 状态。(异常都是在 ARM 状态中执行)
- 进入 ARM 状态ARM 状态的进入可以通过下列方法:
- 执行 BX 指令,并且操作数寄存器清除状态位。
- 处理器发生异常(如 IRQ, FIQ, RESET, UNDEF, ABORT, SWI 等)。此情况下,将程序计数器的内容复制到异常模式的链接寄存器中,并且异常处理将从异常向量地址开始
2.2.2 处理器模式
- ARM920T 支持 7 种运行模式:
- 用户(usr):正常 ARM 程序执行状态快中断(fiq):为支持数据传输或通道处理设计
- 中断(irq):用于一般用途的中断处理
- 管理(svc):操作系统保护模式
- 中止(abt): 数据或指令预取中止后进入
- 系统(sys):操作系统的特权用户模式
- 未定义(und):执行了一个未定义指令时进入
- 模式的改变可由软件控制,或者由外部中断或进入异常引起。大部分应用程序都将在用户模式执行。 被称为特权模式的非用户模式,都将进入到中断服务或异常中去,或者访问受保护的资源。
- 设计的目的: 提高响应速度, 注意: 保护模式/特权模式, 需要 MMU 和代码支持
2.2.3 ARM 流水线设计
ARM9 为 5 级流水线

二、冯式结构与哈佛结构及ARM处理器状态和处理器模式的更多相关文章
- ARM(哈弗、冯氏结构、总线和IO访问、处理器状态和处理机模式)
1.哈弗结构与冯氏结构 (1)区别: 是否有独立的存储架构和信号通道. (2)举例: 8086:冯氏结构(相同的存储相同的通道) STM32F103:哈弗结构(不同的存储.通道) 8051:改进的哈弗 ...
- 数据结构----线性表顺序和链式结构的使用(c)
PS:在学习数据结构之前,我相信很多博友也都学习过一些语言,比如说java,c语言,c++,web等,我们之前用的一些方法大都是封装好的,就java而言,里面使用了大量的封装好的方法,一些算法也大都写 ...
- [C++][数据结构][算法]单链式结构的深拷贝
深拷贝(deep-copy),区别于浅拷贝,表示复制所有数据,而不是像浅拷贝一般只复制指针.深拷贝的数据不会因原始数据被delete后而消失. 单链式结构可以实现单链表,栈,队列,树等数据结构.掌握了 ...
- C语言 队列 链式结构 实现
一个C语言链式结构实现的队列 mQueue (GCC编译). /** * @brief C语言实现的链式队列 * @author wid * @date 2013-10-31 * * @note 若代 ...
- C语言 栈 链式结构 实现
一个C语言链式结构实现的栈 mStack (GCC编译). /** * @brief C语言实现的链式结构类型的栈 * @author wid * @date 2013-10-30 * * @note ...
- C语言 线性表 双向链式结构 实现
一个双向链式结构实现的线性表 duList (GCC编译). /** * @brief 线性表双向链表结构 * @author wid * @date 2013-10-28 * * @note 若代码 ...
- 【HighCharts系列教程】二、Highcharts结构及API文档
一.你必须知道的 1.首先,HighCharts是基于Jquery框架开发的,所以需要在页面引入Jquery,具体代码是: <script type="text/javascript& ...
- 基于Flask的Web应用程序插件式结构开发
事实上,很多应用程序基于插件式结构开发,可以很方便了扩展软件的功能,并且这些功能完全可以依托于第三方开发者,只要提供好接口和完备文档,比如wordpress.谷歌火狐浏览器等. Python这样的动态 ...
- 文件上传以及JS链式结构
文件上传: 文件上传使用FileUpload控件,使用控件的SaveAs方法,需要绝对路径. 获取文件的绝对路径:Server.MapPath(相对路径); 或许要上传文件的本身名字用.FileNam ...
随机推荐
- CSS3实现图片黑白滤镜居中,hover缩放遮罩的效果
hover: 在前端开发中经常会遇到项目展示,往往会采用卡片方式来描述.众多网站中,普遍采用CSS3的scale()方法来实现交互. 本文即是利用纯CSS实现图片居中缩放,此类方法各大网站均有应 ...
- Mac下配置神器PhpStrom开发环境
转载自:http://www.ifun.cc/blog/2014/02/09/macxia-pei-zhi-shen-qi-phpstromkai-fa-huan-jing/ php这么流行,不能不研 ...
- 走进JavaWeb技术世界7:Tomcat和其他WEB容器的区别
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- 三十四、python中shutil模块的介绍
'''A.shutil:高级的文件 文件夹 压缩包 处理模块''' import shutil '''1.copyfileobj(a1,a2,lenth):将文件内容拷贝到另一个文件中''' shut ...
- 如何将阿里云上的RDS 备份的mysql数据还原到windows环境中
一.本地mysql数据库创建与备份库一致的数据库名,如testdb: 二.本地创建与备份库一致的数据库表,记得设置ALTER TABLE tableName1 ROW_FORMAT = compact ...
- leetcode 62. 不同路径(C++)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问总共有多 ...
- 错误 warning: LF will be replaced by CRLF in README.md.
问题类型 windows中的换行符为 CRLF, 而在Linux下的换行符为LF,所以在执行add . 时出现提示:warning: LF will be replaced by CRLF in RE ...
- adbl连接不上 daemon not running. starting it now on port 5037 ADB server didn't ACK
http://blog.csdn.net/prettyice2005/article/details/38682443 adbl连接不上 daemon not running. starting i ...
- c# WPF——完成一个简单的百度贴吧爬虫客户端
话不多说先上图 爬取10页大概500个帖子大概10s,500页2w多个帖子大概2min,由此可见性能并不是特别好,但是也没有很差. 好了话不多说,我们来一步一步实现这么个简易的客户端. 1.创建项目 ...
- Mac 10.14 下为php 安装xdebug 并让vscode支持
安装Xdebug 寻找对应php版本的xdebug版本 先将info输出到一个文件 php -i > info.txt 打开info.txt 复制所有内容 打开寻找合适xdebug的页面http ...