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

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

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

基于ARM Cortex-M MCU中的MPU所提供的一些特性

strongerHuang ? 來源:麥克泰技術(shù) ? 作者:麥克泰技術(shù) ? 2021-07-19 09:47 ? 次閱讀

內(nèi)存保護(hù)單元(MPU)是一種硬件機(jī)制,通過只允許代碼訪問需要的內(nèi)存和外設(shè)來提高嵌入式設(shè)備的安全性。應(yīng)用程序可以組織為進(jìn)程(process),每個(gè)進(jìn)程訪問自己的內(nèi)存和外設(shè)。MPU不僅阻止應(yīng)用程序代碼訪問其指定區(qū)域以外的內(nèi)存或外設(shè),而且還可以用于檢測堆棧溢出。

我們基于ARM Cortex-M MCU中的MPU,討論一下MPU所提供的一些特性。

MPU是什么?

內(nèi)存保護(hù)單元(MPU)是一種硬件機(jī)制,只允許需要訪問某些資源的代碼訪問相應(yīng)的內(nèi)存和外設(shè)。MPU常用于安全關(guān)鍵應(yīng)用,如醫(yī)療設(shè)備、航空電子設(shè)備、工業(yè)控制、核電站等,提高嵌入式應(yīng)用的穩(wěn)定性和安全性。

IoT應(yīng)用中,也可以通過MPU限制對內(nèi)存和外設(shè)的訪問,提高產(chǎn)品的安全性。例如,可以通過MPU機(jī)制隱藏加密密鑰以拒絕攻擊者訪問;使用MPU隔離Flash控制器也可以防止攻擊者更改應(yīng)用程序,只允許受信任的代碼執(zhí)行代碼更新。

通過MPU將RTOS任務(wù)劃分為進(jìn)程,如圖1所示。每個(gè)進(jìn)程可以包含任意數(shù)量的任務(wù)。進(jìn)程內(nèi)的任務(wù)可以訪問分配給該進(jìn)程的內(nèi)存和外設(shè)。增加MPU時(shí),從任務(wù)的角度幾乎不用更改,除非任務(wù)之間存在交互。

進(jìn)程間可以通過共享內(nèi)存進(jìn)行通信,兩個(gè)進(jìn)程的MPU配置表中將出現(xiàn)相同的區(qū)域。

應(yīng)用中也可以包含具有完全權(quán)限的系統(tǒng)級任務(wù)和ISR,允許它們訪問所有內(nèi)存、外設(shè)或CPU

當(dāng)違規(guī)發(fā)生時(shí),系統(tǒng)的行為取決于應(yīng)用程序,是哪個(gè)任務(wù)違規(guī)。例如,如果違規(guī)是由圖形用戶界面(GUI)造成的,可以終止并重新啟動(dòng)GUI,并且不會影響系統(tǒng)的其它部分。但是,如果違規(guī)任務(wù)控制一個(gè)制動(dòng)器,則異常處理程序可能需要在重啟任務(wù)之前立即停止制動(dòng)器。

理想情況下,在產(chǎn)品開發(fā)過程中會捕獲并糾正訪問違規(guī),否則,系統(tǒng)設(shè)計(jì)人員將需要評估所有可能的結(jié)果,并決定發(fā)生這種情況時(shí)該做什么。

使用MPU檢測堆棧溢出

在基于RTOS的應(yīng)用中,每個(gè)任務(wù)都需要單獨(dú)的堆??臻g。堆棧溢出可能是基于RTOS的系統(tǒng)開發(fā)人員所面臨的最常見的問題之一。如果沒有硬件幫助,堆棧溢出檢測可以由軟件實(shí)現(xiàn),但軟件方式不能及時(shí)捕獲溢出,可能導(dǎo)致產(chǎn)品不穩(wěn)定。MPU可以幫助防止堆棧溢出。

MPU域可用于堆棧溢出檢測,使用一個(gè)小的域(RedZone)來覆蓋每個(gè)任務(wù)堆棧的底部。配置MPU屬性,如果有任何代碼嘗試寫入該區(qū)域,將觸發(fā)MPU異常。域的大小決定了該方法在捕獲堆棧溢出方面的效率。

