一. ARM的基本设定

  1.1. ARM 采用的是32位架构

  1.2. ARM约定:

    a. Byte : 8 bits

    b. Halfword :16 bits (2 byte)

    c. Word : 32 bits (4 byte)

  1.3. 大部分ARM core 提供:

    a. ARM 指令集(32-bit)

    b. Thumb 指令集(16-bit )

    c. Thumb2指令集(16 & 32bit)

二. ARM处理器工作模式

  2.1. ARM 有7个基本工作模式:

    User : 非特权模式,大部分任务执行在这种模式

    FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式

    IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式

    Supervisor :当复位或软中断指令执行时将会进入这种模式

    Abort : 当存取异常时将会进入这种模式

    Undef : 当执行未定义指令时会进入这种模式

    System : 使用和User模式相同寄存器集的特权模式

    注:1.除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。

      2. Privilege中除Sys模式外,其余5种为异常模式

      3. 各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是CPU在某些情况下自动切换。

      4. 各种模式下权限和可以访问的寄存器不同

三. ARM通用寄存器

  3.1. ARM共有37个寄存器,都是32位长度

  3.2. 不同模式下的寄存器分布

  3.3. 寄存器说明  

    3.3.1. sp指针表示栈指针,是程序工作区。

    3.3.2. lr用来做返回控制,用来存储返回值(函数调用返回值)。

    3.3.3. pc表示程序控制寄存器,用来存储程序执行在哪。

    3.3.4. CPSR程序状态寄存器

    3.3.5. spsr是用来保存cpsr。(例如:当从USER转换到IRQ模式时,将USER的状态保存到IRQ的spsr中)

四. 异常处理机制机制

  4.1. 什么是异常

    4.1.1. 异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续回来执行原来的工作

    4.1.2. 中断是异常的一种。

  4.2. 异常向量表

    4.2.1. 所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的

    4.2.2. 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作)

    4.2.3. 异常向量表是硬件向软件提供的处理异常的支持

  4.3. 异常处理流程

    4.3.1. 当异常产生时, ARM core:

      4.3.1.1. 拷贝 CPSR 到 SPSR_<mode>                                                                 

      4.3.1.2.  设置适当的 CPSR 位

        a. 改变处理器状态进入 ARM 态

        b. 改变处理器模式进入相应的异常模式

        c. 设置中断禁止位禁止相应中断 (如果需要)

      4.3.1.3. 保存返回地址到 LR_<mode>

      4.3.1.4. 设置 PC 为相应的异常向量

    4.3.2. 返回时, 异常处理需要:

      4.3.2.1. 从 SPSR_<mode>恢复CPSR

      4.3.2.2. 从LR_<mode>恢复PC

    Note: 1.这些操作只能在 ARM 态执行.

       2. 以上说的是CPU设计时提供的异常向量表,一般成为一级向量表。有些CPU为了支持多个中断,还会提供二级中断向量表,处理思路类似于这里说的一级中断向量表。

参考《朱老师.1.2ARM裸机课件》

