0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

工程師鄧生 ? 來(lái)源:未知 ? 作者:劉芹 ? 2023-10-19 16:36 ? 次閱讀

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

ARM異常返回值的合法值包括:中斷(IRQ)、中止(ABORT)、未定義指令(UND)、系統(tǒng)調(diào)用(SWI)、數(shù)據(jù)終端(DATA ABORT)以及外部中斷(FIQ)等。這些異常都代表了一種處理器的行為,可以幫助處理器及時(shí)、準(zhǔn)確地處理異常事件。下面將詳細(xì)介紹各個(gè)異常的含義及其作用。

1. 中斷(IRQ)

中斷(IRQ)是處理器在執(zhí)行指令時(shí),發(fā)現(xiàn)了外部設(shè)備需要響應(yīng)處理器的請(qǐng)求,必須借助處理器執(zhí)行相應(yīng)的中斷服務(wù)程序,保證系統(tǒng)的正常運(yùn)行。IRQ通常由外設(shè)發(fā)出,用于處理各類事件,例如:接收數(shù)據(jù)、發(fā)送數(shù)據(jù)、定時(shí)器等。當(dāng)IRQ發(fā)生時(shí),處理器會(huì)從當(dāng)前執(zhí)行的指令轉(zhuǎn)移到IRQ服務(wù)程序中運(yùn)行,等待中斷服務(wù)程序執(zhí)行完畢,再返回原執(zhí)行地址,繼續(xù)執(zhí)行先前的指令。

2. 中止(ABORT)

中止(ABORT)是指處理器因?yàn)槟撤N錯(cuò)誤或異常原因而停止正在執(zhí)行的指令,進(jìn)入異常處理模式與異常服務(wù)程序相互配合,來(lái)進(jìn)行堆棧還原、錯(cuò)誤碼保存、數(shù)據(jù)存儲(chǔ)等操作。ABORT異常通常是由一些外部錯(cuò)誤原因引起,例如:讀取不存在的頁(yè)面、訪問(wèn)異常的頁(yè)面等。當(dāng)ABORT異常發(fā)生時(shí),處理器會(huì)立即中止執(zhí)行當(dāng)前的指令、還原上下文切換堆棧,并跳轉(zhuǎn)到異常服務(wù)程序中執(zhí)行,以處理異常事件。

3. 未定義指令(UND)

未定義指令(UND)是指處理器發(fā)現(xiàn)了一條未能正確解碼的指令,或者執(zhí)行了一條不支持的指令時(shí),必須跳轉(zhuǎn)到異常服務(wù)程序中執(zhí)行,以處理這種異常情況。UND異常通常發(fā)生在指令集架構(gòu)不同的系統(tǒng)之間,或者是在編寫程序時(shí)出現(xiàn)了一些代碼錯(cuò)誤。在UND異常處理程序中,可以執(zhí)行一些關(guān)鍵操作,例如:記錄不支持的指令、給出警告、將異常程序重定向到正確執(zhí)行地址,等等。

4. 系統(tǒng)調(diào)用(SWI)

系統(tǒng)調(diào)用(SWI)是指應(yīng)用程序通過(guò)軟件,向操作系統(tǒng)請(qǐng)求進(jìn)行一些關(guān)鍵操作,例如:打開文件、關(guān)閉文件、讀取文件、寫入文件等。處理器會(huì)在特殊的異常處理模式下,將執(zhí)行上下文保存在堆棧中,并跳轉(zhuǎn)到相應(yīng)的系統(tǒng)調(diào)用處理程序中。這些調(diào)用處理程序會(huì)執(zhí)行相應(yīng)的操作,異步返回結(jié)果值,并使用處理器的異常返回指令,跳回到應(yīng)用程序中恢復(fù)執(zhí)行。

5. 數(shù)據(jù)終端(DATA ABORT)

數(shù)據(jù)終端(DATA ABORT)是指處理器試圖從存儲(chǔ)器中讀取或?qū)憯?shù)據(jù)時(shí),出現(xiàn)了無(wú)法處理的異常情況。例如:嘗試訪問(wèn)一個(gè)不支持的內(nèi)存地址、嘗試執(zhí)行權(quán)限不夠的操作、或者是嘗試執(zhí)行沒有權(quán)限的操作等。處理器會(huì)在處理模式下保存執(zhí)行上下文,并跳轉(zhuǎn)到異常處理程序中,以恢復(fù)處理器的異常事件。

6. 外部中斷(FIQ)