區(qū)域越大,堆棧溢出捕獲的可能性就越大,同時(shí)堆??捎玫?a href="http://ttokpm.com/tags/ram/" target="_blank">RAM就越少。換言之,RedZone域被認(rèn)為是不可用的內(nèi)存,它被用來檢測非法寫入。開始時(shí)可以將RedZone大小設(shè)置為32個(gè)字節(jié),如果任務(wù)堆棧為512個(gè)字節(jié),那么32個(gè)字節(jié)約占用6%,剩余480個(gè)字節(jié)的可用堆棧空間。

另一種檢測方法是將整個(gè)任務(wù)堆棧封裝為一個(gè)MPU區(qū)域,允許讀寫操作。該方法有兩個(gè)問題:首先,在Cortex-M(ARMv7M架構(gòu))上,堆棧的大小需為2的冪,并且必須在冪邊界(即32、64、128、256、512等)上對齊。

如果嵌入式應(yīng)用有足夠的RAM,那么這不是問題;然而,在資源受限的應(yīng)用 (如Cortex-M MCU)中,在減少浪費(fèi)的同時(shí)設(shè)置合適的堆棧內(nèi)存會很復(fù)雜。其次,該方法不允許寫同一進(jìn)程中的其它任務(wù)堆棧,不允許進(jìn)程中的任務(wù)通過堆棧傳遞信息。

進(jìn)程表

進(jìn)程表中的條目數(shù)量取決于MPU。Cortex-M架構(gòu)MCU可以有8個(gè)或16個(gè)MPU區(qū)域。由于可用的區(qū)域數(shù)量有限,通常更多設(shè)置區(qū)域保護(hù)RAM中的數(shù)據(jù)訪問。但是,如果應(yīng)用程序沒有用完所有區(qū)域,也可以通過區(qū)域限制對代碼的訪問來提高安全性。

1、一個(gè)MPU域提供對代碼空間的讀取和執(zhí)行訪問。因?yàn)槌A客ǔ4鎯υ贔lash中(ASCII字符串、查找表、常量等),所以讀訪問是必須的。

2、一個(gè)區(qū)域用于提供進(jìn)程相關(guān)的外設(shè)訪問,例如,以太網(wǎng)控制器、USB控制器等。MPU區(qū)域設(shè)置為讀寫訪問,但不允許執(zhí)行代碼。如果進(jìn)程不需要訪問外設(shè),則不需要此MPU區(qū)域。

3、一個(gè)MPU區(qū)域封裝進(jìn)程全局變量以及堆(heap)空間。MPU區(qū)域?qū)⒃O(shè)置為讀寫權(quán)限,但同樣不允許執(zhí)行代碼。

4、一個(gè)MPU區(qū)域用于檢測堆棧溢出。此方法假設(shè)進(jìn)程中的任務(wù)不會通過其堆棧共享數(shù)據(jù)。同樣,在此區(qū)域中不允許執(zhí)行代碼。RTOS負(fù)責(zé)選擇運(yùn)行哪個(gè)任務(wù),相應(yīng)任務(wù)的堆棧將被封裝在MPU區(qū)域中。

5、該區(qū)域顯示了由于MPU區(qū)域大小和對齊限制而可能導(dǎo)致的RAM浪費(fèi)。資源受限的嵌入式應(yīng)用中應(yīng)嘗試盡量減少浪費(fèi)。

6、此MPU區(qū)域用于建立多個(gè)進(jìn)程共享的RAM。如果進(jìn)程不需要共享數(shù)據(jù),則不需要此MPU區(qū)域。

進(jìn)程表由“N”個(gè)條目組成,每個(gè)條目包含兩個(gè)字段:區(qū)域的基地址和指定區(qū)域?qū)傩裕▍^(qū)域大小,允許讀、寫或執(zhí)行等)。

