姓名:陳星月? ? ? ? ?學(xué)號:19029100022? ? ?學(xué)院:丁香2號書院
轉(zhuǎn)自:https://blog.csdn.net/csyifanZhang/article/details/104648813
【嵌牛導(dǎo)讀】本文將對嵌入式系統(tǒng)的ARM Cortex-M3進行介紹
【嵌牛鼻子】ARM Cortex-M3
【嵌牛提問】什么是ARM Cortex-M3涛酗?
【嵌牛正文】
4.操作模式和特權(quán)級別
Cortex-M3處理器支持兩種處理器的操作模式霞怀,還支持兩級特權(quán)操作啊楚。兩種操作模式分別為:處理者模式(handler mode)和線程模式(thread mode)提完。兩級特權(quán)操作分別為:特權(quán)級和用戶級(非特權(quán)級)
(1)特權(quán)訪問與用戶訪問(非特權(quán)訪問)
?特權(quán)執(zhí)行可以訪問所有資源过蹂。
?非特權(quán)執(zhí)行時對有些資源的訪問受到限制或不允許訪問咒吐。如部分指令的使用 (設(shè)置FAULTMASK和PRIMASK的CPS指令 )對系統(tǒng)控制空間(SCS)的大部分寄存器的訪問糊闽。
(2)線程模式和處理者模式
Cortex-M3處理器支持兩種工作模式:線程模式和處理者模式
① 線程模式–可特權(quán)可用戶
?在復(fù)位時處理器進入線程模式–準(zhǔn)確來說復(fù)位之后處理器特權(quán)及訪問
?異常返回時處理器進入線程模式
?特權(quán)和用戶(非特權(quán))代碼能夠在線程模式下運行
線程模式下用戶級訪問和特權(quán)級訪問的轉(zhuǎn)換
② 處理者模式-全特權(quán)訪問-異常讀物
?出現(xiàn)異常時處理器進入處理者模式
?在處理者模式中邢锯,所有代碼都是特權(quán)訪問的
③ Tips
(1)用戶可以方便地從特權(quán)級切換到用戶級怀浆,但一旦進入用戶級谊囚,就不能簡單地試圖改寫控制寄存器就回到特權(quán)級,必須先申訴:執(zhí)行一條系統(tǒng)調(diào)用指令SVC执赡。
(2)通過引入特權(quán)級和用戶級镰踏,就能夠在硬件水平上限制某些不受信任的或者還沒調(diào)試好的程序,不讓他們隨意配置涉及要害的寄存器沙合,因而系統(tǒng)的可靠性得到了提高奠伪。
(3)主堆棧和進程堆棧
?Cortex-M3內(nèi)核有兩個堆棧指針:MSP(SP_main)和PSP(SP_process)
?堆棧指針R13是分組寄存器,在SP_main和SP_process之間切換。在任何時候绊率,進程堆棧和主堆棧中只有一個是可見的谨敛。
?MSP:由操作系統(tǒng)內(nèi)核,異常服務(wù)例程以及應(yīng)用程序代碼訪問-處理者模式只能使用MSP滤否,因為他永遠是特權(quán)級的脸狸。
?PSP:用于不處于異常服務(wù)例程中的常規(guī)的應(yīng)用程序代碼。
控制寄存器用于定義特權(quán)級別藐俺,還用于選擇當(dāng)前使用哪個堆棧指針炊甲。
5.存儲器映射
總體來說,Cortex-M3支持4GB存儲空間欲芹。
內(nèi)存中有兩種格式存儲字數(shù)據(jù)卿啡,稱之為大端格式和小端格式。
?大端格式:字數(shù)據(jù)的高字節(jié)存儲在低地址中菱父,而字數(shù)據(jù)的低字節(jié)則存放在高地址中颈娜。
?小端格式:與大端存儲格式相反,低地址中存放的是字數(shù)據(jù)的低字節(jié)浙宜,高地址存儲存放的是字數(shù)據(jù)的高字節(jié)官辽。
Cortex-M3處理器支持的數(shù)據(jù)類型有32位字、16位半字和8位字節(jié)梆奈。Cortex-M3處理器支持非對齊的傳送野崇,數(shù)據(jù)存儲器的訪問無須對齊。
6.流水線
Cortex-M3處理器使用一個帶分支預(yù)測的3級流水線亩钟,分別是取指乓梨、解碼和執(zhí)行。因為帶分支預(yù)測清酥,跳轉(zhuǎn)指令在譯碼時就被識別扶镀,取指時流水線自動加載跳轉(zhuǎn)后地址的指令。
(1)分支預(yù)測功能
到BNE的時候焰轻,由于BNE是跳轉(zhuǎn)指令臭觉,是否跳轉(zhuǎn)取決于前面CMP指令的結(jié)果,由于CMP指令已經(jīng)譯碼了辱志,因此就可以預(yù)測到底是跳轉(zhuǎn)還是順序執(zhí)行蝠筑,如果跳轉(zhuǎn)那么下一個指令直接就取跳轉(zhuǎn)之后位置的指令,這叫作分支預(yù)測揩懒。
7.異常和中斷
異常:指在正常的程序執(zhí)行流程中發(fā)生暫時的停止并轉(zhuǎn)向相應(yīng)的處理什乙。既包括系統(tǒng)異常,也包括一些程序中斷已球。
?中斷:是對Cortex-M3核來說是來自內(nèi)核的外面臣镣,來自各種片上外設(shè)或外擴的外設(shè)辅愿。
?系統(tǒng)異常:是因為內(nèi)核的活動產(chǎn)生的,即在執(zhí)行指令或訪問存儲器時產(chǎn)生忆某。
?在處理異常前点待,當(dāng)前處理器的狀態(tài)必須保留,這樣當(dāng)異常處理完成后弃舒,當(dāng)前程序繼續(xù)執(zhí)行癞埠。
?處理器允許多個異常同時發(fā)生,他們將會按固定的優(yōu)先級進行處理棒坏。
異常類型表:15個系統(tǒng)異常燕差,240個中斷源
(1)異常優(yōu)先級
數(shù)值越小說明優(yōu)先級越高遭笋,復(fù)位的優(yōu)先級最高坝冕,高優(yōu)先級的可以搶占低優(yōu)先級的資源。
(2)Cortex-M3 異常有哪些特點瓦呼?
?自動的狀態(tài)保存和恢復(fù)喂窟。處理器在進入異常之前將狀態(tài)寄存器和部分寄存器自動壓棧,退出后自動出棧央串,不需要多余的指令磨澡。
?自動讀取代碼存儲器或SRAM中包含地址的向量表入口。該操作與狀態(tài)保存同時執(zhí)行质和。
?中斷優(yōu)先級可動態(tài)重新設(shè)置稳摄。
?中斷數(shù)目可配置為1~240。
8.存儲器保護單元(MPU)
?Cortex-M3有一個可選的存儲器保護單元饲宿。配上它之后厦酬,就可以對特權(quán)級訪問和用戶級訪問分別施加不同的訪問限制。
?當(dāng)檢測到犯規(guī)時瘫想,MPU會產(chǎn)生一個實現(xiàn)(fault)異常仗阅,可以由(fault)異常的服務(wù)例程來分析該錯誤。
?最常見的就是由操作系統(tǒng)使用MPU国夜,以使特權(quán)級代碼的數(shù)據(jù)减噪,包括操作系統(tǒng)本身的數(shù)據(jù)不被其他用戶程序破壞。