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处理器状态和处理器模式的更多相关文章

  1. ARM(哈弗、冯氏结构、总线和IO访问、处理器状态和处理机模式)

    1.哈弗结构与冯氏结构 (1)区别: 是否有独立的存储架构和信号通道. (2)举例: 8086:冯氏结构(相同的存储相同的通道) STM32F103:哈弗结构(不同的存储.通道) 8051:改进的哈弗 ...

  2. 数据结构----线性表顺序和链式结构的使用(c)

    PS:在学习数据结构之前,我相信很多博友也都学习过一些语言,比如说java,c语言,c++,web等,我们之前用的一些方法大都是封装好的,就java而言,里面使用了大量的封装好的方法,一些算法也大都写 ...

  3. [C++][数据结构][算法]单链式结构的深拷贝

    深拷贝(deep-copy),区别于浅拷贝,表示复制所有数据,而不是像浅拷贝一般只复制指针.深拷贝的数据不会因原始数据被delete后而消失. 单链式结构可以实现单链表,栈,队列,树等数据结构.掌握了 ...

  4. C语言 队列 链式结构 实现

    一个C语言链式结构实现的队列 mQueue (GCC编译). /** * @brief C语言实现的链式队列 * @author wid * @date 2013-10-31 * * @note 若代 ...

  5. C语言 栈 链式结构 实现

    一个C语言链式结构实现的栈 mStack (GCC编译). /** * @brief C语言实现的链式结构类型的栈 * @author wid * @date 2013-10-30 * * @note ...

  6. C语言 线性表 双向链式结构 实现

    一个双向链式结构实现的线性表 duList (GCC编译). /** * @brief 线性表双向链表结构 * @author wid * @date 2013-10-28 * * @note 若代码 ...

  7. 【HighCharts系列教程】二、Highcharts结构及API文档

    一.你必须知道的 1.首先,HighCharts是基于Jquery框架开发的,所以需要在页面引入Jquery,具体代码是: <script type="text/javascript& ...

  8. 基于Flask的Web应用程序插件式结构开发

    事实上,很多应用程序基于插件式结构开发,可以很方便了扩展软件的功能,并且这些功能完全可以依托于第三方开发者,只要提供好接口和完备文档,比如wordpress.谷歌火狐浏览器等. Python这样的动态 ...

  9. 文件上传以及JS链式结构

    文件上传: 文件上传使用FileUpload控件,使用控件的SaveAs方法,需要绝对路径. 获取文件的绝对路径:Server.MapPath(相对路径); 或许要上传文件的本身名字用.FileNam ...

随机推荐

  1. mysql慢查询解析-linux命令

    使用mysqldumpslow 命令可以解析mysql慢查询日志,mysqldumpslow的参数如下: -s ,是按照任何方式排序,c.t.l.r分别是按照记录次数.时间.查询时间.返回的记录数 来 ...

  2. Queen Attack -- 微软2017年预科生计划在线编程笔试第二场

    #!/usr/bin/env python # coding:utf-8 # Queen Attack # https://hihocoder.com/problemset/problem/1497 ...

  3. Java 基础知识整理 (待整理)

    JVM之类加载器(ClassLoader)基本介绍 类加载器用于将class文件加载到JVM中去执行.下面介绍类加载器涉及到的基本概念和加载基本过程. 一.Java虚拟机与程序的生命周期 在运行Jav ...

  4. [Web 前端] 002 html 常用行行级元素

    目录 1. html 常用的行级元素 1.1 链接标签 1.2 a 标签的锚点的使用 1.3 文本标签 1.4 无语义的行级元素 span 1.5 html 中的实体字符 1. html 常用的行级元 ...

  5. [Vim 填坑] 01 Vim 中替换与注释的补充

    目录 1. print( 坑的信息 ) 2. 开始填坑 (1) :n1,n2s/old/new/gc 的后续命令 ^E ^Y (2) 利用"V-可视"模式进行多行注释 1. pri ...

  6. go工具链

    1 编辑器 goland 2 GOPATH GOPATH是go的一个环境变量,它以绝对路径提供go的工作目录. go工程的源码存放在${GOPATH}/src目录下,go编译过程中生成的中间文件存放在 ...

  7. squid代理服务问答

    1. 简述一下squid的用途?squid可以做代理和缓存服务器,而做代理时,可以分为正向代理和反向代理.正向代理用在企业办公环境中,企业员工上网通过代理来上网,代理的缓存功能可以为企业节省宝贵的带宽 ...

  8. java_第一年_JavaWeb(15)

    Filter过滤器,Servlet API 中提供了一个Filter接口,用于实现用户在访问某个目标资源前对其进行拦截: 拦截原理:web服务器通过Filter接口调用doFilter方法,会传递一个 ...

  9. [常用类]Math、Random、System、BigInteger、BigDecimal

    Math类中的成员全是静态成员,构造方法是 私有的,以避免被创建对象 常用方法: int abs() double ceil() //向上取整 double floor() //向下取整 int ma ...

  10. hdu6357 Hills And Valleys (最长不下降子序列)

    题目传送门 题意: 给你0~9的字符串,问你翻转哪个区间后使得其最长不下降子序列长度最长 思路: 因为字符是0~9,所以我们可以定义一个b数组来枚举L,R, 去和原来的字符串去求最长公共子序列长度,不 ...