進(jìn)程表在創(chuàng)建任務(wù)時(shí)被分配給任務(wù)。RTOS只是在任務(wù)的控制塊(TCB)中保留一個(gè)指向進(jìn)程表的指針。RTOS在上下文切換時(shí)增加更新MPU進(jìn)程表的代碼,如圖4所示。在切換任務(wù)時(shí)不需要保存MPU配置。

Cortex-M 特權(quán)等級

上電后,Cortex-M運(yùn)行在特權(quán)模式,可以訪問CPU的所有資源,訪問任何內(nèi)存或I/O地址,啟用/禁用中斷,設(shè)置嵌套向量中斷控制器(NVIC),配置FPU和MPU等。

為了保證系統(tǒng)的安全,特權(quán)模式代碼保留給經(jīng)過完全測試并受信任的代碼。由于大多數(shù)RTOS都經(jīng)過了完整的測試,通常被認(rèn)為是值得信任的,而應(yīng)用代碼是不可信的。也有例外,例如,只要ISR保持盡可能短而不被濫用,ISR通常被認(rèn)為是受信任的,因此也以特權(quán)模式運(yùn)行。這是大多數(shù)RTOS供應(yīng)商的建議。

應(yīng)用代碼在非特權(quán)模式下運(yùn)行,從而限制了代碼可以做的事情。具體來說,非特權(quán)模式可以防止代碼關(guān)中斷、更改嵌套向量中斷控制器(NVIC)的設(shè)置、將運(yùn)行模式更改為特權(quán)等級、修改MPU設(shè)置等。這是一個(gè)理想的特性,因?yàn)槲覀儾幌M皇苄湃蔚拇a賦予自己特權(quán),從而更改系統(tǒng)設(shè)計(jì)者提供的保護(hù)。

由于CPU總是以特權(quán)模式開始運(yùn)行,任務(wù)需要從創(chuàng)建時(shí)就以非特權(quán)模式運(yùn)行,或者在啟動(dòng)后通過API調(diào)用,切換到非特權(quán)模式。一旦進(jìn)入非特權(quán)模式,CPU只有在中斷或異常服務(wù)中才能切換回特權(quán)模式。

在用戶模式訪問RTOS服務(wù)

由于非特權(quán)代碼不能禁用中斷,因此應(yīng)用代碼被迫使用RTOS服務(wù)來訪問共享資源。由于RTOS服務(wù)在特權(quán)模式下運(yùn)行,因此非特權(quán)任務(wù)必須通過Cortex-M提供的SVC機(jī)制切換回特權(quán)模式。SVC的行為類似中斷,但由CPU指令觸發(fā)。

在Cortex-M上,SVC指令使用一個(gè)8位參數(shù)來指定256個(gè)可能的RTOS服務(wù)。設(shè)計(jì)者決定非特權(quán)代碼可以使用的RTOS服務(wù)。例如,你可能不希望允許非特權(quán)任務(wù)終止其它任務(wù)(或其本身)。此外,這些服務(wù)都不允許禁用中斷,因?yàn)檫@將破壞在非特權(quán)模式下運(yùn)行代碼的目的。一旦調(diào)用,SVC指令跳轉(zhuǎn)到SVC異常處理程序。

在Cortex-M3上,SVC處理程序?qū)⒃黾蛹s1k字節(jié)的代碼,需要執(zhí)行75~125條CPU指令。因此,相同RTOS服務(wù),在非特權(quán)代碼中調(diào)用比特權(quán)模式調(diào)用需要更多的處理時(shí)間。

在非特權(quán)模式下運(yùn)行代碼還可以防止用戶代碼禁用中斷,從而減少了鎖定系統(tǒng)的機(jī)會。當(dāng)然,如果用戶代碼進(jìn)入無限循環(huán),特別是在高優(yōu)先級任務(wù)或ISR中時(shí),鎖定仍然可能發(fā)生。在這種情況下,通過使用看門狗可以恢復(fù)。

進(jìn)程間通信

1、互斥量用于確保兩個(gè)進(jìn)程不同時(shí)訪問相同的數(shù)據(jù)。注意,互斥量駐留在RTOS內(nèi)存空間中,通過RTOS API,所有進(jìn)程可以訪問該互斥量。

