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. str_pad()函数

    str_pad - 使用另一个字符串填充字符串为指定长度   <?php $str = 'hello world '; echo str_pad($str,20,'·'); ?>   结果 ...

  2. Linux安装nslookup命令

    做DNS的人都知道nslookup命令是做什么用的,windows系统自带的.但是linux系统是不自带这个命令的,需要人手动安装.如果您不记得这是哪个软件包提供这个命令的话,那您还真会有些麻烦了.下 ...

  3. 查看磁盘和文件的使用情况df和du

    df, du: disk filesystem, disk usage. df : 查看一级目录的使用情况, df -h du: 则是可以查看目录或者某个文件的占用磁盘空间的情况, du -h: 使用 ...

  4. fatal: repository 'xxxx' not found

    环境:centOS7  背景:公司代码仓库迁移,因而配置的jenkins自动打包git地址也要跟着变化. 问题描述:git clone http xxxx.git后报错: fatal: reposit ...

  5. Oracle-数据导出和导入

    对数据库进行逻辑备份或数据转储,也就是对数据库实时导入.导出操作时,既可以使用常规的EXP/IMP客户端程序,也可以使用数据泵技术:IMPDP/EXPDP 使用数据泵导出或导入的优点: 1.数据泵导出 ...

  6. clientdataset 读取excel 如果excel 文件不存在的时候 相应的gird 会不显示数据, 鼠标掠过 gird 格子 才会显示数据。 这是一个bug 哈哈

    clientdataset 读取excel   如果excel 文件不存在的时候   相应的gird 会不显示数据, 鼠标掠过 gird 格子 才会显示数据.   这是一个bug 哈哈

  7. python中5个json库的速度对比

    python中json的序列化与反序列化有很多库,具体选择使用哪一个,或者哪一个速度更快呢? 先上结果 json序列化与反序列化速度对比(按总时间排序:测试数据100 * 10000) ujson 序 ...

  8. Java ——方法

    本节重点思维导图  方法的定义 例题:1!+2!+3!+4!+…..+15!=? public class Demo { public static void main(String[] args) ...

  9. Fiddler代理抓取的接口的服务器返回出现"Response body is encoded. Click to decode. "

    参考与:https://blog.csdn.net/wsbl52006/article/details/53256705 解决办法: Rules > Remove All Encodings 勾 ...

  10. JDK8以后接口是可以定义实现方法,必须需要default修饰符修饰

    package com.company.java.oop.cls; interface IB { default void doMethod1() { System.out.println(" ...