0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARM异常返回值的合法值有哪些?各返回值分别代表什么?

工程师邓生 来源:未知 作者:刘芹 2023-10-19 16:36 次阅读

ARM异常返回值的合法值有哪些?各返回值分别代表什么?

ARM异常返回值的合法值包括:中断(IRQ)、中止(ABORT)、未定义指令(UND)、系统调用(SWI)、数据终端(DATA ABORT)以及外部中断(FIQ)等。这些异常都代表了一种处理器的行为,可以帮助处理器及时、准确地处理异常事件。下面将详细介绍各个异常的含义及其作用。

1. 中断(IRQ)

中断(IRQ)是处理器在执行指令时,发现了外部设备需要响应处理器的请求,必须借助处理器执行相应的中断服务程序,保证系统的正常运行。IRQ通常由外设发出,用于处理各类事件,例如:接收数据、发送数据、定时器等。当IRQ发生时,处理器会从当前执行的指令转移到IRQ服务程序中运行,等待中断服务程序执行完毕,再返回原执行地址,继续执行先前的指令。

2. 中止(ABORT)

中止(ABORT)是指处理器因为某种错误或异常原因而停止正在执行的指令,进入异常处理模式与异常服务程序相互配合,来进行堆栈还原、错误码保存、数据存储等操作。ABORT异常通常是由一些外部错误原因引起,例如:读取不存在的页面、访问异常的页面等。当ABORT异常发生时,处理器会立即中止执行当前的指令、还原上下文切换堆栈,并跳转到异常服务程序中执行,以处理异常事件。

3. 未定义指令(UND)

未定义指令(UND)是指处理器发现了一条未能正确解码的指令,或者执行了一条不支持的指令时,必须跳转到异常服务程序中执行,以处理这种异常情况。UND异常通常发生在指令集架构不同的系统之间,或者是在编写程序时出现了一些代码错误。在UND异常处理程序中,可以执行一些关键操作,例如:记录不支持的指令、给出警告、将异常程序重定向到正确执行地址,等等。

4. 系统调用(SWI)

系统调用(SWI)是指应用程序通过软件,向操作系统请求进行一些关键操作,例如:打开文件、关闭文件、读取文件、写入文件等。处理器会在特殊的异常处理模式下,将执行上下文保存在堆栈中,并跳转到相应的系统调用处理程序中。这些调用处理程序会执行相应的操作,异步返回结果值,并使用处理器的异常返回指令,跳回到应用程序中恢复执行。

5. 数据终端(DATA ABORT)

数据终端(DATA ABORT)是指处理器试图从存储器中读取或写数据时,出现了无法处理的异常情况。例如:尝试访问一个不支持的内存地址、尝试执行权限不够的操作、或者是尝试执行没有权限的操作等。处理器会在处理模式下保存执行上下文,并跳转到异常处理程序中,以恢复处理器的异常事件。

6. 外部中断(FIQ)

外部中断(FIQ)是指处理器在执行现有的指令时,发现有一个外设需要急速响应,为了更快地响应外设的请求,处理器会将现有的指令暂停,立即跳转到FIQ服务程序中,执行FIQ服务程序中所需的操作,并在处理完FIQ服务程序后,返回原执行地址,继续执行原有的指令。

以上是ARM处理器异常返回值的合法值及其代表的含义详情。这些异常返回值为处理器提供了一种高效、准确地响应相关异常事件的方式,增强了系统的可靠性和弹性。无论是在操作系统内核中,还是在嵌入式系统开发中,都必须充分了解这些异常返回值,以便针对不同的异常情况合理地进行处理。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19138

    浏览量

    228984
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9036

    浏览量

    366659
  • 存储器
    +关注

    关注

    38

    文章

    7445

    浏览量

    163567
  • FIQ
    FIQ
    +关注

    关注

    0

    文章

    9

    浏览量

    2298