2、需要訪問受保護(hù)資源的任務(wù)必須首先獲取互斥量。當(dāng)任務(wù)完成共享資源訪問后,互斥量將被釋放。沙漏表示可選超時(shí),當(dāng)任務(wù)不希望永久等待所有者釋放互斥量時(shí),可以使用超時(shí)機(jī)制。

3、信號量也可以用來指示數(shù)據(jù)可用。

4、進(jìn)程中的任務(wù)將數(shù)據(jù)存儲到共享內(nèi)存中,然后發(fā)出信號。

5、進(jìn)程B中的任務(wù)等待進(jìn)程A的信號。沙漏表示一個(gè)可選的超時(shí),以避免永遠(yuǎn)等待信號。如果該信號未在規(guī)定的時(shí)間內(nèi)發(fā)生,則RTOS將恢復(fù)該任務(wù)。在這種情況下,任務(wù)知道共享區(qū)域中沒有存入任何東西。

6、如果沒有發(fā)生超時(shí),進(jìn)程B確認(rèn)數(shù)據(jù)處理完成。

7、進(jìn)程A發(fā)信號量后,等待具有可選超時(shí)的確認(rèn)。

8、通信也可以使用RTOS的消息隊(duì)列機(jī)制。此時(shí),從共享RAM區(qū)域動(dòng)態(tài)分配緩沖區(qū),進(jìn)程A中的發(fā)送任務(wù)填充緩沖區(qū),并將指針發(fā)送給進(jìn)程B中的任務(wù)。

9、與信號量情況類似,等待進(jìn)程B中的任務(wù)確認(rèn),并指定一個(gè)可選的超時(shí)。

內(nèi)存和I/O訪問錯(cuò)誤處理

進(jìn)程間可以通過共享內(nèi)存進(jìn)行通信,兩個(gè)進(jìn)程的MPU配置表中將出現(xiàn)相同的區(qū)域。

應(yīng)用中也可以包含具有完全權(quán)限的系統(tǒng)級任務(wù)和ISR,允許它們訪問所有內(nèi)存、外設(shè)或CPU。

當(dāng)違規(guī)發(fā)生時(shí),系統(tǒng)的行為取決于應(yīng)用程序,是哪個(gè)任務(wù)違規(guī)。例如,如果違規(guī)是由圖形用戶界面(GUI)造成的,可以終止并重新啟動(dòng)GUI,并且不會影響系統(tǒng)的其它部分。

但是,如果違規(guī)任務(wù)控制一個(gè)制動(dòng)器,則異常處理程序可能需要在重啟任務(wù)之前立即停止制動(dòng)器。理想情況下,在產(chǎn)品開發(fā)過程中會捕獲并糾正訪問違規(guī),否則,系統(tǒng)設(shè)計(jì)人員將需要評估所有可能的結(jié)果,并決定發(fā)生這種情況時(shí)該做什么。

MPU的工作是確保進(jìn)程中的任務(wù)只能訪問分配給它的內(nèi)存和外設(shè)。但是,如果任務(wù)試圖訪問允許區(qū)域以外的數(shù)據(jù)呢?MPU會觸發(fā)一個(gè)稱為內(nèi)存管理(MemManage)故障的CPU異常。

當(dāng)故障發(fā)生時(shí),系統(tǒng)行為取決于應(yīng)用程序,但如何處理故障可能是很難確定的事情。首先,這些類型的故障應(yīng)該在開發(fā)過程中被檢測和糾正。然而,使用MPU的原因之一是為了防止發(fā)生的無效內(nèi)存或外設(shè)訪問,要么是因?yàn)橄到y(tǒng)驗(yàn)證期間未捕獲某些偶發(fā)情況,或者是未經(jīng)授權(quán)的訪問。

MemManage故障通常由RTOS處理。理想情況下,嵌入式系統(tǒng)有一些機(jī)制可以記錄和報(bào)告故障,以便在產(chǎn)品的下一個(gè)版本中修正。文件系統(tǒng)是記錄這些故障的好地方,當(dāng)然,還取決于故障處理程序。

