在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

應(yīng)用筆記 | MPU 子區(qū)話題

STM32單片機(jī) ? 來源:未知 ? 2023-07-25 17:40 ? 次閱讀

關(guān)鍵字:MPU, SubRegion

目錄預(yù)覽

1 問題起因2 問題解析3 問題小結(jié)

1. 問題起因

有人詢問STM32F7 和STM32H7 系列庫例程中有關(guān)MPU 配置中的下面這句加綠色下劃線的代碼的意思是什么?有何用?

d85e3af0-2ace-11ee-a368-dac502259ad0.png

圖1、芯片存儲(chǔ)空間MPU 背景配置

從上面截圖中的紅色框內(nèi)代碼我們不難看出,這里進(jìn)行MPU 設(shè)置就是將從0 開始的4G 空間,即整個(gè)STM32 可尋址空間定義為Strongly Ordered 存儲(chǔ)屬性。且此時(shí)MPU Region 編號(hào)為0。可代碼注釋上又說只是將未定義的區(qū)域配置為Strongly Ordered,這未定義區(qū)域到底啥意思,該如何理解?難道跟綠色下劃線標(biāo)示的那行代碼有關(guān)系。

那么,這句代碼MPU_InitStruct.SubRegionDisable = 0x87; 又是什么意思呢?

要理解這行代碼的意思,我們就有必要了解MPU 的子區(qū)概念【Subregion】。

2.問題解析

所謂子區(qū)【Subregion】,當(dāng)我們對(duì)任一存儲(chǔ)空間不小于256B 的區(qū)域【Region】進(jìn)行MPU 配置時(shí),往往可以把該區(qū)【region】等分為8 個(gè)子區(qū)【Subregion】,并可以把當(dāng)前MPU 配置選擇性地針對(duì)各個(gè)子區(qū)進(jìn)行排除性設(shè)置。在內(nèi)核里有個(gè)關(guān)于MPU 配置的寄存器MPU_RASR,其中有個(gè)8 位字段SRD 就是用來設(shè)置各個(gè)子區(qū)的MPU 排除性設(shè)置或者說例外性配置。如果某位為0,表示該子區(qū)適用當(dāng)前MPU 配置;如果某位為1,表示該位所對(duì)應(yīng)子區(qū)不適用當(dāng)前MPU 配置,即不受當(dāng)前MPU 配置約束。下圖是MPU_RASR 寄存器的描述截圖:

dab35e70-2ace-11ee-a368-dac502259ad0.png

圖2、MPU_RASR寄存器

不妨舉例說一下。假設(shè)我們選擇了某64MB區(qū)域進(jìn)行MPU設(shè)置,屬性配置如下:

daf455ba-2ace-11ee-a368-dac502259ad0.png

圖3、某特定內(nèi)存MPU配置代碼

基于上面配置,該64MB空間配置為不共享、可緩存、可執(zhí)行程序的MPU存儲(chǔ)屬性【細(xì)節(jié)可以核對(duì)下圖4,其中C表示Cacheable,B表示Bufferable,S表示Shareable】

db959592-2ace-11ee-a368-dac502259ad0.png

圖4、MPU配置屬性對(duì)應(yīng)表

這里有針對(duì)個(gè)別子區(qū)做了MPU屬性排除操作,就是下面這句代碼實(shí)現(xiàn)的:MPU_InitStruct.SubRegionDisable = 0x28;//即二進(jìn)制00101000

前面說過了,我們可以將大于256B的存儲(chǔ)區(qū)等分為8個(gè)子區(qū)并做MPU屬性排除配置。這里的0x28對(duì)應(yīng)的8位2進(jìn)制數(shù)表示各個(gè)子區(qū)針對(duì)當(dāng)前MPU配置是否被排除在外的情況,若某位為0時(shí)表示相應(yīng)子區(qū)適用當(dāng)前MPU配置屬性,為1則不適用當(dāng)前MPU的配置。

結(jié)合前面寄存器描述和上面配置代碼,被排除在外的即不適用當(dāng)前MPU配置的子區(qū)就是下圖5中的兩個(gè)地址空間【標(biāo)紅色1的地方】:

dbc1f862-2ace-11ee-a368-dac502259ad0.png

圖5、某特定內(nèi)存MPU子區(qū)配置布局

