STM32是cortex-m3內(nèi)核芯片,擁有cortex-m3的特性,以下介紹了cortex-m3的特權(quán)級(jí)別。
1、先來(lái)說(shuō)一下操作模式:
cortex-m3有兩種操作模式:筆者覺(jué)得也可以稱為代碼執(zhí)行模式,線程模式(thread mode)和異常模式(handler mode),用于表示處理器在執(zhí)行什么代碼。
thread mode:執(zhí)行非異常代碼,也就是用戶代碼。
handler mode:執(zhí)行異常代碼,如中斷服務(wù)程序。
2、再來(lái)說(shuō)一下特權(quán)級(jí)別:
cortex-m3有兩種權(quán)利級(jí)別:特權(quán)級(jí)(Privilege)和用戶級(jí)(user)。這兩種模式主要用于阻止對(duì)硬件的異常訪問(wèn),比如存儲(chǔ)資源、關(guān)鍵寄存器等。
特權(quán)級(jí)別:能夠訪問(wèn)硬件所有存儲(chǔ)資源,能夠執(zhí)行所有指令。
用戶級(jí)別:禁止使用MSR和MRS訪問(wèn)特殊功能寄存器(APSR除外),不能使用CPS指令。對(duì)系統(tǒng)控制空間的訪問(wèn)有限制,即,不能訪問(wèn)system tick、NVIC、system control block(SCB)。
如何才能在這兩個(gè)級(jí)別切換呢?答案是修改寄存器CONTROL[0]。這個(gè)寄存器只能在特權(quán)級(jí)別下修改,用戶級(jí)別下是不能修改此寄存器的,要想從用戶級(jí)別轉(zhuǎn)到特權(quán)級(jí)別,只能進(jìn)入異常/中斷,然后在異常/中斷中修改寄存器,因?yàn)樵诋惓?中斷中總是特權(quán)級(jí)別。
在線程模式,可以是特權(quán)級(jí),也可以是用戶級(jí)。handler模式總是特權(quán)級(jí)的。在復(fù)位后,處理器處于線程模式+特權(quán)級(jí)。
3、介紹一下系統(tǒng)控制空間(SCS):
系統(tǒng)控制空間(system control space):在地址空間的位置,如下圖所示,地址區(qū)間0xE000E000-0xE000F000,這部分區(qū)域包含:System control block、system tick、Nested Vectored Interrupt Controller(NVIC)、PMU等。這些寄存器是處理器能夠工作的根本,必須有相應(yīng)權(quán)限才能修改,即,特權(quán)級(jí)才能修改。
System control block(SCB)包含了系統(tǒng)相關(guān)的寄存器,如下:
4、總結(jié):
特權(quán)級(jí)有特權(quán),權(quán)利大,能訪問(wèn)所有資源,用戶級(jí)權(quán)利小,不能所有資源。說(shuō)實(shí)話這權(quán)利級(jí)別一般不做修改,即,保持默認(rèn)的特權(quán)級(jí)別。因?yàn)閏ortex-M3內(nèi)核是個(gè)低端內(nèi)核,很大一部分應(yīng)用都是無(wú)操作系統(tǒng)的裸機(jī)執(zhí)行程序,在沒(méi)有特殊安全要求的前提下沒(méi)必要切來(lái)切去的,比較麻煩。
5、題外話:
我們?cè)谑褂肧TM32跑實(shí)時(shí)操作系統(tǒng)的時(shí)候經(jīng)常使用systick作為操作系統(tǒng)的心跳,很多人不知道這個(gè)systick和普通的定時(shí)器有什么區(qū)別,通過(guò)上面介紹這個(gè)systick相關(guān)寄存器位于系統(tǒng)控制空間(SCS),用戶級(jí)別不能訪問(wèn)systick寄存器,防止用戶級(jí)別代碼誤操作,篡改systick寄存器威脅系統(tǒng)安全。
-
寄存器
+關(guān)注
關(guān)注
31文章
5355瀏覽量
120531 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1373瀏覽量
40310 -
STM32
+關(guān)注
關(guān)注
2270文章
10904瀏覽量
356365 -
Cortex
+關(guān)注
關(guān)注
2文章
202瀏覽量
46514 -
Cortex-M3
+關(guān)注
關(guān)注
9文章
270瀏覽量
59500
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論