發(fā)生故障時(shí),故障處理程序可以執(zhí)行以下操作序列(偽代碼):

void OS_MPU_FaultHandler (void){// Terminate the offending task/process (1)// Release resources owned by the task/process (2)// Run a user provided ‘callback’ (based on the offending task) (3)// If we have a file system: (4)// Store information about the cause// Do we restart the task/process? (5)// Yes, Restart the task/process// Alert a user (6)// No, Reset the system (7)}

(1)當(dāng)故障發(fā)生時(shí),設(shè)計(jì)者需要確定如何操作。至少必須終止違規(guī)的任務(wù),但我們是否還需要終止此進(jìn)程中的其他任務(wù)?沒有一個(gè)確定的答案,事實(shí)上,這可能取決于是哪個(gè)任務(wù)造成了故障。因此,MPU故障處理程序應(yīng)根據(jù)觸發(fā)它的任務(wù)或進(jìn)程執(zhí)行不同的操作。

(2)被終止的違規(guī)任務(wù)(或進(jìn)程)可能擁有內(nèi)核對象、緩沖區(qū)、I/O等資源。這些資源需要被釋放,以避免影響其他任務(wù)/進(jìn)程。

(3)導(dǎo)致故障的任務(wù)可能會控制制動(dòng)器或其他類型的輸出,需將任務(wù)置于安全狀態(tài),以避免對人員或資產(chǎn)造成傷害。嵌入式系統(tǒng)設(shè)計(jì)者應(yīng)提供用戶定義的回調(diào)函數(shù),以處理系統(tǒng)特定的操作。

在任務(wù)創(chuàng)建過程中,將回調(diào)函數(shù)存儲在任務(wù)的控制塊(TCB)中。為提高系統(tǒng)安全性,只能在系統(tǒng)啟動(dòng)時(shí)創(chuàng)建任務(wù),此時(shí)CPU處于特權(quán)模式;運(yùn)行時(shí)只能在故障時(shí)刪除任務(wù)。由于TCB位于RTOS空間中,因此無法從用戶代碼訪問回調(diào)函數(shù),從而防止?jié)撛诘牟话踩筒豢煽康拇a無意中或惡意地調(diào)用回調(diào)函數(shù)。

(4)如果嵌入式系統(tǒng)具有數(shù)據(jù)存儲功能,則可以記錄故障相關(guān)的信息,如違規(guī)任務(wù)的性質(zhì)、CPU寄存器的值、所采取的操作等。

(5)根據(jù)導(dǎo)致故障的任務(wù),可以重新啟動(dòng),使系統(tǒng)可以錯(cuò)誤中恢復(fù)。

(6)如果系統(tǒng)能夠恢復(fù),并且如果系統(tǒng)包含顯示,則警告提示非常有用。此外,如果系統(tǒng)具有網(wǎng)絡(luò)連接,則通知服務(wù)部門和開發(fā)團(tuán)隊(duì)可以在將來的版本中避免此問題。

(7)如果系統(tǒng)無法恢復(fù),除了重置系統(tǒng)之外,可能沒有其他選擇。

可以更改MPU進(jìn)程表,使其包含每個(gè)任務(wù)的回調(diào)函數(shù),以便檢測到故障時(shí)從RTOS上下文切換代碼調(diào)用。