若把上面圖形左轉(zhuǎn)90°即可看明白剛才那個(gè)SRD字段的配置值0x28的由來以及地址空間對(duì)應(yīng)關(guān)系,SRD的高位對(duì)應(yīng)高地址子區(qū)。基于上面配置,有2個(gè)8MB空間是不適用當(dāng)前的MPU配置,即被排除在外了。

我們不妨再看看另一個(gè)關(guān)于MPU子區(qū)的示例【來自ARM M7內(nèi)核技術(shù)手冊(cè)】。

dbdea714-2ace-11ee-a368-dac502259ad0.png

圖6、帶內(nèi)存重疊的MPU配置

根據(jù)上面信息我們可以得知,MPU配置了2個(gè)存儲(chǔ)區(qū)【Region】,其中Region1的地址空間與Region2部分地址空間是重疊的。在Region2中使用到子區(qū)【subregion】,其中與Region1重疊的兩個(gè)子區(qū)做了MPU排除處理,即Region2中頭2個(gè)子區(qū)的MPU屬性不適用于Region2的MPU配置,這2個(gè)子區(qū)的MPU屬性取決于Region1的配置。換言之,Region2的配置對(duì)頭2個(gè)子區(qū)的MPU屬性沿用了Region1的。

對(duì)MPU的區(qū)[Region]及子區(qū)[Subregion]介紹得差不多了,我們繼續(xù)回到最開始那個(gè)問題。整個(gè)空間4GB被等分為8個(gè)子區(qū),每個(gè)子區(qū)500MB。現(xiàn)在子區(qū)【Subregion】的MPU設(shè)置是這樣的:

MPU_InitStruct.SubRegionDisable = 0x87;//10000111B

即有4個(gè)子區(qū)做了MPU屬性排除處理【上面紅色1注釋標(biāo)示的】,其它4個(gè)子區(qū)【綠色0標(biāo)示出來的】適用Strongly ordered 存儲(chǔ)屬性。我們可以結(jié)合手冊(cè)具體看看各個(gè)子區(qū)的分布情況。

dc510ca0-2ace-11ee-a368-dac502259ad0.png

圖7、4G空間的MPU子區(qū)劃分圖

上圖中紅色區(qū)域并不適用當(dāng)前配置的Strongly ordered 存儲(chǔ)屬性,只有其它綠色區(qū)域適用,他們集中在外部設(shè)備存儲(chǔ)區(qū)。看到這里,有人或許發(fā)現(xiàn)這個(gè)MPU配置只是個(gè)粗線條的配置,重點(diǎn)對(duì)外部存儲(chǔ)區(qū)域做了大致的初始背景配置,即配置為Strongly Ordered屬性。

在實(shí)際應(yīng)用中,開發(fā)者往往會(huì)根據(jù)實(shí)際情況針對(duì)外部存儲(chǔ)器做進(jìn)一步的MPU配置。當(dāng)我們閱讀STM32F7或 STM32H7系例相關(guān)應(yīng)用代碼時(shí),我們會(huì)發(fā)現(xiàn),除了看到開篇提到的的針對(duì)整個(gè)4G空間的MPU初始配置外,還有諸多針對(duì)外部存儲(chǔ)區(qū)的特定MPU配置,比方下面這些就有針對(duì)外部SDRAM、QSPI、FMC控制的存儲(chǔ)設(shè)備的MPU配置。主要就Region編號(hào)、起始地址、空間大小、Cacheable、Bufferable、Shareable等屬性進(jìn)行配置。【下圖中打紅色三角形的是針對(duì)整個(gè)4GB空間的MPU初始配置,其它打勾的是針對(duì)特定存儲(chǔ)空間的MPU配置,該區(qū)間的MPU屬性與4GB空間中重合部分的初始配置不一致時(shí)以新配置為準(zhǔn)。】

dc85aef6-2ace-11ee-a368-dac502259ad0.png

圖8、STM32H7產(chǎn)品的MPU配置代碼示例

顯然,上面SDRAMQSPIFMC的存儲(chǔ)區(qū)都落在圖7中的綠色區(qū)域空間,因?yàn)榇藭r(shí)的特定配置所用MPU區(qū)編號(hào)都要高于那個(gè)粗線條配置的區(qū)編號(hào)0。對(duì)于MPU配置而言,重疊區(qū)域的MPU配置以更大區(qū)編號(hào)的配置為準(zhǔn)。以圖8中64KB的SDRAM配置來看,此時(shí)從0xC0000000開始的64KB區(qū)域不再適用Strongly Ordered存儲(chǔ)屬性,而適用Cacheable 、Write Through存儲(chǔ)屬性。

