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

    文章

    18275

    浏览量

    222164
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8651

    浏览量

    361816
  • 存储器
    +关注

    关注

    38

    文章

    7148

    浏览量

    161992
  • FIQ
    FIQ
    +关注

    关注

    0

    文章

    9

    浏览量

    2233
收藏 人收藏

    评论

    相关推荐

    用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

    如何处理STM32的HAL库函数返回异常问题?

    STM32运行死机了,是很可能可以在这种 库函数运行返回值不是 HAL_OK 中进行故障定位的。 (3)问题是 一旦出现了这种返回值异常的错误,记录在哪里比较好?芯片自带FLASH区域?EEPROM?在
    发表于 04-17 06:39

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

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

    labview调用python的时候可以多个返回值

    我需要返回多个数组
    发表于 12-21 22:48

    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

    STM32驱动LTC2983芯片,上电后把复位脚拉高,读取到中断脚为高电平,但是状态寄存器的返回值一直是1的原因?

    芯片上电后,把复位脚拉高,读取到中断脚为高电平,但是状态寄存器的返回值一直是1,按照手册理论上应该返回0x40或者0x80才对,大神遇到过吗?求解答,谢谢
    发表于 12-01 08:30

    arm异常响应和异常返回机制是什么样子的?

    arm异常响应和异常返回机制是什么样子的?  ARM是一种RISC指令集架构,广泛用于无线电视、移动电话、嵌入式系统等领域。
    的头像 发表于 10-19 16:36 566次阅读

    sprintf和printf什么区别?返回值什么作用?

    sprintf和printf什么区别,返回值什么作用?
    发表于 10-08 08:19

    Python函数作为返回值

    函数作为返回值 函数除了作为代码块,作为接收参数,还可以把函数作为结果返回。 例子: 可变参数的求和: 通常 def calc_sum ( *args ): ax = 0 for n in args
    的头像 发表于 09-27 17:01 867次阅读

    esp_now_send的返回值是什么意思?

    ESP_NOW_SEND_SUCCESS 或 ESP_NOW_SEND_FAIL,但这些都不是为我定义的,所以我不能在我的代码中使用它们甚至将它们与 esp_now_send 的返回值进行比较。 我正在
    发表于 06-02 06:27

    Arduino/ESP8266函数不返回值导致异常的原因?

    () { } 所以 initFunc 应该返回一个 int 而不是,但是安装程序忽略了返回值。在 C 中,这会生成 警告:控件到达非空函数 [-Wreturn-type] 的末尾 ,但运行正常。 在
    发表于 05-08 07:36