久久中文视频-久久中文网-久久中文亚洲国产-久久中文字幕久久久久-亚洲狠狠成人综合网-亚洲狠狠婷婷综合久久久久


曙海教育集團(tuán)論壇ARM專區(qū) → ARM異常處理


  共有5856人關(guān)注過本帖樹形打印

主題:ARM異常處理

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發(fā)短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
ARM異常處理  發(fā)帖心情 Post By:2010-11-18 12:12:26

如果您閱讀ARM手冊,您會發(fā)現(xiàn),在ARM中,經(jīng)常強(qiáng)調(diào)Exception(異常)這個概念,在ARM里,Interrupt(中斷)也是一種形式的異常。ARM的Exception同其所定義的5種異常模式是密切相關(guān)的,CPU在捕獲到任何一個Exception后,必定會進(jìn)入某個異常模式,異常類型及捕獲到該異常后CPU所進(jìn)入的異常模式之間的對應(yīng)關(guān)系是ARM所預(yù)先定義好的。 如果您對X86比較熟悉,您會發(fā)現(xiàn),不象X86,系統(tǒng)定義了不同的中斷,比如鍵盤中斷,鼠標(biāo)中斷等等,并且系統(tǒng)也定義了這些中斷所對應(yīng)的中斷向量。ARM沒有定義這些,ARM只會告訴你,有外部中斷產(chǎn)生,并切換到IRQ或FIQ模式,然后執(zhí)行IRQ或FIQ所對應(yīng)的中斷向量。至于到底是鍵盤中斷,還是鼠標(biāo)中斷,這得由操作系統(tǒng)提供的中斷函數(shù)自己去判斷,比如通過查詢中斷控制器的某個或某些寄存器。ARM這樣做的原因是:ARM只是一個CORE,它并不定義也不去假想其外部環(huán)境,這樣可以使得ARM CORE更加緊湊和簡潔,同時也給SOC設(shè)計(jì)者提供了更多的靈活性和發(fā)揮空間。您一定要相信,ARM被如此廣泛使用不是“蓋”的,從系統(tǒng)開發(fā)者角度看,ARM是一種最簡單、最靈活的CPU,它的優(yōu)雅和簡潔性就像C語言一樣。呵呵,C語言是我最喜歡的語言。 好了,“臭屁”了這么多,我們言歸正傳。對ARM異常處理的研究務(wù)必要弄清楚以下幾個方面: (1) 異常類型 (2) 異常類型及處理該異常時CPU的執(zhí)行模式 (3) 異常向量地址 (4) 異常處理過程 異常類型 ARM定義了如下類型的異常(江南七怪,這樣好記): (1) RESET異常:由于執(zhí)行RESET指令或外部RESET信號產(chǎn)生的異常 (2) SWI異常:執(zhí)行SWI指令產(chǎn)生的異常,通常用于提供系統(tǒng)調(diào)用接口 (3) IRQ異常:ARM的IRQ Signal被觸發(fā)所產(chǎn)生的異常 (4) FIQ異常:ARM的FIQ Signal被觸發(fā)所產(chǎn)生的異常 (5) Prefetch Abort異常:預(yù)取指令時產(chǎn)生的異常 (6) Data Abort異常:存取內(nèi)存數(shù)據(jù)時產(chǎn)生的異常 (7) Undefined instruction異常:執(zhí)行unknown指令時產(chǎn)生的異常 執(zhí)行模式 當(dāng)產(chǎn)生異常后,CPU會進(jìn)入相應(yīng)的異常模式并處理該異常: (1) RESET和SWI異常:CPU進(jìn)入Supervisor模式 (2) IRQ異常:CPU進(jìn)入IRQ模式 (3) FIQ異常:CPU進(jìn)入FIQ模式 (4) Prefetch Abort和Data Abort異常:CPU進(jìn)入Abort模式 (5) Undefined instruction異常:CPU進(jìn)入U(xiǎn)ndefined模式 向量地址 ARM的異常向量地址可以處于4G物理空間的低端(0x00000000起),也可以處于高端(0xffff0000起),具體是哪種情況,根據(jù)具體的CPU及其配置而定。下面是7種異常的向量地址(挎弧內(nèi)為高端情形): (1) RESET異常:0x00000000 (0xffff0000) (2) Undefined instruction異常: 0x00000004 (0xffff0004) (3) SWI異常:0x00000008 (0xffff0008) (4) Prefetch Abort異常: 0x0000000c (0xffff000c) (5) Data Abort異常: 0x00000010 (0xffff0010) (6) IRQ異常: 0x00000018 (0xffff0018) (7) FIQ異常: 0x0000001c (0xffff001c) 每個中斷向量為4字節(jié),一般的操作系統(tǒng)在該地址處放置一條跳轉(zhuǎn)指令“LDR PC,終端處理函數(shù)地址”。另外要注意的是,在IRQ異常和Data Abort異常之間空了4個字節(jié),這4個字節(jié)是保留的。 處理過程 處理過程包括兩個部分: (1) 進(jìn)入:這個過程由CPU負(fù)責(zé) (2) 退出:這個過程由OS負(fù)責(zé) 在捕獲到某個異常后,啟動“進(jìn)入”過程,該過程內(nèi)CPU執(zhí)行如下動作: (1) 將當(dāng)前PC的值(或PC + 4,或PC + 8)保存到R14的某個影子寄存器中。到底選擇哪個影子寄存器由該異常的執(zhí)行模式而定;另外R14影子寄存器的值同異常類型相關(guān)。比如Data Abort異常,對應(yīng)的影子寄存器就是Abort模式的影子寄存器R14_abt,R14_abt的值為異常產(chǎn)生時PC值 + 8。 (2) 將CPSR保存到CPSR的某個影子寄存器SPSR中,同樣,具體選擇哪個影子寄存器由該異常的執(zhí)行模式而定。 (3) 執(zhí)行對因的中斷向量 退出過程由操作系統(tǒng)自己負(fù)責(zé),只要確保退出后的PC和CPSR同進(jìn)入之前是一樣就可以了。有時候操作系統(tǒng)在處理某種特定情況的異常后會將退出后PC值變?yōu)檫M(jìn)入前PC值 + 4(即下一條指令地址),這僅僅是一個提醒,其目的是說明退出過程是完全由軟件自己決定的。