或許有人會(huì)問,既然具體應(yīng)用時(shí)我們會(huì)針對(duì)所用存儲(chǔ)設(shè)備做更合適的MPU配置,為什么要事先基于整個(gè)4G空間做粗線條配置,對(duì)外部存儲(chǔ)空間做Strongly Ordered屬性的初始配置呢?那個(gè)粗線條的MPU初始配置豈不多余?

要解釋這個(gè)問題,就涉及到另外一個(gè)話題,即Cortex M7內(nèi)核的試探性訪問【關(guān)于試探性訪問,這里不做過多解讀,有興趣查看相關(guān)內(nèi)核手冊(cè)】。當(dāng)內(nèi)核處理器因發(fā)生試探性訪問去訪問一個(gè)不存在的存儲(chǔ)設(shè)備時(shí)往往會(huì)導(dǎo)致訪問死鎖,顯然這不是我們所希望的。

不過,試探性訪問可以被阻止,即當(dāng)相應(yīng)存儲(chǔ)空間配置為Device或Strongly Ordered屬性時(shí),是不會(huì)發(fā)生試探性訪問的。

我們依然以上面提到的64KB的外部SDRAM來看,顯然它往往并沒有占據(jù)整個(gè)External Device空間,只是使用了有限的空間。如果說SDRAM所占區(qū)域以外的空間的屬性不是Device或Strongly Ordered,若訪問SDRAM時(shí)發(fā)生試探性訪問跳到SDRAM實(shí)際容量以外的區(qū)域,此時(shí)因無實(shí)際存儲(chǔ)設(shè)備就可能出現(xiàn)死鎖之類的異常。為了防止這個(gè)問題發(fā)生,就有了上面的事先針對(duì)4G空間做了粗線條的MPU配置,并特地將整個(gè)外部存儲(chǔ)設(shè)備所對(duì)應(yīng)的空間都配置為Strongly Order屬性。

結(jié)合下圖看看,黃色區(qū)域?yàn)橛脩舾鶕?jù)實(shí)際SDRAM容量更新過的MPU配置,綠色部分為事先配置的Strongly Order屬性,以阻止處理器針對(duì)綠色區(qū)域進(jìn)行試探性訪問。

dcb0903a-2ace-11ee-a368-dac502259ad0.png

圖9、粗線條初始配置結(jié)合用戶更新的MPU配置

換句話說,事先針對(duì)整個(gè)4G空間做MPU配置,正是為了明確那些沒有做特定MPU配置的外部存儲(chǔ)空間的存儲(chǔ)屬性,Strongly ordered 屬性配置恰好可以很好地防止M7處理器對(duì)并不存在實(shí)際存儲(chǔ)設(shè)備的空間進(jìn)行試探性訪問而導(dǎo)致異常。這也就正好解釋了開頭提到的那句注釋“將未定義區(qū)域配置為Strongly ordered屬性”。

或許有人發(fā)現(xiàn)即使不要那段針對(duì)4GB空間的MPU初始配置代碼,似乎也沒遇到啥問題。這也正常。因?yàn)槟慵词雇鈹U(kuò)了存儲(chǔ)單元,并非一定會(huì)因?yàn)樵囂叫栽L問導(dǎo)致異常。比方你外擴(kuò)了32MB的存儲(chǔ)單元,未必就一定會(huì)要用到最后一個(gè)位置,說不定還剩余很多,遠(yuǎn)不至于用到最后邊界而讓CPU試探到不存在存儲(chǔ)器的空間。但是事先做那段初始配置,對(duì)系統(tǒng)是一個(gè)很好的未雨綢繆。就好像河邊安置防護(hù)欄一樣,沒有,也不至于天天怎么樣;有,肯定要安全保險(xiǎn)得多。

3. 問題小結(jié)

本篇內(nèi)容主要涉及內(nèi)核MPU配置方面的東西,重點(diǎn)針對(duì)客戶的疑問做了些解答,對(duì)MPU配置中的子區(qū)概念做了較為詳細(xì)的解讀,以供參考。

完整內(nèi)容請(qǐng)點(diǎn)擊“閱讀原文”下載原文檔。

dcd59eca-2ace-11ee-a368-dac502259ad0.png