ARM编程模式和7钟工作模式的更多相关文章

  1. ROS的工作模式和ESXI网卡工作模式的关系

    1.ROS网卡如果工作在桥接模式,那么ESXI网卡的工作模式必须设置为Promiscuous Mode(混杂模式)和Forged Transmits(伪传输)这两个必须都为开启状态,如下: 这种情况, ...

  2. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_13.RabbitMQ研究-工作模式-header和rpc工作模式

    header模式 header模式与routing不同的地方在于,header模式取消routingkey,使用header中的 key/value(键值对)匹配 队列. 案例: 根据用户的通知设置去 ...

  3. ARM处理器工作模式

    学习ARM处理器参考的首选资料是ARM Architecture Reference Manual,是最专业权威的学习资料. ARM处理器共有7种工作模式,如表1-1和1-2所示: 表1-1 处理器工 ...

  4. ARM 寄存器 和 工作模式了解

    一. ARM 工作模式 1.   ARM7,ARM9,ARM11,处理器有 7 种工作模式:Cortex-A 多了一个监视模式(Monitor) 2.  用户模式:非特权模式,大部分任务执行在这种模式 ...

  5. ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库

        在网络篇①中,博主主要讲解了Arduino上开发ESP8266的插件库 Arduino Core For ESP8266.但是,并没有讲到关于这个模块的工作模式,所以本篇讲着重讲解ESP826 ...

  6. 鸿蒙内核源码分析(工作模式篇) | CPU是韦小宝,七个老婆 | 百篇博客分析OpenHarmony源码 | v36.04

    百篇博客系列篇.本篇为: v36.xx 鸿蒙内核源码分析(工作模式篇) | CPU是韦小宝,七个老婆 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CP ...

  7. apache 的工作模式

    总结:访问量大的时候使用 worker模式:  每个进程,启动多个线程来处理请求,每个线程处理一次请求,对内存要求比较高. prefoek模式 : 每个子进程只有一个线程,一次请求一个进程. 什么是a ...

  8. 讨论.NET Core 配置对GC 工作模式与内存的影响

    引出问题: Asp.net core应用在 Kubernetes上内存使用率过高问题分析 https://mp.weixin.qq.com/s/PqhUzvFpzopU7rVRgdy7eg 这篇文章中 ...

  9. 分组密码的工作模式--wiki

    密码学中,块密码的工作模式允许使用同一个块密码密钥对多于一块的数据进行加密,并保证其安全性.[1][2] 块密码自身只能加密长度等于密码块长度的单块数据,若要加密变长数据,则数据必须先被划分为一些单独 ...

随机推荐

  1. 40 final、finally、finalize的区别

    1.final 用于声明属性.方法.类.分别表示属性不可被改变,方法不可被覆盖,类不可被继承. (1)一个类不能既被声明为abstract的,又被声明为final的. (2)被声明为final的变量必 ...

  2. 【NOIP2016提高A组模拟9.9】闭门造车

    题目 自从htn体验了一把飙车的快感,他就下定决心要闭门造车!但是他两手空空怎么造得出车来呢?无奈的他只好来到了汽车零部件商店. 一走进商店,玲琅满目的各式零件看得htn眼花缭乱.但是他很快便反应过来 ...

  3. shiro框架学习-2-springboot整合shiro及Shiro认证授权流程

    1. 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  4. 全方面了解和学习PHP框架 PHP培训教程

    PHP成为最流行的脚本语言有许多原因:灵活性,易用性等等.对于项目开发来说,我们通常需要一个PHP框架来代替程序员完成那些重复的部分.本文,兄弟连将对PHP框架进行全面解析. PHP框架是什么? PH ...

  5. NOIP2018初赛划水记

    尽管初赛好像没什么好写的,但还是以此作为我的第一篇游记吧. 前夜 本来以为初赛水(去年分数线36来着),几周前做了一套普及组的卷子90多分感觉良好就没管了(不明白那些专门花时间看初赛书的人),结果Mr ...

  6. linux下挂载磁盘

    1.使用fdisk 查看硬盘信息 [root@localhost ~]# fdisk -l Disk /dev/sdb: 107.4 GB, 107374182400 bytes 255 heads, ...

  7. d3d.h和d3d9.h混用的问题

    d3d.h和d3d9.h混用的时候,一大堆错误,不管怎么调整包含顺序都不对,最后看到这个网址解决的http://www.programmer-club.com.tw/ShowSameTitleN/di ...

  8. 一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制

    这个是可以的,一个“.java”源文件里面可以包含多个类,但是只允许有一个public类,并且类名必须和文件名一致. 每个编译单元只能有一个public 类.这么做的意思是,每个编译单元只能有一个公开 ...

  9. 解决samlexception-inresponsetofield-of-the-response-doesnt-correspond-to-sent-mess

    sp在校验samlresponse 根据id在session中的samlrequestid 取出,两者进行对比,这里如果做idp-init的话 可以注释掉. 1第一种方法 WebSSOProfileC ...

  10. 终于, Delphi XE2 携带 GDI+ 库了

    终于, Delphi XE2 携带 GDI+ 库了 使用了较早的 http://www.progdigy.com uses Winapi.GDIPAPI, Winapi.GDIPOBJ{, Winap ...