估計(jì)大家經(jīng)??匆奙CU、MPU、MMU等這類縮寫詞,你們了解MPU嗎?
1寫在前面
不知道大家有沒有關(guān)注過Cortex-M內(nèi)核的一些內(nèi)容,在STM32大部分型號(hào)中都有MPU。
MPU是Cortex-M的選配件,拿STM32F1來說,STM32F10X_XL系列的芯片才具有這個(gè)MPU存儲(chǔ)保護(hù)單元,而其他STM32F1芯片沒有。
可能很多人都處于簡(jiǎn)單知道,或認(rèn)識(shí)MPU的階段,今天就寫點(diǎn)關(guān)于MPU的內(nèi)容,讓大家進(jìn)一步認(rèn)識(shí)和了解MPU。
2認(rèn)識(shí)MPU,及作用
MPU:Memory Protection Unit,內(nèi)存保護(hù)單元。
MPU存儲(chǔ)器保護(hù)單元,它可以實(shí)施對(duì)存儲(chǔ)器(主要是內(nèi)存和外設(shè)寄存器)的保護(hù),以使軟件更加健壯和可靠。在使用前,必須根據(jù)需要對(duì)其編程。如果沒有啟用MPU,則等同于系統(tǒng)中沒有配MPU。
MPU有如下的能力可以提高系統(tǒng)的可靠性:
阻止用戶應(yīng)用程序破壞操作系統(tǒng)使用的數(shù)據(jù)。
阻止一個(gè)任務(wù)訪問其它任務(wù)的數(shù)據(jù)區(qū),從而把任務(wù)隔開。
可以把關(guān)鍵數(shù)據(jù)區(qū)設(shè)置為只讀,從根本上消除了被破壞的可能。
檢測(cè)意外的存儲(chǔ)訪問,如,堆棧溢出,數(shù)組越界。
此外,還可以通過MPU設(shè)置存儲(chǔ)器regions的其它訪問屬性,比如,是否緩區(qū),是否緩沖等。
3了解野指針
上面簡(jiǎn)單認(rèn)識(shí)了一下MPU的功能,其實(shí)它有個(gè)重要的功能就是對(duì)指針訪問的內(nèi)存具有保護(hù)作用。所以,這里讓大家認(rèn)識(shí)一下指針和野指針。
回顧一下, 什么是指針?指針在內(nèi)存中實(shí)際上是一個(gè)無符號(hào)整數(shù)(unsigned int),但是它的值被賦予特殊的解釋:表示變量或函數(shù)的地址。所以才被形象地稱為“指針”,就好像指向誰家似的。 在使用指針前, 都必須先讓它指向有意義的, 并且允許由程序使用的實(shí)體——數(shù)據(jù)和代碼。 而所謂“野指針”, 就是指某個(gè)指針變量的值因故超出合法的范圍, 使其“槍口” 亂指。 程序邏輯錯(cuò)誤、 數(shù)組越界、 堆棧溢出、 指針未經(jīng)初始化、 對(duì)緩存與緩沖的處理不當(dāng)、 多任務(wù)環(huán)境中的紊亂條件, 甚至是惡意地破壞等, 都可以制造出野指針。 如果使用野指針去讀取或修改內(nèi)存, 則被讀取或修改的位置是不可預(yù)料的。 前者導(dǎo)致讀回來的都是亂掉的數(shù)據(jù), 后者則會(huì)破壞未知用途的數(shù)據(jù)。 這常常導(dǎo)致系統(tǒng)發(fā)生莫名其妙的功能紊亂, 嚴(yán)重時(shí)會(huì)使系統(tǒng)毫無征兆,沒有理由地失控、死機(jī)。
野指針就像“肉里的刺, 醬里的蛆” 一般: 一個(gè)野指針就足以毀掉整個(gè)系統(tǒng), 而且極其隱蔽, 很難通過癥狀來找出是哪里存在野指針, 甚至都不能判定癥狀是否因野指針造成(程序大了其它 bug 也很多,并且也能導(dǎo)致相同的癥狀)。對(duì)于通常的單片機(jī)系統(tǒng),是沒有任何辦法來防止野指針的破壞的, 完全靠程序員的素質(zhì)和自律。 但智者千慮, 必有一失。 尤其是當(dāng)程序規(guī)模變得很大時(shí),復(fù)雜度會(huì)呈指數(shù)上升,千頭萬緒糾纏不清, 就算是謹(jǐn)慎如諸葛亮,聰明如比爾?蓋茨的天才,也不敢保證沒有漏網(wǎng)之魚。
---來自CM3內(nèi)核翻譯作者
4進(jìn)一步了解MPU
MPU在執(zhí)行其功能時(shí),是以所謂的“region區(qū)域”為單位的。一個(gè)region其實(shí)就是一段連續(xù)的地址,只是它們的位置和范圍都要滿足一些限制(對(duì)齊方式,最小容量等)。
CM3的MPU共支持8個(gè)regions,還允許把每個(gè)region進(jìn)一步劃分成更小的“子region”。此外,還允許啟用一個(gè)“背景region”(即沒有MPU時(shí)的全部地址空間),不過它是只能由特權(quán)級(jí)享用。在啟用MPU后,就不得再訪問定義之外的地址區(qū)間,也不得訪問未經(jīng)授權(quán)的region。否則,將以“訪問違例”處理,觸發(fā)MemManage fault。
MPU定義的regions可以相互交迭。如果某塊內(nèi)存落在多個(gè)region中,則訪問屬性和權(quán)限將由編號(hào)最大的region來決定。比如,若1號(hào)region與4號(hào)region交迭,則交迭的部分受4號(hào)region控制。
MPU可用于保護(hù)多達(dá)16個(gè)內(nèi)存區(qū)域。如果區(qū)域至少為256字節(jié),那么這些區(qū)域可以有8個(gè)子區(qū)域。子區(qū)域的大小總是相等的,可以通過子區(qū)域號(hào)啟用或禁用。因?yàn)樽钚^(qū)域大小是由緩存行長(zhǎng)度(32字節(jié))驅(qū)動(dòng)的,所以8個(gè)32字節(jié)的子區(qū)域?qū)?yīng)256字節(jié)大小。
5MPU學(xué)習(xí)資料
上面只是進(jìn)一步讓大家了解了MPU內(nèi)存保護(hù)單元,對(duì)于想要深入理解的朋友就需要參看更多相關(guān)資料。
對(duì)學(xué)習(xí)MPU編程,就需要對(duì)MPU相關(guān)寄存器進(jìn)行掌握,MPU的寄存器其實(shí)相對(duì)來說也不多,這里再Cotex-M內(nèi)核技術(shù)參考手冊(cè),以及STM32應(yīng)用筆記Managing memory protection unit (MPU) in STM32 MCUs、編程手冊(cè)中都有講述關(guān)于MPU的知識(shí)。
為方便大家,這里也簡(jiǎn)單說幾點(diǎn)。
1.STM32內(nèi)存映射
2.MPU 的寄存器組
操作MPU是就如操作普通STM32外設(shè)一樣,通過訪問它的若干寄存器來實(shí)現(xiàn)的,MPU寄存器如下表所示。
MPU寄存器看起來比較復(fù)雜,那是自然了,畢竟已經(jīng)上升到存儲(chǔ)器管理的高度。但如果我們胸有成竹——已經(jīng)想好了對(duì)存儲(chǔ)器如何劃分,這就只是一些繁瑣和考驗(yàn)細(xì)心的體力活。典型情況下,在啟用MPU的系統(tǒng)中,都會(huì)有下列的regions。
特權(quán)級(jí)的程序代碼(如OS內(nèi)核和異常服務(wù)例程)
?用戶級(jí)的程序代碼
?特權(quán)級(jí)程序的數(shù)據(jù)存儲(chǔ)器,位于代碼區(qū)中(data_stack)
?用戶級(jí)程序的數(shù)據(jù)存儲(chǔ)器,位于代碼區(qū)中(data_stack)
?通用的數(shù)據(jù)存儲(chǔ)器,位于其它存儲(chǔ)器區(qū)域中(如, SRAM)
?系統(tǒng)設(shè)備區(qū),只允許特權(quán)級(jí)訪問,如NVIC和MPU的寄存器所有的地址區(qū)間
?常規(guī)外設(shè)區(qū),如UART, ADC等
3.Cube HAL配置MPU例子
void MPU_RegionConfig(void)
{
MPU_Region_InitTypeDef MPU_InitStruct;
/* Disable MPU */
HAL_MPU_Disable();
/* Configure RAM region as Region N°0, 8kB of size and R/W region */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x20000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_8KB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/* Configure FLASH region as REGION N°1, 1MB of size and R/W region */
MPU_InitStruct.BaseAddress = 0x08000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_1MB;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER1;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/* Configure FMC region as REGION N°2, 0.5GB of size, R/W region */
MPU_InitStruct.BaseAddress = 0x60000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_512MB;
MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER2;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/* Enable MPU */
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}
上一篇:定時(shí)器基本原理及常見問題
下一篇:STM32各系列MCU性能對(duì)比及測(cè)試說明
推薦閱讀
史海拾趣
為了進(jìn)一步拓展市場(chǎng)份額,達(dá)方電子開始在全球范圍內(nèi)布局生產(chǎn)基地和研發(fā)中心。同時(shí),公司加強(qiáng)了對(duì)供應(yīng)鏈的管理,確保原材料的穩(wěn)定供應(yīng)和產(chǎn)品質(zhì)量的持續(xù)提升。這一階段的努力,使達(dá)方電子在全球電子行業(yè)中的地位得到了進(jìn)一步提升。
人才是企業(yè)發(fā)展的根本動(dòng)力。華瓷深知這一點(diǎn),因此在人才戰(zhàn)略和團(tuán)隊(duì)建設(shè)上投入了大量精力。公司注重員工的培訓(xùn)和發(fā)展,為員工提供廣闊的發(fā)展空間和良好的職業(yè)前景。同時(shí),華瓷還積極引進(jìn)國內(nèi)外優(yōu)秀人才,打造了一支高素質(zhì)、專業(yè)化的團(tuán)隊(duì)。這支團(tuán)隊(duì)為公司的發(fā)展提供了有力的支持和保障。
1992年,Bussmann開始了第一款芯片保險(xiǎn)絲的開發(fā)工作。這款保險(xiǎn)絲將可熔性材料沉降到陶瓷基底上,大小只有3mm*1.5mm,可以通過自動(dòng)裝配機(jī)安裝到印刷電路板上。這一創(chuàng)新不僅大大提高了熔斷器的性能和可靠性,還降低了生產(chǎn)成本,為電子行業(yè)的發(fā)展注入了新的活力。
在市場(chǎng)推廣的過程中,Soneet注重品牌形象的建立。公司積極參加各類行業(yè)展會(huì)和技術(shù)交流會(huì)議,展示其最新技術(shù)和產(chǎn)品。同時(shí),Soneet還通過媒體宣傳、社交媒體營銷等方式,提高品牌知名度和美譽(yù)度。這些努力使得Soneet在消費(fèi)者心中樹立了良好的品牌形象。
隨著全球?qū)Νh(huán)保意識(shí)的日益增強(qiáng),Excelsys公司積極響應(yīng)綠色環(huán)保的號(hào)召,將環(huán)保理念融入到產(chǎn)品設(shè)計(jì)和生產(chǎn)過程中。公司采用環(huán)保材料、優(yōu)化生產(chǎn)工藝、提高能源利用效率等措施,減少了對(duì)環(huán)境的影響。同時(shí),公司還積極參與環(huán)保公益活動(dòng),為行業(yè)的綠色發(fā)展貢獻(xiàn)力量。
AC Photonics Inc深知品質(zhì)是企業(yè)生存和發(fā)展的關(guān)鍵。因此,公司始終將品質(zhì)管理放在首位,從原材料采購到生產(chǎn)流程控制,再到產(chǎn)品出廠檢驗(yàn),都嚴(yán)格遵循國際標(biāo)準(zhǔn)和行業(yè)規(guī)范。同時(shí),公司還注重品牌建設(shè),通過參加行業(yè)展會(huì)、舉辦技術(shù)研討會(huì)等方式,不斷提升品牌知名度和美譽(yù)度。這些努力使得AC Photonics Inc的產(chǎn)品在市場(chǎng)上獲得了廣泛的認(rèn)可和好評(píng)。
請(qǐng)問CDMA的代理服務(wù)器的IP是什么呢? 請(qǐng)問CDMA的代理服務(wù)器的IP是什么呢? 我用操作系統(tǒng)的撥號(hào)程序把CDMA的模塊撥上網(wǎng)后(建立PPP接連),在網(wǎng)絡(luò)正常的前提下(可用該連接瀏覽網(wǎng)頁),用TCP連各個(gè)可能的代理服務(wù)器IP(WAP代理服務(wù)器)都失敗?!? 查看全部問答∨ |
|
望各位高手給下意見,小弟剛學(xué)習(xí)匯編第3天寫出了如此令我迷茫的程序望各位指點(diǎn)一下? 若自block開始的內(nèi)存緩沖區(qū)有100個(gè)字節(jié),帶符號(hào)數(shù),需找出最大值將其存放在max單元中? 代碼如下 mov al,0; mov bl,1;   ...… 查看全部問答∨ |
有一個(gè).exe文件,還有幾個(gè)文本文件,現(xiàn)在想打個(gè)包,不知道該怎么打 最好是那種可以和安裝程序一樣的,打開之后安裝,然后就可以使用啊 … 查看全部問答∨ |
怎么論壇頭頂?shù)娘w思卡廣告點(diǎn)不動(dòng)? 怎么論壇頭頂?shù)娘w思卡廣告點(diǎn)不動(dòng)?如下圖 [ 本帖最后由 vvv9876 于 2011-3-27 23:30 編輯 ]… 查看全部問答∨ |
|
【MSP430共享】基于無線通信的高壓電力電纜巡檢系統(tǒng)設(shè)計(jì) 傳統(tǒng)的現(xiàn)場(chǎng)總線監(jiān)控系統(tǒng)僅適合小范圍監(jiān)控,而對(duì)于大規(guī)模的高壓電力電纜監(jiān)測(cè)存在電纜敷設(shè)難、成本高、難以維護(hù)等問題;設(shè)計(jì)了一種新型電力電纜監(jiān)控系統(tǒng),系統(tǒng)利用低功耗數(shù)字溫度傳感器 TMP 1 0 0實(shí)現(xiàn)地下電纜接頭溫度采集,MS P 4 3 0 F I 4 9作為工 ...… 查看全部問答∨ |
現(xiàn)有并行輸入的8個(gè)數(shù)據(jù)。要找到其中的最大值和最小值,并給其定位,比較大小沒問題,關(guān)鍵是定位問題沒有解決,請(qǐng)大家?guī)蛶兔Γx謝… 查看全部問答∨ |
查找表(Look-Up-Table)的原理與結(jié)構(gòu)(FPGA 一.查找表(Look-Up-Table)的原理與結(jié)構(gòu) 采用這種結(jié)構(gòu)的PLD芯片我們也可以稱之為FPGA:如altera的ACEX,APEX系列,xilinx的Spartan,Virtex系列等。 查找表(Look-Up-Table)簡(jiǎn)稱為L(zhǎng)UT,LUT本質(zhì)上就是一個(gè)RAM。 目前FPGA中多使用4輸入的LUT, ...… 查看全部問答∨ |
LM3S9B96 選擇μC/OS-II還是SAFERTOS,哪一個(gè)上手更快、資料更豐富? 9b96開發(fā)板內(nèi)部是移植好了SAFERTOS這個(gè)操作系統(tǒng)了么?關(guān)于在9B96上用操作系統(tǒng),μC/OS-II和SAFERTOS哪一個(gè)用的更多呢,或者哪一個(gè)的資料會(huì)更多點(diǎn)。。。 … 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 看是德科技利用校準(zhǔn)降低儀器測(cè)量不確定度、提高測(cè)試精度 直播享好禮!
- 直播已結(jié)束|安世新一代高效的氮化鎵(GaN)電源設(shè)計(jì)方案
- 更好的供電方式:使用更小、更輕的電源模塊加速車輛電氣化
- 是德科技(Keysight)有獎(jiǎng)?wù)魑?,下筆贏示波器啦!
- 有獎(jiǎng)問答 英飛凌一站式BMS解決方案
- 恩智浦LPC1500開發(fā)體驗(yàn)有獎(jiǎng)?wù)骷?/a>
- NXP微控制器電路板,針對(duì)USB Type C接口設(shè)計(jì),評(píng)測(cè)創(chuàng)意有獎(jiǎng)?wù)骷?,曬心得更有多重好禮!
- 安森美有獎(jiǎng)直播|適用于光儲(chǔ)充的SiC及IGBT隔離柵極驅(qū)動(dòng)器方案
- ADI電磁流量計(jì)解決方案
- 下載有禮|ADI 最新《模擬對(duì)話》合訂本
- ST-LINK-II仿真器升級(jí)計(jì)劃
- 如何實(shí)現(xiàn)可移動(dòng)磁盤屬性的移動(dòng)硬盤?
- 關(guān)于射頻芯片,沒有比這一篇更全了!值得收藏!
- 我做藍(lán)牙控制小車 現(xiàn)在沒法控制 求大俠指點(diǎn)
- 橫屏?xí)r工具欄顯示位置?
- 請(qǐng)幫忙看一下這個(gè)程序問題出在那里?
- 求助 怎樣控制3.5 TFTLCD
- AVR CP,CPC,比較指令是如何影響SREG標(biāo)志位的了
- EEWORLD大學(xué)堂----直播回放:MSP430 CapTIvate Lite: 成本優(yōu)化的電容觸摸微控制器
- DRV8711 始終UVLO報(bào)警