收藏 人收藏

    评论

    相关推荐

    C语言经典笔试题集锦

    以下程序,如果 x 等于 254,则函数的返回值是多少?
    的头像 发表于 11-09 11:39 113次阅读

    HTTP相关返回值异常如何解决(下篇)

    ​今天我们讲讲HTTP相关返回值异常如何解决(实例持续更新中)一、4xx客户端错误状态码这些状态码表示请求问题,通常是由于客户端的错误引起的。1.1 400 Bad Request: 请求格式
    的头像 发表于 10-24 17:24 350次阅读
    HTTP相关<b class='flag-5'>返回值</b><b class='flag-5'>异常</b>如何解决(下篇)

    HTTP相关返回值异常如何解决(上篇)

    ​ 今天我们讲讲HTTP相关返回值异常如何解决(实例持续更新中) HTTP介绍 HTTP(超文本传输协议,Hypertext Transfer Protocol)是用于在网络上进行数据交换的应用层
    的头像 发表于 10-20 16:40 216次阅读
    HTTP相关<b class='flag-5'>返回值</b><b class='flag-5'>异常</b>如何解决(上篇)

    PGA280发送指令后无返回值是怎么回事?

    在调试PGA280的时候,给PGA280的寄存器3”set BUF time-out”(如图)发送十六进制指令8300,本应该获得一个19的返回值,但我们却什么都没有收到,PGA280没有反应。 我们怀疑芯片因为供电的原因没有工作。 这是我们测试板的原理图 这是官
    发表于 08-07 06:12

    espconn_send返回值错误的原因?

    ); GPIO_OUTPUT_SET(0, 1);//用于通知主机,数据已经读取完成 在这段函数里面我的espconn_send发送函数的返回值串口打印出来为244,而且我接受buff的服务端也没有接收到数据。所以请问一下这个244是什么错误?
    发表于 07-09 07:28

    一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应处理器

    1. 前言 统一返回值封装、统一异常处理和异常错误码体系的意义在于提高代码的可维护性和可读性,使得代码更加健壮和稳定。统一返回值封装可以避免每一个接口都需要手工拼装响应报文;统一
    的头像 发表于 06-20 15:42 449次阅读

    请问CY68013上位机发送的返回值到底代表什么意思?

    ,刚开始一直没问题,FPGA端接收也正常,上位机返回值也是1, 最后返回值一直是0,所以我一直认为发送失败了,但是今天在FPGA一端抓波形发现,数据是发送过去了的,请问这个返回值到底是什么意思? 在FPGA端能接收到数据的情况下
    发表于 05-24 07:15

    用STM32读取TDC_GP22的结果寄存器,SPI通信读取到的返回值一直是0的原因?

    用STM32读取的TDC_GP22的结果寄存器,但是,SPI通信读取到的返回值一直是0。整个板子供电正常,无任何硬件短路断路问题,已经检验SPI通信,SPI模块没有问题,外接了2路脉冲信号源做测试。不知道有没有人,用过这款芯片?已经挣扎数个月,请大神指教。
    发表于 04-24 06:35

    请问MDK Middleware Network 中的回调函数netTCP_cb_t的返回值我在程序中怎样才能得到并使用?

    请问MDK Middleware Network 中的回调函数netTCP_cb_t的返回值我在程序中怎样才能得到并使用?
    发表于 04-22 07:19

    使用stm32h745zi-q nucleo开发板调试时,发现使用-specs=nano.specs时sscanf返回值错误,为什么?

    使用stm32h745zi-q nucleo开发板调试时,发现使用-specs=nano.specs时sscanf返回值错误,使用标准c库时返回值正确,但内存溢出了,请教如何查找问题。
    发表于 04-01 08:00

    ad7734采样返回值一直都是7FFFFF,是不是芯片坏了吖?

    ad7734 采样返回值一直都是 7FFFFF,是不是芯片坏了?之前能用的,后面突然就变成这样了。不管怎么设置都没用。
    发表于 12-13 07:40

    AD2S1210和FPGA通过SPI通信,设置小于0x40时,回读时返回值不正确怎么解决 ?

    现在的项目用到了AD2S1210,用FPGA和这个片子通过SPI通信,现在调试过程中发现如下问题:周期性对该AD芯片的激励频率设置寄存器(0x91)设置不同频率并回读该寄存器,发现设置小于0x40时,回读时返回值不正确,工程
    发表于 12-07 08:05

    用Zynq7045的PS端的SPI外设配置AD9154读取芯片ID返回值一直为FF的原因?

    用Zynq7045的PS端的SPI外设配置AD9154读取芯片ID(0x005地址)返回值一直为FF,但是用相同的代码去读取AD9434就没有问题,能正常读取ID,实在是搞不清楚问题会出在哪里
    发表于 12-01 11:59

    AD9680几个寄存器写入对应配置位时读出的返回值都是00的原因?

    调试多篇AD9680同步时查阅手册看到timestamp模式,可以简化FPGA里面通道对齐,但是参考手册对寄存器0x1FF和 0x120 0x599(0x58F以设置为0x8d)几个寄存器写入对应配置位时读出的返回值都是00,对其他寄存器则可以正常读写,可能是什么问题呢?
    发表于 12-01 11:13

    tuple函数怎么返回多个

    在编程领域中,函数是非常重要的构建模块,它能够接受输入参数并执行特定的计算,最终返回结果供程序使用。常规的函数只能返回一个,但有时我们希望函数能够返回多个
    的头像 发表于 11-21 16:33 677次阅读