精华内容
下载资源
问答
  • ARM的处理器模式几种要看是ARM的哪个系列,但是以现在的系列来说,九种模式,这九种模式就是CPU在运算的时候,本来在读程序,突然系统发生异常,比如说蓝屏,这个时候操作系统肯定相关的处理,同时我们也需要...

     

      ARM的处理器模式分几种要看是ARM的哪个系列,但是以现在的系列来说,有九种模式,这九种模式就是CPU在运算的时候,本来在读程序,突然系统发生异常,比如说蓝屏,这个时候操作系统肯定有相关的处理,同时我们也需要CPU一些信号,那么我们就可以通话CPU的切换来进行处理,这样实际上是在最低级别上考虑到的方式来完成了安全控制和效率控制,还有节能控制,所以这就是我们为什么要模式切换的原因,它模式与模式之间相对而言是比较独立的。

      Cortex-A九种处理器模式

      1user模式:用户模式,大部分程序运行时候的非特权模式。

      2FIQ模式:快速中断模式,进入FIQ中断异常,中断也会分类,除了硬件中断还有软件中断,中断的时候也会有消息传过来,这个消息可能数据量比较大,而且要求还很大,还有的消息数据量比较小,它要求就会很小,这种要求大的中断我们就称为快速中断,比较小的我们就称为一般中断。

      3IRQ模式:一般中断模式。

      4SupervisorSVC)模式:超级管理员,它主要是用来管理调用指令被执行或者reset的时候,这个模式的权限级别非常大,所以一般情况下是不能随便用的。

      5MonitorMON)模式:监视模式,就像后台服务,就像监测网络信号,其实CPU不需要去处理一些用户中断,这个模式主要用来安全扩展模式,只用于安全。

      6AbortABY)模式:退出模式,通常开始发生了用户级别的开始,就会出现这样的退出,这个时候CPU就会说暂停下面的代码运行,就直接退出。

      7HypHYP)模式:是一个超级的监视者,它比超级管理员要稍微低一点,它主要是用来做一些虚拟化的扩展。

      8UndefUND)模式:它就是未定义的指令执行的时候,比如说一条指令是CPU不识别的,就叫做未定义。

      9SystemSYS)模式:系统模式,当系统自己异常的时候,就会发生这样的模式,它有一个特点就是可以进行各个模式的切换,在不同的状态的时候,访问的寄存器就有可能不一样,这个模式用到的寄存器与用户模式是共享的,只是访问级别不一样。这九种模式里面User模式称为非特权模式,其他的全部称为特权模式。

     

    原文链接:http://www.maiziedu.com/wiki/arm/mode/

    转载于:https://www.cnblogs.com/maizi008/p/7527035.html

    展开全文
  • arm中system模式的作用

    2017-10-31 10:56:30
    交了钱被人逼着学才会努力深究,真是贱以前就知道arm有7基本工作模式 FIQ 、IRQ由中断进入 UNDEF、ABORT 由程序异常进入 SVC由上电和软中断进入 user由SVC处理程序主动进入 但是还有一个system,使用和user...

    这几天学了很多arm细节知识,个人平时实在没有深入进去
    交了钱被人逼着学才会努力深究,真是贱

    以前就知道arm有7种基本工作模式
    FIQ 、IRQ由中断进入
    UNDEF、ABORT 由程序异常进入
    SVC由上电和软中断进入
    user由SVC处理程序主动进入
    但是还有一个system,使用和user相同的寄存器,但是又没有SPSR,同时还能执行特权指令
    这么一个另类,OS把它当user用不安全,当异常和中断,又没有自动进入方式
    怎么看怎么别扭,当然这也是领悟之后才意识到的,system是用来解决arm中中断可重入问题的
    搜了一下,网上的关于arm可重入中断的解释只有1篇,而且没有考虑完全http://blog.chinaunix.net/u1/58640/showart_513501.html
    默认的中断处理函数都会自己先主动把lr压栈先,此文没有考虑这一点,把破坏想的严重了
    这样的理论知识实践中几乎没有用到,唯有追求专业的人士才会深究,这样就能满足特殊要求,做到一般人做不到的事情

    首先,armcc关键字__irq不能用来编写可重入中断
    当中断可重入时,在中断处理函数中使用 BL 调用子函数,这时候问题就来了,分两种情况
    如果子函数不是__irq 方式申明的,没有自己压栈lr的习惯,那么此时再来一个irq中断,lr_irq就被新值冲掉
    ,从此陷入一个死循环。
    如果子函数是会主动压栈lr的好孩子,那么仅仅在执行压栈lr的这条指令时,发生irq中断才会导致上述问题,但是触发问题的条件就变得很苛刻了

    所以,这时候就需要system模式来拯救世界了
    编写可重入中断必须借助以下汇编代码
    IRQHandler
    ;LR_IRQ ,SPSR_IRQ,r12压栈,避免下一个IRQ中断将其冲掉
    sub lr,lr,#4
    stmfd sp!,{lr}
    mrs r14,spsr
    STMFD sp!,{r12,r14}
    ;读、清中断控制器中断源
    ;省略相关代码
    mov r12,#IntBase
    LDR r12,[r12,#IntSource]
    ;切换到system模式,同时使能IRQ
    mrs r14,cpsr
    bic r14,r14,#0x9f
    orr r14,r14,#0x1f
    msr CPSR_c,r14
    ;保存r0-r3,LR_user到user栈中,然后调用c子程序,中断源r0最为一个参数传进c处理函数
    BL C_irq_handler ;看名字,就知道这个c程序是__irq形式申明的
    ;是一个会自己压栈LR的好孩子
    LDMFD sp!,{r0-r3,lr}
    ;切换到IRQ模式同时禁止IRQ
    mrs r12,cpsr
    bic r12,r12,#0x1f
    orr r12,r12,#0x92
    msr CPSR_c,r12
    ;恢复LR_irq,SPSR_irq和工作寄存器r12,然后退出IRQ
    LDMFD sp!,{r12,r14}
    msr SPSR_csxf,r14
    LDMFD sp!,{PC}^
    3

    展开全文
  • 关于异常处理,分为三部分: ARM异常和模式:core处理异常时的操作,几种模式介绍。...ARM处理器一共7种可以暂停指令的执行序列的异常。 主要分为三个部分: 点击这里 http://www.makeru.com.cn/live/35...

    关于异常处理,分为三部分:

    1. ARM异常和模式:core处理异常时的操作,几种模式介绍。
    2. Vector table:
    3. 异常优先级
    4. lr偏移:几种异常如何返回

    异常和中断处理简介

    在嵌入式系统中异常处理是核心之一。高效的处理能够极大的提升系统的性能。
    ARM处理器一共有7种可以暂停指令的执行序列的异常。
    主要分为三个部分:
    点击这里 http://www.makeru.com.cn/live/3523_1666.html?s=70408
    创客学院带你搞定异常和中断处理

    1. Exception handling
    2. Interrupts
    3. Interrupt handling schemes
      今天我们主要介绍第一部分

    Exception Handling
    1.ARM Processor Exceptions And Modes

    任何一种中断模式都可以通过手动的修改cpsr的值来进入。但是User和System模式是仅有的2个不能由相应中断进入的模式,换句话说,我们必须要通过手动修改cpsr才能进入。

    当一个异常产生的时候,core会自动进行如下4步:

    1. saves the cpsr to the spsr of the exception mode
    2. saves the pc to the lr of the exception mode
    3. sets the cpsr to the exception mode
    4. sets the pc to the address of the exception handler
      需要注意的是,当异常产生的时候,ARM处理器总是会切换到ARM状态。

    2.Vector Table

    handler定位在相应内存位置中,如下图的IRQ,FIQ
    0x00000018: 0xe59ffa38 IRQ ; ldr pc, [pc, #irq]
    0x0000001c: 0xe59ffa38 FIQ ; ldr pc, [pc, #fiq]

    3.Exception Priorities

    4.Link Register Offset

    如下三种从IRQ和FIQ异常处理返回的例子

    例1:
    handler

    SUBS pc, r14, #4 ;pc = r14 -4
    因为SUB后的S和pc作为目标寄存器,cpsr的值会自动从spsr中恢复出来

    例2:
    handler
    SUB r14, r14, #4 ;r14 -= 4



    MOVS pc, r14
    r14 = r14 -4, pc = r14 , cpsr =spsr(因为S)

    例3:

    handler
    SUB r14, r14, #4 ; r14 = r14 - 4
    STMFD r13!, {r0-r3, r14} ;store context

    LDMFD r13!, {r0-r3, r14}^ ;return

    STMFD,LDMFD 分别提供了pop/push的功能。STMFD sp!, {r0-r3, r14}就是依次将r14, r3, r2, r1放入栈中。LDMFD r13!, {r0-r3, r14}则依次反向取出。 这个符号,则强制cpsr从spsr中恢复出来。

    展开全文
  • arm中system模式的作用2010-10-20 16:44 这天学了很多arm细节知识,个人平时实在没有深入进去 交了钱被人逼着学才会努力深究,真是贱 <br />以前就知道arm有7基本工作模式 FIQ 、IRQ由中断...
    转_arm中system模式的作用
    2010-10-20 16:44

    这几天学了很多arm细节知识,个人平时实在没有深入进去
    交了钱被人逼着学才会努力深究,真是贱

    以前就知道arm有7种基本工作模式
    FIQ 、IRQ由中断进入
    UNDEF、ABORT 由程序异常进入
    SVC由上电和软中断进入
    user由SVC处理程序主动进入
    但是还有一个system,使用和user相同的寄存器,但是又没有SPSR,同时还能执行特权指令
    这么一个另类,OS把它当user用不安全,当异常和中断,又没有自动进入方式
    怎么看怎么别扭,当然这也是领悟之后才意识到的,system是用来解决arm中中断可重入问题的

    搜了一下,网上的关于arm可重入中断的解释只有1篇,而且没有考虑完全http://blog.chinaunix.net/u1/58640/showart_513501.html
    默认的中断处理函数都会自己先主动把lr压栈先,此文没有考虑这一点,把破坏想的严重了

    这样的理论知识实践中几乎没有用到,唯有追求专业的人士才会深究,这样就能满足特殊要求,做到一般人做不到的事情

    首先,armcc关键字__irq不能用来编写可重入中断
    当中断可重入时,在中断处理函数中使用 BL 调用子函数,这时候问题就来了,分两种情况
    如果
    子函数不是__irq 方式申明的,没有自己压栈lr的习惯,那么此时再来一个irq中断,lr_irq就被新值冲掉
    ,从此陷入一个死循环。
    如果子函数是会主动压栈lr的好孩子,那么仅仅在执行压栈lr的这条指令时,发生irq中断才会导致上述问题,但是触发问题的条件就变得很苛刻了

    所以,这时候就需要system模式来拯救世界了
    编写可重入中断必须借助以下汇编代码

    IRQHandler
            ;LR_IRQ ,SPSR_IRQ,r12压栈,避免下一个IRQ中断将其冲掉
            sub     lr,lr,#4
            stmfd   sp!,{lr}
            mrs     r14,spsr
            STMFD   sp!,{r12,r14}  

            ;读、清中断控制器中断源
            ;省略相关代码        
            mov     r12,#IntBase
            LDR     r12,[r12,#IntSource]

            ;切换到system模式,同时使能IRQ
            mrs     r14,cpsr
            bic     r14,r14,#0x9f
            orr     r14,r14,#0x1f
            msr     CPSR_c,r14

            ;保存r0-r3,LR_user到user栈中,然后调用c子程序,中断源r0最为一个参数传进c处理函数
            BL      C_irq_handler ;看名字,就知道这个c程序是__irq形式申明的
                                    ;是一个会自己压栈LR的好孩子
            LDMFD   sp!,{r0-r3,lr}

            ;切换到IRQ模式同时禁止IRQ
            mrs     r12,cpsr
            bic     r12,r12,#0x1f
            orr     r12,r12,#0x92
            msr     CPSR_c,r12

            ;恢复LR_irq,SPSR_irq和工作寄存器r12,然后退出IRQ
            LDMFD   sp!,{r12,r14}
            msr     SPSR_csxf,r14
            LDMFD   sp!,{PC}^

     

     

    可重入中断处理要点

    缺省情况下ARM 中断是不可重入的,因为一旦进入异常响应状态,ARM 自动关闭中断使能。如果在异常处理过程中简单地打开中断使能而发生中断嵌套,显然新的异常处理将破坏原来的中断现场而导致出错。但有时候中断的可重入又是需要的,因此要能够通过程序设计来解决这个问题。其中有二点是这个问题的关键:

    (a) 新中断使能之前必须要保护好前一个中断的现场信息,比如LR_irq 和SPSR_irq 等,这一点容易想到也容易做到。

    (b) 中断处理过程中对BL 的保护

    在中断处理函数中发生函数调用(BL)是很常见的,这个问题无法通过增加额外的现场保护指令来解决。一个巧妙的办法是在重新使能中断之前改变处理器的模式,也就是使上面程序中的“BL Foo”指令不要运行在IRQ 模式下。这样当新中断发生时就不会造成LR 寄存器的冲突了。考虑ARM 的所有运行模式,采用System 模式是最恰当的,因为它既是特权模式,又与中断响应无关。

    下面是可重入代码(包括BL调用)的基本流程代码:

            ;/* @ Save return address */
            sub     lr, lr, #4
            stmfd   sp!, {lr}
           
            ;/* @@ Save spsr_fiq */
            mrs   r14, spsr
            stmfd sp!, {r14}
             
            ;/* here should disable the corresponding interrupt */
             
            ;/* @@@ Change to SYS mode and enable system FIQ */
            msr     cpsr_c, #0x1F
           
            ;/* @@@@ Save SYS mode registers which next C routine will use */
            stmfd sp!, {r0-r12, lr}
           
            ;/* @@@@@ Jump to C code */
            IMPORT C_Fiq_Handler
            bl   C_Fiq_Handler
           
            ;/* @@@@ Restore SYS mode registers */
            ldmfd sp!, {r0-r12, lr}
           
            ;/* @@@ Change mode back to FIQ mode and disable FIQ */
            msr   spsr_c, #(0x11 | Bit_FIQ)
           
            ;/* here should enable the corresponding interrupt */
           
            ;/* @@ restore spsr register */
            ldmfd sp!, {r14}
            msr   spsr_c, r14
           
            ;/* @ return */
            ldmfd sp!, {pc}^

     

    展开全文
  • 其余模式下都一个私有SPSR保存状态寄存器,用来保存切换到该模式之前执行状态,之所以用户模式和系统模式没有SPSR是因为,通常CPU大部分时间执行在用户模式下,当产生异常或系统调用时会分别切换进入另外几种...
  • ARM的37个寄存器详解

    千次阅读 2017-12-17 19:55:15
    37个寄存器中30个为“通用”型,1个固定用作PC,一个固定用作CPSR,5个固定用作5种异常模式SPSR。注意:System模式使用User模式寄存器。当ARM从用户模式(User)切换到快速中断模式(FIQ),寄存器r0~r7,r15是...
  • 其中有几个寄存器比较特殊,下面着重介绍一下:R11 帧指针fpR12 暂存spR13 栈寄存器 sp堆栈指针r13(SP):每一种异常模式都有其自己独立r13,它通常指向异常模式所专用堆栈,也就是说五种异常模式、非异常模式...
  • ARM硬件架构学习体会

    2014-01-03 20:08:00
    为什么ARM微处理器要分那么多的模式呢? ARM微处理器在不同模式下对于系统资源访问权限...ARM处理器以下几种工作模式ARM微处理器工作模式的转变 (1)通过软件方式进入特权模式下修改CPSR的模式位M...
  • ARM小知识点总结

    2021-03-25 09:29:08
    ARM有几种工作模式? 用户、系统、快速中断、外部中断、超级用户、异常、未定义共七种模式 CPSR、SPSR寄存器分别是什么? CPSR:程序状态寄存器(current program status register) (当前程序状态寄存器),在任何...
  • 异常的概念在单片机中也接触过,它的意思是让CPU可以暂停当前...ARM9以下几种异常模式ARM架构的异常向量的地址可以是0x00000000,也可以是0xffff0000,Linux使用地址0xffff0000。在初始化时先将中断向量表放...
  • Tiny4412中断介绍

    2019-09-30 23:50:16
    通过天裸板驱动开发,今天对ARM的中断做一些简单总结,前面我们已经了解了ARM的7种异常模式,中断是异常模式的一,在ARM中异常事件发生将会触发中断,但是,所有的中断都不能直接访问cpu,而是都统一由GIC(中断...
  • s3c2440中断控制器操作

    2019-09-27 21:35:02
    几种模式有什么不同呢, 1、不同寄存器 2、不同权限 3、触发条件 对于不同寄存器,ARM920T有31个通用32位寄存器和6个程序状态寄存器。这37个寄存器分为7组,进入某个工作模式时就使用他那组寄存器。...
  • ARM的异常有几种,各进入何种工作模式?他们退出各采用什么指令? 什么是小端和大端存储器组织? 什么是数据的边界对齐 ARM核现在几种? ARM的寻址方式哪些?各写一条说明。 在ARM的立即寻址方式下其立即数...
  • Cortex-A7 处理器 9 处理模式 除了 User(USR)用户模式以外,其它 8 运行模式都是特权模式。这个运行模式可以通过软件进行任意切换,也可以通过中断或者异常来进行切换。大多数程序都运行在用户模式,用户...
  • 嵌入式复习习题

    2018-01-15 15:44:14
    4. ARM处理器有几种工作状态,各自特点。工作状态之间如何进行转换,异常响应时,处理器处于何种状态。 答:ARM有两种工作状态: ①ARM状态,此时处理器执行32位字对齐的ARM指令。 ②Thumb状态,此时处理器执行16...
  • LSHBOX:局部敏感算法(LSH)C++工具箱,提供了好几种普遍LSH算法,也可以支持Python和MATLAB。 PGM-index:能够快速查找、前导、范围搜索和更新数以亿计项数组数据结构,其跟传统索引相比,使用梯度顺序而...
  • 目前支持了以下几种插件: ShadowSocks KoolProxy Aria2 VsFtpd kms Frpc Ngrok WebShell TinyProxy Entware KodExplorer EasyExplorer HttpFile VerySync FastDick FireWall JetBrains QianDao FileBrowser ...
  • arm920t: CPU类型(CPU),其对应于 cpu/arm920t子目录。 fs2410: 开发板型号(BOARD),对应于 board/fs2410目录。 NULL: 开发者/或经销商(vender),本例为空 s3c24x0: 片上系统(SOC) (5)编译 #make fs2410_...
  • 通过此角色,能熟练使用高阳ICS金融平台,对职责链模式有更深刻理解。掌握了支付密码、登陆密码加密、转加密流程。 技能清单 1、逆向开发技能 1.1 熟悉领域 iOS 逆向开发,熟悉iphone/tweak、iphone...
  • 不要相信百度来长篇大论所谓教程,那些都是好年前老皇历了,会导致不判题,不显示,不好升级等等问题。 尤其别装 Apache ,如果已经安装,请先停用或卸载,以免80端口冲突。 不要 使用 宝塔 LNMP LAMP ...
  • 输出格式为 [serialNumber] [state],serialNumber 即我们常说 SN,state 如下几种: offline —— 表示设备未连接成功或无响应。 device —— 设备已连接。注意这个状态并不能标识 Android 系统已经完全...

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

arm的异常模式有几种