如果所有的任務(wù)都需要對故障執(zhí)行相同的操作,那么可以不使用此功能,或者讓所有MPU進(jìn)程表都指向相同的回調(diào)函數(shù)。后一種選擇更最靈活,因?yàn)樗鼮槲磥淼陌姹咎峁┝烁蟮撵`活性。但你可能需要咨詢RTOS供應(yīng)商,以確定此功能是否可用。

使用建議

以非特權(quán)模式運(yùn)行用戶代碼

使用MPU時(shí),以特權(quán)模式運(yùn)行應(yīng)用代碼。這意味著應(yīng)用程序代碼將能夠更改MPU設(shè)置,并破壞使用MPU的目的。以特權(quán)模式運(yùn)行應(yīng)用可能更容易地遷移應(yīng)用代碼。在某些時(shí)候,大多數(shù)應(yīng)用程序代碼將需要在非特權(quán)模式下運(yùn)行,用戶需要添加SVC處理程序。

ISR具有完全訪問權(quán)限

當(dāng)識別到中斷并且啟動(dòng)ISR時(shí),處理器將切換到特權(quán)模式。由于MPU控制寄存器的PRIVDEFENA為1,因此ISR可以訪問所有I/O內(nèi)存。

此外,ISR應(yīng)該盡可能短,并簡單地發(fā)信號給任務(wù),由任務(wù)執(zhí)行中斷設(shè)備所需的大部分工作。當(dāng)然,這假設(shè)ISR是內(nèi)核感知的ISR,并且該中斷設(shè)備有相當(dāng)多的工作處理。例如,不應(yīng)在ISR中上處理以太網(wǎng)數(shù)據(jù)包。然而,閃爍LED或更新脈沖寬度調(diào)制(PWM)計(jì)時(shí)器的占空比可以直接在ISR中完成。

防止在RAM中執(zhí)行代碼

大多數(shù)MPU可以防止從RAM執(zhí)行代碼,從而限制代碼注入攻擊。防止外設(shè)執(zhí)行代碼可能看起來很奇怪,但可以防止想方設(shè)法進(jìn)入系統(tǒng)的黑客

限制進(jìn)程對外設(shè)的訪問

應(yīng)該留出一個(gè)或多個(gè)MPU區(qū)域,以限制進(jìn)程只能訪問自己的外設(shè)。換言之,如果一個(gè)進(jìn)程管理USB端口,那么它應(yīng)該只能訪問USB外設(shè)或與USB控制器的需求相關(guān)的外設(shè),例如DMA。

可用的RTOS API

設(shè)計(jì)者必須確定應(yīng)用代碼可使用哪些RTOS API。例如,是否禁止應(yīng)用代碼在系統(tǒng)初始化后創(chuàng)建和刪除任務(wù)或RTOS對象?換言之,RTOS對象是否只能系統(tǒng)啟動(dòng)時(shí)創(chuàng)建,而非運(yùn)行時(shí)創(chuàng)建?

如果是,SVC處理程序查找表應(yīng)只包含向應(yīng)用公開的API。即使ISR在特權(quán)模式下運(yùn)行,可以訪問所有的RTOS API,一個(gè)好的RTOS也會阻止從ISR中創(chuàng)建和刪除RTOS對象。

在RTOS空間中分配RTOS對象

任務(wù)堆棧位于進(jìn)程空間內(nèi),但是,RTOS對象(信號量、隊(duì)列、任務(wù)控制塊等)應(yīng)在內(nèi)核空間中分配,并通過引用進(jìn)行訪問。不應(yīng)在進(jìn)程空間中分配RTOS對象,因?yàn)檫@意味著應(yīng)用代碼可以不調(diào)用RTOS API,即可有意或意外地修改內(nèi)核對象。

保護(hù)對代碼的訪問

雖然MPU區(qū)域通常用于提供或限制對RAM和外設(shè)的訪問,但如果有空閑區(qū)域,并且能夠通過進(jìn)程組織代碼,那么限制對代碼的訪問非常有用,可以防止某些類型的安全攻擊,如Return-to-libc攻擊。

減少進(jìn)程間的通信

正如設(shè)計(jì)時(shí),盡可能保持任務(wù)獨(dú)立一樣,進(jìn)程也應(yīng)該遵循同樣的規(guī)則。因此,進(jìn)程間應(yīng)盡量不交互,或者將進(jìn)程間通信保持在最低限度。如果必須與其它進(jìn)程通信,只需留出一個(gè)包含Out和In緩沖區(qū)的共享區(qū)域。

發(fā)送者將其數(shù)據(jù)放入Out緩沖區(qū)中,然后觸發(fā)一個(gè)中斷來喚醒接收進(jìn)程。一旦數(shù)據(jù)被處理,響應(yīng)可以放在發(fā)送者的In緩沖區(qū)中,并且可以使用中斷來通知發(fā)送進(jìn)程。

確定出現(xiàn)MPU故障時(shí)應(yīng)如何操作

理想情況下,在開發(fā)過程中檢測并糾正所有MPU故障。你還需考慮由于意外故障或錯(cuò)誤或系統(tǒng)受到安全攻擊而出現(xiàn)的故障處理。在大多數(shù)情況下,建議對每個(gè)任務(wù)或每個(gè)進(jìn)程設(shè)置一個(gè)可控的關(guān)機(jī)順序。是否重新啟動(dòng)違規(guī)任務(wù)、進(jìn)程內(nèi)或整個(gè)系統(tǒng)內(nèi)的所有任務(wù)都取決于故障的嚴(yán)重程度。

記錄和報(bào)告故障

理想情況下,系統(tǒng)應(yīng)該能夠記錄(可能是文件系統(tǒng))并顯示故障原因,以便開發(fā)人員解決問題。

大多數(shù)RTOS在特權(quán)模式下運(yùn)行應(yīng)用代碼,使得應(yīng)用程序完全控制CPU及其資源。所有任務(wù)和ISR都可以不受限制地訪問內(nèi)存和外設(shè)。這意味著應(yīng)用程序代碼可能會意外或故意損壞其他任務(wù)的堆?;蜃兞俊Mㄟ^MPU機(jī)制,可以限制應(yīng)用代碼的訪問權(quán)限,極大提供應(yīng)用的功能安全。

編輯:jq

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

    關(guān)注

    0

    文章

    340

    瀏覽量

    48701

原文標(biāo)題:MPU如何使產(chǎn)品更安全?

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    你總得知道你為什么要用Cortex-M

    架構(gòu)構(gòu)建。首款Cortex-M處理器于2004年發(fā)布,當(dāng)一些主流MCU供應(yīng)商選擇這款內(nèi)核,并開始生產(chǎn)MCU器件后,Cortex-M處理器迅速
    發(fā)表于 06-09 16:50

    ARM Cortex-M處理器詳解 精選資料分享

    ARM Cortex-M處理器家族現(xiàn)在有8款處理器成員。在本文中,我們會比較Cortex-M系列處理器之間的產(chǎn)品特性,重點(diǎn)講述如何根據(jù)產(chǎn)品應(yīng)用選擇正確的
    發(fā)表于 07-16 07:57

    ARM Cortex-M內(nèi)核的相關(guān)資料推薦

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是ARM Cortex-M功能模塊,不過側(cè)重點(diǎn)是三款安全特性處理器?! ?b class='flag-5'>ARM C
    發(fā)表于 12-27 07:21

    ARM Cortex-M 開發(fā)實(shí)戰(zhàn)指南入門篇(二)

    、Readme、User。CMSIS 用來存放庫為我們自帶的啟動(dòng)文件和一些 Cortex-M系列的通用文件,CMSIS文件里存放的文件適合任何Cortex-M內(nèi)核的單片機(jī),CMSIS 的 縮寫為
    發(fā)表于 04-19 17:24

    Arm Cortex-M處理器—Cortex-M85介紹

    Arm發(fā)布了新代的Cortex-M處理器,Cortex-M85。簡單粗暴的打個(gè)比方:Cortex-M85 ≈
    發(fā)表于 07-15 14:59

    ARM白皮書】ARM Cortex-M處理器入門

    ARM Cortex-M處理器家族現(xiàn)在有8款處理器成員。在本文中,會比較Cortex-M系列處理器之間的產(chǎn)品特性,重點(diǎn)講述如何根據(jù)產(chǎn)品應(yīng)用選擇正確的
    發(fā)表于 04-20 15:34 ?39次下載

    傳統(tǒng)的單片機(jī)和ARM較量 助推MCU踏上高端Cortex-M市場

    據(jù)有關(guān)市場調(diào)研機(jī)構(gòu)稱,基于ARM Cortex-M內(nèi)核的MCU在2010年創(chuàng)紀(jì)錄地實(shí)現(xiàn)了100%的出貨量增長。而整個(gè)MCU市場才增長了37%。MCU
    發(fā)表于 04-28 10:00 ?1582次閱讀

    Atmel Studio 6軟件如何調(diào)試ARM Cortex-M

    Atmel Studio 6軟件如何調(diào)試ARM Cortex-M
    的頭像 發(fā)表于 07-04 10:49 ?4205次閱讀

    米爾科技Cortex-M Prototyping System +介紹

    經(jīng)濟(jì)實(shí)惠的主板,作為ARM?Versatile?Express系列開發(fā)板的部分。他們提供兩種FPGA的選擇,用于原型設(shè)計(jì)基于Cortex-M的設(shè)計(jì)和
    的頭像 發(fā)表于 11-14 10:45 ?1825次閱讀
    米爾科技<b class='flag-5'>Cortex-M</b> Prototyping System +介紹

    Cortex-M內(nèi)核的MPU內(nèi)存保護(hù)單元

    講講Cortex-M內(nèi)核的MPU內(nèi)存保護(hù)單元
    的頭像 發(fā)表于 03-04 11:17 ?3598次閱讀
    <b class='flag-5'>Cortex-M</b>內(nèi)核的<b class='flag-5'>MPU</b>內(nèi)存保護(hù)單元

    mcookie與單片機(jī)的關(guān)系_使用ARM Cortex-M MCU拓展單片機(jī)教學(xué)

    mcookie與單片機(jī)的關(guān)系_使用ARM Cortex-M MCU拓展單片機(jī)教學(xué)
    發(fā)表于 11-30 19:36 ?9次下載
    mcookie與單片機(jī)的關(guān)系_使用<b class='flag-5'>ARM</b> <b class='flag-5'>Cortex-M</b> <b class='flag-5'>MCU</b>拓展單片機(jī)教學(xué)

    點(diǎn)理解之 CmBacktrace: ARM Cortex-M 系列 MCU 錯(cuò)誤追蹤庫

    點(diǎn)理解之 CmBacktrace: ARM Cortex-M 系列 MCU 錯(cuò)誤追蹤庫
    發(fā)表于 11-30 19:51 ?10次下載
    <b class='flag-5'>一</b>點(diǎn)理解之 CmBacktrace: <b class='flag-5'>ARM</b> <b class='flag-5'>Cortex-M</b> 系列 <b class='flag-5'>MCU</b> 錯(cuò)誤追蹤庫

    ARM Cortex-M 系列 MCU 錯(cuò)誤追蹤庫 --- CmBacktrace

    、CmBacktrace簡介款針對 ARM Cortex-M 系列 MCU 的錯(cuò)誤代碼自動(dòng)追蹤、定位,錯(cuò)誤原因自動(dòng)分析的開源庫。主要
    發(fā)表于 11-30 20:21 ?0次下載
    <b class='flag-5'>ARM</b> <b class='flag-5'>Cortex-M</b> 系列 <b class='flag-5'>MCU</b> 錯(cuò)誤追蹤庫 --- CmBacktrace

    Cortex-M內(nèi)核的MPU內(nèi)存保護(hù)單元

    估計(jì)大家經(jīng)??匆?b class='flag-5'>MCU、MPU、MMU等這類縮寫詞,你們了解MPU嗎?1寫在前面不知道大家有沒有關(guān)注過Cortex-M內(nèi)核的一些內(nèi)容,在ST
    發(fā)表于 12-01 12:21 ?9次下載
    <b class='flag-5'>Cortex-M</b>內(nèi)核的<b class='flag-5'>MPU</b>內(nèi)存保護(hù)單元

    基于32位Arm Cortex-M內(nèi)核N32系列MCU應(yīng)用

    國民技術(shù)N32系列MCU產(chǎn)品基于32位Arm Cortex-M內(nèi)核,內(nèi)置嵌入式高速閃存、低功耗電源管理,集成數(shù)?;旌想娐?,并內(nèi)置硬件密碼算法加速引擎以及安全單元。
    發(fā)表于 03-28 11:35 ?824次閱讀