支持(0中立(0反對(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

ARM異常處理








簽名
主站蜘蛛池模板: 久久免费视频观看 | 亚洲国产激情一区二区三区 | 国产年成美女网站视频免费看 | 一级女毛片 | 私人玩物福利视频 | 毛片成人永久免费视频 | 你懂的国产精品 | 久久精品视频7 | 在线一区免费视频播放 | 男女乱淫免费视频 | 欧美叫床戏做爰无遮挡 | 成人毛片免费观看视频在线 | 在线视频一区二区三区三区不卡 | 男人和女人在床做黄的网站 | 亚洲综合视频 | 国产成人精品一区 | a国产成人免费视频 | 国产亚洲福利一区二区免费看 | 色偷偷亚洲女人天堂观看欧 | 欧美大片欧美毛片大片 | 全部孕妇毛片丰满孕妇孕交 | 国产欧美日本在线 | 99久久精品国产国产毛片 | 欧美成人免费高清二区三区 | 亚洲人成a在线网站 | 成人毛片免费观看视频大全 | 成人在免费观看视频国产 | 午夜一级影院 | 国产性做久久久久久 | 香港三级做爰大爽视频 | 九九夜色| 美国毛片毛片全部免费 | 成年女人看片免费视频频 | 久久亚洲国产的中文 | 黄色三级日韩 | 亚洲美女福利视频在线 | 欧美成人一区二区 | 日本久久久久久久久久 | 久久精品午夜 | 国产成人久久久精品毛片 | 高清大学生毛片一级 |