chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

ARM9中斷中(C語言)如何實現(xiàn)復(fù)位功能,而不是返回中斷前的狀態(tài)?

工程師鄧生 ? 來源:未知 ? 作者:劉芹 ? 2023-10-19 16:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ARM9中斷中(C語言)如何實現(xiàn)復(fù)位功能,而不是返回中斷前的狀態(tài)?

在ARM9處理器的中斷中,當(dāng)系統(tǒng)發(fā)生異常時,處理器會暫停正在執(zhí)行的指令并處理中斷請求。處理中斷的方式有兩種,一種是通過向處理器發(fā)送中斷請求信號,觸發(fā)處理器中斷程序的執(zhí)行;另一種是通過異常處理器,由處理器檢測異常事件并自動觸發(fā)中斷程序的執(zhí)行。

當(dāng)CPU進(jìn)入中斷程序時,它會先保存當(dāng)前現(xiàn)場的寄存器狀態(tài),并將中斷的處理程序指針指向中斷程序的入口地址。在中斷程序的執(zhí)行過程中,通常會完成一系列的操作,如訪問狀態(tài)寄存器、中斷觸發(fā)寄存器、中斷向量表等。而針對本文討論的問題,我們需要實現(xiàn)復(fù)位功能,即當(dāng)CPU進(jìn)入中斷程序后,不再返回到中斷前的狀態(tài),而是徹底地進(jìn)行復(fù)位操作。

實現(xiàn)復(fù)位功能需要我們進(jìn)行如下的步驟:

1. 設(shè)置復(fù)位向量

在ARM9中,復(fù)位向量被定義為地址為0x0000 0000的位置。在處理器執(zhí)行復(fù)位操作時,會跳轉(zhuǎn)至該地址,執(zhí)行復(fù)位向量指針?biāo)赶虻?a target="_blank">程序代碼。在安裝復(fù)位函數(shù)之前,需要先確保復(fù)位向量指針正確地指向我們的復(fù)位程序。

2. 編寫復(fù)位函數(shù)

復(fù)位函數(shù)是我們實現(xiàn)徹底復(fù)位操作的代碼。在該函數(shù)中,我們需要清除系統(tǒng)的所有狀態(tài)和寄存器信息,使其恢復(fù)至初始狀態(tài)。具體而言,我們需要執(zhí)行如下操作:

- 清除所有CPU寄存器
- 復(fù)位所有系統(tǒng)寄存器和狀態(tài)寄存器
- 清除所有外設(shè)寄存器
- 復(fù)位系統(tǒng)時鐘
- 清除所有中斷向量和中斷狀態(tài)寄存器

在完成上述所有操作后,我們需要修改復(fù)位向量指針,使其指向我們需要執(zhí)行的下一條指令地址。通常情況下,這個地址應(yīng)該是程序的入口地址,以啟動系統(tǒng)的正常工作狀態(tài)。

3. 在中斷程序中調(diào)用復(fù)位函數(shù)

在中斷處理程序中,我們需要手動調(diào)用復(fù)位函數(shù),并防止系統(tǒng)返回中斷前的狀態(tài)。具體而言,我們可以在復(fù)位函數(shù)中修改系統(tǒng)狀態(tài)寄存器,以防止中斷返回執(zhí)行。例如,對于ARM9,可以使用以下代碼:

```
void reset(void) __attribute__((naked));
void reset(void) {
__asm__("cpsid i"); // 禁止中斷
__asm__("ldr r0, =0x00000000"); // 設(shè)置復(fù)位向量指針
__asm__("ldr r1, [r0]"); // 讀取復(fù)位向量指針
__asm__("mov sp, r1"); // 更新棧指針
__asm__("ldr r0, =SystemInit"); // 加載復(fù)位函數(shù)
__asm__("bx r0"); // 跳轉(zhuǎn)至復(fù)位函數(shù)
}
```