外部中斷(FIQ)是指處理器在執(zhí)行現(xiàn)有的指令時(shí),發(fā)現(xiàn)有一個(gè)外設(shè)需要急速響應(yīng),為了更快地響應(yīng)外設(shè)的請(qǐng)求,處理器會(huì)將現(xiàn)有的指令暫停,立即跳轉(zhuǎn)到FIQ服務(wù)程序中,執(zhí)行FIQ服務(wù)程序中所需的操作,并在處理完FIQ服務(wù)程序后,返回原執(zhí)行地址,繼續(xù)執(zhí)行原有的指令。

以上是ARM處理器異常返回值的合法值及其代表的含義詳情。這些異常返回值為處理器提供了一種高效、準(zhǔn)確地響應(yīng)相關(guān)異常事件的方式,增強(qiáng)了系統(tǒng)的可靠性和彈性。無(wú)論是在操作系統(tǒng)內(nèi)核中,還是在嵌入式系統(tǒng)開發(fā)中,都必須充分了解這些異常返回值,以便針對(duì)不同的異常情況合理地進(jìn)行處理。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19032

    瀏覽量

    228442
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9006

    瀏覽量

    366021
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7402

    瀏覽量

    163386
  • FIQ
    FIQ
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    2293
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HTTP相關(guān)返回值異常如何解決(上篇)

    ? 今天我們講講HTTP相關(guān)返回值異常如何解決(實(shí)例持續(xù)更新中) HTTP介紹 HTTP(超文本傳輸協(xié)議,Hypertext Transfer Protocol)是用于在網(wǎng)絡(luò)上進(jìn)行數(shù)據(jù)交換的應(yīng)用層
    的頭像 發(fā)表于 10-20 16:40 ?138次閱讀
    HTTP相關(guān)<b class='flag-5'>返回值</b><b class='flag-5'>異常</b>如何解決(上篇)

    PGA280發(fā)送指令后無(wú)返回值是怎么回事?

    在調(diào)試PGA280的時(shí)候,給PGA280的寄存器3”set BUF time-out”(如圖)發(fā)送十六進(jìn)制指令8300,本應(yīng)該獲得一個(gè)19的返回值,但我們卻什么都沒有收到,PGA280沒有反應(yīng)。 我們懷疑芯片因?yàn)楣╇姷脑驔]有工作。 這是我們測(cè)試板的原理圖 這是官
    發(fā)表于 08-07 06:12

    esp8266編寫了一個(gè)固件,調(diào)用API的時(shí)候會(huì)返回錯(cuò)誤的?

    ,若返回0x01說(shuō)明工作在user2。 我編寫了一個(gè)固件,使用10個(gè)樣品測(cè)試,都是工作在user1下的。然而,調(diào)用這個(gè)API的時(shí)候,8個(gè)返回了正確的(0x00),
    發(fā)表于 07-10 07:55

    espconn_send返回值錯(cuò)誤的原因?

    ); GPIO_OUTPUT_SET(0, 1);//用于通知主機(jī),數(shù)據(jù)已經(jīng)讀取完成 在這段函數(shù)里面我的espconn_send發(fā)送函數(shù)的返回值串口打印出來(lái)為244,而且我接受buff的服務(wù)端也沒有接收到數(shù)據(jù)。所以請(qǐng)問(wèn)一下這個(gè)244是什么錯(cuò)誤?
    發(fā)表于 07-09 07:28

    一站式統(tǒng)一返回值封裝、異常處理、異常錯(cuò)誤碼解決方案—最強(qiáng)的Sping Boot接口優(yōu)雅響應(yīng)處理器

    1. 前言 統(tǒng)一返回值封裝、統(tǒng)一異常處理和異常錯(cuò)誤碼體系的意義在于提高代碼的可維護(hù)性和可讀性,使得代碼更加健壯和穩(wěn)定。統(tǒng)一返回值封裝可以避免每一個(gè)接口都需要手工拼裝響應(yīng)報(bào)文;統(tǒng)一
    的頭像 發(fā)表于 06-20 15:42 ?407次閱讀

    請(qǐng)問(wèn)CY68013上位機(jī)發(fā)送的返回值到底代表什么意思?

    ,剛開始一直沒問(wèn)題,F(xiàn)PGA端接收也正常,上位機(jī)返回值也是1, 最后返回值一直是0,所以我一直認(rèn)為發(fā)送失敗了,但是今天在FPGA一端抓波形發(fā)現(xiàn),數(shù)據(jù)是發(fā)送過(guò)去了的,請(qǐng)問(wèn)這個(gè)返回值到底是什么意思? 在FPGA端能接收到數(shù)據(jù)的情況下
    發(fā)表于 05-24 07:15

    用STM32讀取TDC_GP22的結(jié)果寄存器,SPI通信讀取到的返回值一直是0的原因?

    用STM32讀取的TDC_GP22的結(jié)果寄存器,但是,SPI通信讀取到的返回值一直是0。整個(gè)板子供電正常,無(wú)任何硬件短路斷路問(wèn)題,已經(jīng)檢驗(yàn)SPI通信,SPI模塊沒有問(wèn)題,外接了2路脈沖信號(hào)源做測(cè)試。不知道有沒有人,用過(guò)這款芯片?已經(jīng)掙扎數(shù)個(gè)月,請(qǐng)大神指教。
    發(fā)表于 04-24 06:35

    請(qǐng)問(wèn)MDK Middleware Network 中的回調(diào)函數(shù)netTCP_cb_t的返回值我在程序中怎樣才能得到并使用?

    請(qǐng)問(wèn)MDK Middleware Network 中的回調(diào)函數(shù)netTCP_cb_t的返回值我在程序中怎樣才能得到并使用?
    發(fā)表于 04-22 07:19

    使用stm32h745zi-q nucleo開發(fā)板調(diào)試時(shí),發(fā)現(xiàn)使用-specs=nano.specs時(shí)sscanf返回值錯(cuò)誤,為什么?

    使用stm32h745zi-q nucleo開發(fā)板調(diào)試時(shí),發(fā)現(xiàn)使用-specs=nano.specs時(shí)sscanf返回值錯(cuò)誤,使用標(biāo)準(zhǔn)c庫(kù)時(shí)返回值正確,但內(nèi)存溢出了,請(qǐng)教如何查找問(wèn)題。
    發(fā)表于 04-01 08:00

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

    ad7734 采樣返回值一直都是 7FFFFF,是不是芯片壞了?之前能用的,后面突然就變成這樣了。不管怎么設(shè)置都沒用。
    發(fā)表于 12-13 07:40

    AD2S1210和FPGA通過(guò)SPI通信,設(shè)置小于0x40時(shí),回讀時(shí)返回值不正確怎么解決 ?

    現(xiàn)在的項(xiàng)目用到了AD2S1210,用FPGA和這個(gè)片子通過(guò)SPI通信,現(xiàn)在調(diào)試過(guò)程中發(fā)現(xiàn)如下問(wèn)題:周期性對(duì)該AD芯片的激勵(lì)頻率設(shè)置寄存器(0x91)設(shè)置不同頻率并回讀該寄存器,發(fā)現(xiàn)設(shè)置小于0x40時(shí),回讀時(shí)返回值不正確,工程
    發(fā)表于 12-07 08:05

    用Zynq7045的PS端的SPI外設(shè)配置AD9154讀取芯片ID返回值一直為FF的原因?

    用Zynq7045的PS端的SPI外設(shè)配置AD9154讀取芯片ID(0x005地址)返回值一直為FF,但是用相同的代碼去讀取AD9434就沒有問(wèn)題,能正常讀取ID,實(shí)在是搞不清楚問(wèn)題會(huì)出在哪里
    發(fā)表于 12-01 11:59

    AD9680幾個(gè)寄存器寫入對(duì)應(yīng)配置位時(shí)讀出的返回值都是00的原因?

    調(diào)試多篇AD9680同步時(shí)查閱手冊(cè)看到timestamp模式,可以簡(jiǎn)化FPGA里面通道對(duì)齊,但是參考手冊(cè)對(duì)寄存器0x1FF和 0x120 0x599(0x58F以設(shè)置為0x8d)幾個(gè)寄存器寫入對(duì)應(yīng)配置位時(shí)讀出的返回值都是00,對(duì)其他寄存器則可以正常讀寫,可能是什么問(wèn)題呢?
    發(fā)表于 12-01 11:13

    STM32驅(qū)動(dòng)LTC2983芯片,上電后把復(fù)位腳拉高,讀取到中斷腳為高電平,但是狀態(tài)寄存器的返回值一直是1的原因?

    芯片上電后,把復(fù)位腳拉高,讀取到中斷腳為高電平,但是狀態(tài)寄存器的返回值一直是1,按照手冊(cè)理論上應(yīng)該返回0x40或者0x80才對(duì),大神遇到過(guò)嗎?求解答,謝謝
    發(fā)表于 12-01 08:30

    tuple函數(shù)怎么返回多個(gè)

    在編程領(lǐng)域中,函數(shù)是非常重要的構(gòu)建模塊,它能夠接受輸入?yún)?shù)并執(zhí)行特定的計(jì)算,最終返回結(jié)果供程序使用。常規(guī)的函數(shù)只能返回一個(gè),但有時(shí)我們希望函數(shù)能夠返回多個(gè)
    的頭像 發(fā)表于 11-21 16:33 ?620次閱讀