長按掃碼關(guān)注公眾號(hào)

更多資訊,盡在STM32

點(diǎn)擊“閱讀原文”,可下載原文檔


原文標(biāo)題:應(yīng)用筆記 | MPU 子區(qū)話題

文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


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

    關(guān)注

    6037

    文章

    44558

    瀏覽量

    635356
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10900

    瀏覽量

    356056

原文標(biāo)題:應(yīng)用筆記 | MPU 子區(qū)話題

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    應(yīng)用筆記1604:去補(bǔ)償運(yùn)算放大器

    電子發(fā)燒友網(wǎng)站提供《應(yīng)用筆記1604:去補(bǔ)償運(yùn)算放大器.pdf》資料免費(fèi)下載
    發(fā)表于 09-29 10:30 ?0次下載
    應(yīng)<b class='flag-5'>用筆記</b>1604:去補(bǔ)償運(yùn)算放大器

    TPS6598x沒電電池應(yīng)用筆記

    電子發(fā)燒友網(wǎng)站提供《TPS6598x沒電電池應(yīng)用筆記.pdf》資料免費(fèi)下載
    發(fā)表于 09-25 10:03 ?0次下載
    TPS6598x沒電電池應(yīng)<b class='flag-5'>用筆記</b>

    TLC3702 TLC3704系列應(yīng)用筆記

    電子發(fā)燒友網(wǎng)站提供《TLC3702 TLC3704系列應(yīng)用筆記.pdf》資料免費(fèi)下載
    發(fā)表于 09-20 09:14 ?0次下載
    TLC3702 TLC3704系列應(yīng)<b class='flag-5'>用筆記</b>

    變頻器的功率計(jì)基本計(jì)算應(yīng)用筆記

    電子發(fā)燒友網(wǎng)站提供《變頻器的功率計(jì)基本計(jì)算應(yīng)用筆記.pdf》資料免費(fèi)下載
    發(fā)表于 09-09 14:38 ?0次下載
    變頻器的功率計(jì)基本計(jì)算應(yīng)<b class='flag-5'>用筆記</b>

    芯海CS32F0XXTIMER外設(shè)模塊應(yīng)用筆記

    本應(yīng)用筆記旨在展示使用CS32FOxx微控器,針對(duì)定時(shí)器外設(shè)的應(yīng)用。幫助用戶了解CS32FOxx定時(shí)器的基本特性、操作模式及相關(guān)應(yīng)用的示例代碼。提供的一些高級(jí)應(yīng)用以便縮短用戶開發(fā)周期。對(duì)所介紹的特定
    發(fā)表于 05-16 15:02

    芯海CS32F0XXADC外設(shè)模塊應(yīng)用筆記

    本應(yīng)用筆記旨在展示使用CS32FOxx微控器,提高A/D轉(zhuǎn)化精度的應(yīng)用。幫助ADC模塊用戶了解 CS32微控器提供的一些高級(jí)應(yīng)用并加快開發(fā)周期。所介紹的每種模式都提供一個(gè)應(yīng)用示例,以方便用戶快速移植
    發(fā)表于 05-16 14:58

    芯海應(yīng)用筆記:通用 MCU IAR 開發(fā)指南

    本應(yīng)用筆記旨在幫助指導(dǎo)用戶針對(duì)芯海通用 MCU 基于 IAR 環(huán)境的快速開發(fā),幫助用戶快速建立應(yīng)用工程。芯海科技通用 MCU 提供的 pack 開發(fā)包都是僅支持芯海 CSU、MDK 或 IAR 通用
    發(fā)表于 05-16 11:50

    芯海應(yīng)用筆記:通用 MCU 基于 GCC 編譯開發(fā)應(yīng)用

    本應(yīng)用筆記旨在幫助指導(dǎo)用戶針對(duì)芯海通用 MCU 基于 GCC 環(huán)境的快速開發(fā)。芯海科技通用 MCU 提供的 pack 開發(fā)包都是僅支持芯海 CSU、MDK 或 IAR 通用集成的 IDE 工具,如果
    發(fā)表于 05-16 11:47

    芯海應(yīng)用筆記:通用 MCU Flash 讀寫保護(hù)和 SWD 復(fù)用指導(dǎo)手冊(cè).

    本應(yīng)用筆記旨在幫助用戶了解芯海科技通用 MCU Flash 讀寫保護(hù)的相關(guān)注意事項(xiàng),同時(shí)針對(duì) SWD引腳鎖復(fù)用提供解決方案。本文檔所涉及到的解決方案可適用于芯海通用 MCU 產(chǎn)品的常見相關(guān)需求。*附件:應(yīng)用筆記:芯海通用MCUflash讀寫保護(hù)和SWD復(fù)用指導(dǎo)手冊(cè).pdf
    發(fā)表于 05-16 11:44

    芯海通用 MCU 應(yīng)用筆記 :CS32F103 系列 MCU IAP 升級(jí)指南

    本應(yīng)用筆記旨在幫助指導(dǎo)用戶針對(duì)芯海 CORTEX-M3 MCU CS32F103 系列單片機(jī) IAP 應(yīng)用的快速開發(fā)。本應(yīng)用筆記實(shí)現(xiàn)了 CAN 和 USART 兩種接口方式來開發(fā) IAP 應(yīng)用,協(xié)議
    發(fā)表于 05-16 11:40

    芯海科技應(yīng)用筆記:CS32F0XX TIMER外設(shè)模塊指導(dǎo)

    本應(yīng)用筆記旨在展示使用 CS32F0xx 微控器,針對(duì)定時(shí)器外設(shè)的應(yīng)用。幫助用戶了解 CS32F0xx 定時(shí)器的基本特性、操作模式及相關(guān)應(yīng)用的示例代碼。提供的一些高級(jí)應(yīng)用以便縮短用戶開發(fā)周期。對(duì)所介
    發(fā)表于 05-16 10:52

    芯海應(yīng)用筆記:CS32F0XX ADC外設(shè)模塊指導(dǎo)

    本應(yīng)用筆記旨在展示使用 CS32F0xx 微控器,提高 A/D 轉(zhuǎn)化精度的應(yīng)用。幫助 ADC 模塊用戶了解CS32 微控器提供的一些高級(jí)應(yīng)用并加快開發(fā)周期。所介紹的每種模式都提供一個(gè)應(yīng)用示例,以方
    發(fā)表于 05-16 10:49

    芯海CSU18P88應(yīng)用筆記

    本應(yīng)用筆記旨在為用戶提供關(guān)于CSU18P88的詳細(xì)信息和使用指南,幫助用戶快速開發(fā)基于CSU18P88的應(yīng)用。*附件:CSU18P88應(yīng)用筆記V1.5.pdf
    發(fā)表于 05-16 10:24

    CSU18MX86應(yīng)用筆記

    本應(yīng)用筆記旨在為用戶提供關(guān)于CSU18MX86的詳細(xì)信息和使用指南,幫助用戶快速開發(fā)基于CSU18MX86的應(yīng)用。*附件:CSU18MX86應(yīng)用筆記_V1.0.pdf
    發(fā)表于 05-16 10:21

    Microchip TCP/IP 協(xié)議棧應(yīng)用筆記

    電子發(fā)燒友網(wǎng)站提供《Microchip TCP/IP 協(xié)議棧應(yīng)用筆記.pdf》資料免費(fèi)下載
    發(fā)表于 04-17 14:16 ?1次下載
    主站蜘蛛池模板: 欧美黑人性xxx猛交| a天堂中文在线| 久久综合成人网| 永久免费精品影视网站| 天天干天天插天天射| se97se成人亚洲网站在线观看| 一级毛片真人免费播放视频| 欧美激情亚洲精品日韩1区2区| 亚洲www视频| 国产精品久久久久久福利| 免费香蕉视频国产在线看| 欧美三级视频在线| 国产网站免费视频| 天堂最新在线资源| 欧美精品网站| 色视频网| 国模私拍一区二区三区| 天天干天天澡| 男男h全肉耽污| 瑟瑟久久| 香蕉视频在线观看国产| 亚洲一区二区三区免费视频| 五月婷婷在线观看视频| www.欧美色图| 国产精品资源在线观看| 亚洲香蕉影视在线播放| 搞逼综合网| 国产午夜亚洲精品| 九九视频热| 国产美女一区二区三区| 久久久久久国产精品免费免 | 苦瓜se影院在线视频网站| 免费无码看av的网站| 久久国产香蕉一区精品| 天天色天天干天天射| 久99热| 国产卡一卡2卡三卡免费视频| 51xtv成人影院| 亚洲国产精品婷婷久久久久| 成年网站在线观看| 亚洲影视一区二区|