在上述函數(shù)中,我們首先禁止了中斷服務(wù)。然后,我們設(shè)置了復(fù)位向量指針,并用該指針更新了棧指針。接著,我們加載復(fù)位函數(shù)并跳轉(zhuǎn)至其執(zhí)行。在函數(shù)執(zhí)行完畢后,我們可以根據(jù)需要選擇是否啟用中斷服務(wù)。

總之,實現(xiàn)ARM9中斷的徹底復(fù)位操作需要我們進(jìn)行復(fù)位向量的設(shè)置、編寫復(fù)位函數(shù),并在中斷程序中調(diào)用該函數(shù)并防止中斷返回執(zhí)行。這樣可以保證系統(tǒng)處于一個完全初始化和安全的狀態(tài),使其能夠愉快地進(jìn)行下一輪的工作!

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

    關(guān)注

    135

    文章

    9497

    瀏覽量

    388382
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5584

    瀏覽量

    128983
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7642

    瀏覽量

    144523
  • 系統(tǒng)時鐘
    +關(guān)注

    關(guān)注

    1

    文章

    31

    瀏覽量

    10083
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    芯源MCU中斷相關(guān)寄存器

    。 5.5.2 NVIC 中斷掛起和清除掛起 在中斷發(fā)生時,如果系統(tǒng)正在處理與之相同優(yōu)先級或更高優(yōu)先級的中斷,系統(tǒng)將不會立即處理此中斷,而是將
    發(fā)表于 11-27 07:23

    C語言在嵌入式開發(fā)的應(yīng)用

    穩(wěn)定性控制系統(tǒng)(VSC)等關(guān)鍵部件的開發(fā),C 語言都發(fā)揮著至關(guān)重要的作用。 以工業(yè)自動化生產(chǎn)線的運動控制系統(tǒng)為例,C 語言可以編寫高效可靠
    發(fā)表于 11-21 08:09

    資源狀態(tài)感知是如何實現(xiàn)對網(wǎng)絡(luò)鏈路狀態(tài)的實時感知的?

    LAN8720A)通過硬件中斷機(jī)制實時檢測鏈路物理狀態(tài): 鏈路通檢測:當(dāng)網(wǎng)線插拔或交換機(jī)端口狀態(tài)變化時,PHY 芯片的 INT 引腳觸發(fā)低電平
    的頭像 發(fā)表于 11-06 14:49 ?310次閱讀

    淺析riscv的plic與eclic

    1.PLIC中斷處理 在RISC V體系架構(gòu),對中斷有著一些定義,下面來分析一下這種定義的實現(xiàn)策略。 在riscv中一共定義了三種狀態(tài)
    發(fā)表于 10-31 07:23

    優(yōu)比施UPS電源:為關(guān)鍵設(shè)備構(gòu)筑電力“零中斷”防線

    1KVA-3KVA在線式UPS電源,以“在線雙轉(zhuǎn)換+超寬輸入+智能監(jiān)控”三大核心技術(shù),重新定義了中小機(jī)房的電力保護(hù)標(biāo)準(zhǔn)。零中斷的“電力心臟”:在線雙轉(zhuǎn)換技術(shù)傳統(tǒng)UP
    的頭像 發(fā)表于 09-18 08:35 ?323次閱讀
    優(yōu)比施UPS電源:為關(guān)鍵設(shè)備構(gòu)筑電力“零<b class='flag-5'>中斷</b>”防線

    STM32G474進(jìn)入Fault3中斷沒辦法設(shè)置成周期性觸發(fā)嗎?

    到最低也不行。想請教下,進(jìn)入Fault3中斷沒辦法設(shè)置成周期性觸發(fā)嗎?這種持續(xù)觸發(fā)中斷的方式使程序在中斷里出不來怎么辦呢?即使把Fault3中斷優(yōu)先級設(shè)置到最低15
    發(fā)表于 08-01 07:23

    第十章 W55MH32中斷應(yīng)用概覽

    本章講述了W55MH32中斷應(yīng)用,涵蓋異常類型、NVIC介紹、優(yōu)先級定義與分組,闡述中斷編程三要點(使能中斷、配置 NVIC、編寫服務(wù)函數(shù)),并強(qiáng)調(diào)優(yōu)先級分組設(shè)置注意事項。
    的頭像 發(fā)表于 05-22 17:07 ?1522次閱讀
    第十章 W55MH32<b class='flag-5'>中斷</b>應(yīng)用概覽

    STM32中斷如此簡單(可下載)

    下面我們先來了解一些基本概念:中斷中斷是什么?舉個例子來說,當(dāng)我們正在工作時,突然電話響了,這時你會把手里的工作先停下來,然后去接電話,當(dāng)接完電話后,電話里的人安排你馬上做一件事,這時你需要立刻去
    發(fā)表于 03-24 14:27 ?1次下載

    單片機(jī)中斷技術(shù)詳解

    在現(xiàn)代電子設(shè)備,單片機(jī)作為控制核心發(fā)揮著舉足輕重的作用。而在其高效運作的背后,中斷機(jī)制是推動單片機(jī)實現(xiàn)實時響應(yīng)與高效執(zhí)行的關(guān)鍵因素。本文將深入探討單片機(jī)
    的頭像 發(fā)表于 02-02 15:57 ?1412次閱讀

    串口中斷是內(nèi)部中斷還是外部中斷,串口中斷是怎么觸發(fā)的

    串口中斷通常被視為外部中斷。雖然串口控制器(如USART、UART等)可能集成在微控制器或處理器的內(nèi)部,但從中斷的角度來看,串口中斷是由處理器外部的通信事件觸發(fā)的。這些事件包括數(shù)據(jù)的接
    的頭像 發(fā)表于 01-29 15:03 ?2602次閱讀

    程序中斷的100種寫法

    在編程實現(xiàn)程序中斷的方式取決于所使用的編程語言、硬件平臺以及具體的應(yīng)用需求。雖然沒有100種獨立的中斷
    發(fā)表于 01-28 08:25

    STM32串口接受中斷使用C++STL的queue導(dǎo)致所有中斷失效

    ,F(xiàn)reeRTOS的heap設(shè)置為8k 有兩個中斷,1s觸發(fā)的定時器中斷和串口接收中斷 遇到問題 串口發(fā)送是沒有問題的,如果不是使用STL的queue,所有
    發(fā)表于 01-24 10:21

    EE-188:使用C語言在ADSP-219x DSP上實現(xiàn)中斷驅(qū)動系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《EE-188:使用C語言在ADSP-219x DSP上實現(xiàn)中斷驅(qū)動系統(tǒng).pdf》資料免費下載
    發(fā)表于 01-15 16:06 ?0次下載
    EE-188:使用<b class='flag-5'>C</b><b class='flag-5'>語言</b>在ADSP-219x DSP上<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>中斷</b>驅(qū)動系統(tǒng)

    讓ADS7864的BUSY腳接DSP的外部中斷INT0,DSP通過中斷來讀取采樣數(shù)據(jù),要不要先關(guān)INT0中斷呢?

    我讓ADS7864的BUSY腳接DSP的外部中斷INT0,DSP通過中斷來讀取采樣數(shù)據(jù)。請問在中斷服務(wù)程序,要不要先關(guān)INT0中斷呢?如
    發(fā)表于 01-13 06:11

    EE-192:使用C語言在Blackfin處理器上創(chuàng)建中斷驅(qū)動系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《EE-192:使用C語言在Blackfin處理器上創(chuàng)建中斷驅(qū)動系統(tǒng).pdf》資料免費下載
    發(fā)表于 01-03 15:03 ?0次下載
    EE-192:使用<b class='flag-5'>C</b><b class='flag-5'>語言</b>在Blackfin處理器上創(chuàng)建<b class='flag-5'>中斷</b>驅(qū)動系統(tǒng)