日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

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

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

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

在中斷處理程序中,我們需要手動(dòng)調(diào)用復(fù)位函數(shù),并防止系統(tǒng)返回中斷前的狀態(tài)。具體而言,我們可以在復(fù)位函數(shù)中修改系統(tǒng)狀態(tài)寄存器,以防止中斷返回執(zhí)行。例如,對(duì)于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ù)。然后,我們?cè)O(shè)置了復(fù)位向量指針,并用該指針更新了棧指針。接著,我們加載復(fù)位函數(shù)并跳轉(zhuǎn)至其執(zhí)行。在函數(shù)執(zhí)行完畢后,我們可以根據(jù)需要選擇是否啟用中斷服務(wù)。

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    135

    文章

    9589

    瀏覽量

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

    關(guān)注

    31

    文章

    5620

    瀏覽量

    130451
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7646

    瀏覽量

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

    關(guān)注

    1

    文章

    32

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    MIMXRT1170中斷問(wèn)題,如何將gpio8_29定義為外部中斷?

    我想請(qǐng)教一些關(guān)于GPIO外設(shè)中斷方面的問(wèn)題。在MIMXRT1170_igpioinput_interrupt示例,GPlO13_io0引l腳被定義為輸入并啟用了上升沿中斷。我想要
    發(fā)表于 04-28 06:09

    RK806中斷處理流程深度解析:從架構(gòu)到調(diào)試實(shí)戰(zhàn)

    RK806 作為瑞芯微主流 PMIC(電源管理芯片),其中斷機(jī)制是實(shí)現(xiàn)“電源鍵響應(yīng)、電壓異常保護(hù)、休眠喚醒、 watchdog 超時(shí)處理” 等核心功能的基礎(chǔ)。Linux 驅(qū)動(dòng)基于regmap_irq框架設(shè)計(jì),屏蔽了底層寄存器操作
    的頭像 發(fā)表于 02-05 13:46 ?2532次閱讀
    RK806<b class='flag-5'>中斷</b>處理流程深度解析:從架構(gòu)到調(diào)試實(shí)戰(zhàn)

    CW32F030中斷解析

    中斷 1 概述 ARM? Cortex?-M0+ 內(nèi)核的嵌套向量中斷控制器 (NVIC),用于管理中斷和異常。NVIC 和處理器內(nèi)核緊密相連,可 以
    發(fā)表于 01-12 08:41

    如何用好 C 語(yǔ)言函數(shù)的返回值?

    ” 當(dāng)然,C語(yǔ)言程序員還有一種“行業(yè)潛規(guī)則”。如果定義的函數(shù)是個(gè)布爾函數(shù),也即返回值顯式的使用類(lèi)似于 bool 關(guān)鍵字定義,或者函數(shù)名類(lèi)似于 is_true(),那么顯然此時(shí)應(yīng)該遵
    發(fā)表于 12-25 07:17

    RISC-V怎么實(shí)現(xiàn)核間中斷?核心本地中斷控制器(CLINT)深度解析

    全稱(chēng)為Core Local Interruptor(核心本地中斷控制器),是 RISC-V 特權(quán)架構(gòu)規(guī)范(Privileged Architecture Specification)明確定義的內(nèi)建
    的頭像 發(fā)表于 12-13 14:06 ?2686次閱讀
    RISC-V怎么<b class='flag-5'>實(shí)現(xiàn)</b>核間<b class='flag-5'>中斷</b>?核心本地<b class='flag-5'>中斷</b>控制器(CLINT)深度解析

    機(jī)房不間斷電源:構(gòu)建數(shù)據(jù)心臟的“零中斷”生命線(xiàn)

    在數(shù)字時(shí)代的脈搏,數(shù)據(jù)中心機(jī)房承載著企業(yè)乃至社會(huì)的核心記憶與運(yùn)算能力。從金融交易數(shù)據(jù)到醫(yī)療健康記錄,從云計(jì)算服務(wù)到人工智能訓(xùn)練,每一秒的中斷都可能意味著數(shù)以百萬(wàn)計(jì)的經(jīng)濟(jì)損失與不可逆的信譽(yù)損傷。在這
    的頭像 發(fā)表于 12-04 09:14 ?463次閱讀
    機(jī)房不間斷電源:構(gòu)建數(shù)據(jù)心臟的“零<b class='flag-5'>中斷</b>”生命線(xiàn)

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

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

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

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

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

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

    淺析riscv的plic與eclic

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

    關(guān)于蜂鳥(niǎo)E203內(nèi)核中斷硬件實(shí)現(xiàn)中斷嵌套的設(shè)計(jì)

    開(kāi)發(fā)板:MCU200T 中斷機(jī)制即處理器核在執(zhí)行程序指令流的過(guò)程突然被別的請(qǐng)求打斷中止執(zhí)行當(dāng)前程序,轉(zhuǎn)而處理別的事情,處理完重新回到之前程序終端的位置繼續(xù)執(zhí)行。處理器收到中斷請(qǐng)求,
    發(fā)表于 10-23 07:07

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

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

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

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

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

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

    求助,關(guān)于CM0.c的USBFS和中斷問(wèn)題求解

    我目前正在從事一個(gè)涉及 CM0 核心的項(xiàng)目,并且遇到了一些與 USBFS 和中斷處理相關(guān)的問(wèn)題。 具體來(lái)說(shuō),我面臨兩個(gè)關(guān)鍵問(wèn)題: USBFS 未在 CM0.c 運(yùn)行: 盡管遵循標(biāo)準(zhǔn)設(shè)置程序
    發(fā)表于 05-16 06:44
    虎林市| 扶沟县| 乌恰县| 绍兴市| 临海市| 正定县| 礼泉县| 集安市| 察哈| 汤原县| 营口市| 磐安县| 清水河县| 陕西省| 博乐市| 东安县| 垦利县| 太仓市| 宜昌市| 涡阳县| 厦门市| 曲靖市| 三穗县| 揭西县| 芦溪县| 庆元县| 独山县| 建昌县| 曲靖市| 邵武市| 正阳县| 江油市| 东方市| 许昌县| 平果县| 马关县| 横山县| 通州区| 淳化县| 都兰县| 青州市|