热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

S3C2440裸机异常与中断__CPU的工作模式和状态以及寄存器

目录1.CPU工作模式(Mode)2.状态(State)3.寄存器1.CPU工作模式(Mode)ARMCPU有七种模式,各种模式如下图所示。注意用户模式下不可

目录

1.CPU工作模式(Mode)

2.状态(State)

3.寄存器



1.CPU工作模式(Mode)

ARM CPU有七种模式,各种模式如下图所示。注意用户模式下不可进入其他模式,用户模式是在有操作系统的时候给应用程序使用的,写应用程序的人水平千差万别,不能保证写的程序是好是坏,所以让应用程序运行在用户模式,限制应用程序的权限,防止破坏整个系统,

1、用户模式(usr):正常的程序执行状态

2、快速中断模式(fiq): 处理快速中断,支持高速数据传送或通道处理

3、中断模式(irq): 处理普通中断

4、管理模式(svc):操作系统使用的保护模式

5、系统模式(sys):运行具有特权的操作系统任务

6、数据访问终止模式(abt):数据或指令预取终止时进入该模式

7、未定义指令终止模式(und):未定义的指令执行时进入该模式

除用户模式外,其余6种工作模式都属于特权模式;

特权模式中除了系统模式以外的其余5种模式称为异常模式;

大多数程序运行于用户模式;

进入特权模式是为了具有更高的权限去处理中断、异常、或者访问被保护的系统资源;

2.状态(State)

 ARM架构的CPU有ARM state和Thumb state,

ARM State:用的是ARM指令集,每个指令占据4 byte,

Thumb State:用的是Thumb指令集,每个指令2 byte.

比如对于同样的一条指令,MOV R0,R1 对于ARM指令集就要占据四个字节,对于Thumb指令集占据两个字节,这里的占据几个字节是指这条汇编指令会编译成机器码之后占据几个字节。我们引入Thumb指令集是为了减少存储程序的空间,这对单片机特别有效,单片机的flash空间比较小,所以我们要减少程序存储的空间,但是在我们的嵌入式linux中,我们的norflash足够大,不需要节省空间,所以我们一直使用的是ARM指令集。

Thumb是ARM体系结构中一种16位的指令集。Thumb指令集可以看作是ARM指令压缩形式的子集,它是为减小代码量而提出,具有16bit的代码密度。Thumb指令体系并不完整,只支持通用功能,必要时仍需要使用ARM指令,如进入异常时。其指令的格式与使用方式与ARM指令集类似,而且使用并不频繁,Thumb指令集作一般了解。

3.寄存器

每种异常模式主要差别就在于寄存器的差别,

        我们可以看到在所有的7种模式下我们都可以使用r0-r15.但是有些寄存器画有灰色三角形,这表明在该模式下面访问到这些寄存器的时候,访问到的是这个模式下专属的寄存器,比如在FIQ模式下,我们访问R8的时候,访问的是FIQ模式下它专属R8寄存器,这时候访问到的R8和用户模式下访问到的R8寄存器不是同一个物理寄存器,我们可以看到在后面的5种模式下,R13,R14都是专用寄存器,其中R13用作栈,R14用作LR返回地址,也就是每种异常模式下我们可以分别设置它的栈,然后LR用来保存发生异常时的指令地址。

        下面我们看一下程序状态寄存器,CPSR当前程序状态寄存器,SPSR(saved)保存的程序状态寄存器,用来保存被中断模式的CPSR,低位的M4-M0表示当前CPU处于哪种模式,然后T表示CPU工作与ARM State还是Thumb state,F表示FIQ disable,当该位为1时,所有的FIQ是禁止的。bit28-31是状态位,比如当我们执行cmp R0,R1    beq xx.如果R0=R1,那么状态位的Zero位就是1,然后beq指令会来判断Zero位是否为1,为1则跳转。

 我们来看一下异常的处理流程,上图是进入异常时的步骤,上图是硬件部分实现的,

  1. 发生异常时我们的CPU首先把被中断的下一条指令的地址保存到LR寄存器里面,有可能是PC+4,有可能是PC+8,到底是哪个值取决于不同的情况。
  2. 然后把CPSR保存到SPSR中
  3. 然后修改CPSR的模式位,让CPU进入某种异常模式,
  4. 然后跳到向量表,

然后看一下离开异常时要做什么

  1. 首先让LR寄存器减去某个offset,至于减去什么值看上面的表格,
  2. 然后把CPSR的值恢复。
  3. 然后是清除中断。


推荐阅读
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 华为捐赠欧拉操作系统,承诺不推商用版
    华为近日宣布将欧拉开源操作系统捐赠给开放原子开源基金会,并承诺不会推出欧拉的商用发行版。此举旨在推动欧拉和鸿蒙操作系统的全场景融合与生态发展。 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 性能测试中的关键监控指标与深入分析
    在软件性能测试中,关键监控指标的选取至关重要。主要目的包括:1. 评估系统的当前性能,确保其符合预期的性能标准;2. 发现软件性能瓶颈,定位潜在问题;3. 优化系统性能,提高用户体验。通过综合分析这些指标,可以全面了解系统的运行状态,为后续的性能改进提供科学依据。 ... [详细]
  • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
  • 在Linux系统中,通过命令行查询计算机硬件配置是一项重要的技能。本文介绍了多种实用的命令和技巧,帮助用户高效地获取硬件信息。例如,可以通过 `cat /proc/cpuinfo | grep "physical id"` 命令来查看物理CPU的数量。此外,文章还涵盖了其他关键硬件组件的查询方法,如内存、磁盘和网络设备等。这些命令不仅适用于系统管理员,也适合普通用户了解自己的系统配置。 ... [详细]
  • 在 CentOS 6.7 系统维护中,常用的巡检命令包括:`uname -a` 用于查看内核、操作系统和 CPU 信息;`head -n 1 /etc/issue` 用于查看操作系统的版本;`cat /proc/cpuinfo` 用于获取详细的 CPU 信息;`hostname` 用于显示当前主机名;`ls` 命令则用于列出目录内容。这些命令可以帮助系统管理员快速了解系统的运行状态和配置信息,确保系统的稳定性和安全性。 ... [详细]
  • 目前我有两张 BMP 图像文件 a.bmp 和 b.bmp,希望将它们按照以下方式进行融合:首先提取 a.bmp 的所有奇数行像素(如第 1、3、5 行),接着获取 b.bmp 的所有偶数行像素(如第 2、4、6 行)。最终目标是将这些行像素交替排列,生成一张新的图像。此过程需要确保像素顺序正确,并保持图像的整体结构和质量。 ... [详细]
author-avatar
静静我想你啦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有