色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

應用筆記 | MPU 子區話題

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

關鍵字:MPU, SubRegion

目錄預覽

1 問題起因2 問題解析3 問題小結

1. 問題起因

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

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

圖1、芯片存儲空間MPU 背景配置

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

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

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

2.問題解析

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

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

圖2、MPU_RASR寄存器

不妨舉例說一下。假設我們選擇了某64MB區域進行MPU設置,屬性配置如下:

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

圖3、某特定內存MPU配置代碼

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

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

圖4、MPU配置屬性對應表

這里有針對個別子區做了MPU屬性排除操作,就是下面這句代碼實現的:MPU_InitStruct.SubRegionDisable = 0x28;//即二進制00101000

前面說過了,我們可以將大于256B的存儲區等分為8個子區并做MPU屬性排除配置。這里的0x28對應的8位2進制數表示各個子區針對當前MPU配置是否被排除在外的情況,若某位為0時表示相應子區適用當前MPU配置屬性,為1則不適用當前MPU的配置。

結合前面寄存器描述和上面配置代碼,被排除在外的即不適用當前MPU配置的子區就是下圖5中的兩個地址空間【標紅色1的地方】:

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

圖5、某特定內存MPU子區配置布局

若把上面圖形左轉90°即可看明白剛才那個SRD字段的配置值0x28的由來以及地址空間對應關系,SRD的高位對應高地址子區?;谏厦媾渲?,有2個8MB空間是不適用當前的MPU配置,即被排除在外了。

我們不妨再看看另一個關于MPU子區的示例【來自ARM M7內核技術手冊】。

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

圖6、帶內存重疊的MPU配置

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

對MPU的區[Region]及子區[Subregion]介紹得差不多了,我們繼續回到最開始那個問題。整個空間4GB被等分為8個子區,每個子區500MB?,F在子區【Subregion】的MPU設置是這樣的:

MPU_InitStruct.SubRegionDisable = 0x87;//10000111B

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

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

圖7、4G空間的MPU子區劃分圖

上圖中紅色區域并不適用當前配置的Strongly ordered 存儲屬性,只有其它綠色區域適用,他們集中在外部設備存儲區??吹竭@里,有人或許發現這個MPU配置只是個粗線條的配置,重點對外部存儲區域做了大致的初始背景配置,即配置為Strongly Ordered屬性。

在實際應用中,開發者往往會根據實際情況針對外部存儲器做進一步的MPU配置。當我們閱讀STM32F7或 STM32H7系例相關應用代碼時,我們會發現,除了看到開篇提到的的針對整個4G空間的MPU初始配置外,還有諸多針對外部存儲區的特定MPU配置,比方下面這些就有針對外部SDRAM、QSPI、FMC控制的存儲設備的MPU配置。主要就Region編號、起始地址、空間大小、Cacheable、Bufferable、Shareable等屬性進行配置?!鞠聢D中打紅色三角形的是針對整個4GB空間的MPU初始配置,其它打勾的是針對特定存儲空間的MPU配置,該區間的MPU屬性與4GB空間中重合部分的初始配置不一致時以新配置為準。】

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

圖8、STM32H7產品的MPU配置代碼示例

顯然,上面SDRAMQSPIFMC的存儲區都落在圖7中的綠色區域空間,因為此時的特定配置所用MPU區編號都要高于那個粗線條配置的區編號0。對于MPU配置而言,重疊區域的MPU配置以更大區編號的配置為準。以圖8中64KB的SDRAM配置來看,此時從0xC0000000開始的64KB區域不再適用Strongly Ordered存儲屬性,而適用Cacheable 、Write Through存儲屬性。

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

要解釋這個問題,就涉及到另外一個話題,即Cortex M7內核的試探性訪問【關于試探性訪問,這里不做過多解讀,有興趣查看相關內核手冊】。當內核處理器因發生試探性訪問去訪問一個不存在的存儲設備時往往會導致訪問死鎖,顯然這不是我們所希望的。

不過,試探性訪問可以被阻止,即當相應存儲空間配置為Device或Strongly Ordered屬性時,是不會發生試探性訪問的。

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

結合下圖看看,黃色區域為用戶根據實際SDRAM容量更新過的MPU配置,綠色部分為事先配置的Strongly Order屬性,以阻止處理器針對綠色區域進行試探性訪問。

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

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

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

或許有人發現即使不要那段針對4GB空間的MPU初始配置代碼,似乎也沒遇到啥問題。這也正常。因為你即使外擴了存儲單元,并非一定會因為試探性訪問導致異常。比方你外擴了32MB的存儲單元,未必就一定會要用到最后一個位置,說不定還剩余很多,遠不至于用到最后邊界而讓CPU試探到不存在存儲器的空間。但是事先做那段初始配置,對系統是一個很好的未雨綢繆。就好像河邊安置防護欄一樣,沒有,也不至于天天怎么樣;有,肯定要安全保險得多。

3. 問題小結

本篇內容主要涉及內核MPU配置方面的東西,重點針對客戶的疑問做了些解答,對MPU配置中的子區概念做了較為詳細的解讀,以供參考。

完整內容請點擊“閱讀原文”下載原文檔。

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

長按掃碼關注公眾號

更多資訊,盡在STM32

點擊“閱讀原文”,可下載原文檔


原文標題:應用筆記 | MPU 子區話題

文章出處:【微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6037

    文章

    44569

    瀏覽量

    636213
  • STM32
    +關注

    關注

    2270

    文章

    10906

    瀏覽量

    356484

原文標題:應用筆記 | MPU 子區話題

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    S32K3系列汽車級MCU應用筆記

    電子發燒友網站提供《S32K3系列汽車級MCU應用筆記.docx》資料免費下載
    發表于 12-30 15:43 ?0次下載

    S32K3xxICU應用筆記

    S32K3xxICU應用筆記
    發表于 12-30 15:38 ?0次下載

    用筆記1604:去補償運算放大器

    電子發燒友網站提供《應用筆記1604:去補償運算放大器.pdf》資料免費下載
    發表于 09-29 10:30 ?0次下載
    應<b class='flag-5'>用筆記</b>1604:去補償運算放大器

    TPS6598x沒電電池應用筆記

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

    TLC3702 TLC3704系列應用筆記

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

    芯海CS32F0XXTIMER外設模塊應用筆記

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

    芯海CS32F0XXADC外設模塊應用筆記

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

    芯海應用筆記:通用 MCU IAR 開發指南

    本應用筆記旨在幫助指導用戶針對芯海通用 MCU 基于 IAR 環境的快速開發,幫助用戶快速建立應用工程。芯海科技通用 MCU 提供的 pack 開發包都是僅支持芯海 CSU、MDK 或 IAR 通用
    發表于 05-16 11:50

    芯海應用筆記:通用 MCU 基于 GCC 編譯開發應用

    本應用筆記旨在幫助指導用戶針對芯海通用 MCU 基于 GCC 環境的快速開發。芯??萍纪ㄓ?MCU 提供的 pack 開發包都是僅支持芯海 CSU、MDK 或 IAR 通用集成的 IDE 工具,如果
    發表于 05-16 11:47

    芯海通用 MCU 應用筆記 :CS32F103 系列 MCU IAP 升級指南

    本應用筆記旨在幫助指導用戶針對芯海 CORTEX-M3 MCU CS32F103 系列單片機 IAP 應用的快速開發。本應用筆記實現了 CAN 和 USART 兩種接口方式來開發 IAP 應用,協議
    發表于 05-16 11:40

    芯??萍紤?b class='flag-5'>用筆記:CS32F0XX TIMER外設模塊指導

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

    芯海應用筆記:CS32F0XX ADC外設模塊指導

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

    芯海CSU18P88應用筆記

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

    CSU18MX86應用筆記

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

    Microchip TCP/IP 協議棧應用筆記

    電子發燒友網站提供《Microchip TCP/IP 協議棧應用筆記.pdf》資料免費下載
    發表于 04-17 14:16 ?1次下載
    主站蜘蛛池模板: 久久精品影视| 小柔的性放荡羞辱日记动漫| 亚洲精品一区二区在线看片| 国产色婷亚洲99精品AV| 亚洲精品久久久久久蜜臀 | 高h np 强j 乱l 双性| 吻嘴胸全身好爽床大全| 黄色小说在线| 99国产视频| 午夜在线观看免费观看 视频| 精品高清国产a毛片| jealousvue成熟40岁| 我不卡影院手机在线观看| 久久精品综合电影| 成人影片大全| 伊人无码高清| 色狠狠色狠狠综合天天| 九九久久国产| 国产ZZJJZZJJ视频全免费| 伊人影院亚洲| 天美麻豆成人AV精品视频| 快播成电影人网址| 国产成人v视频在线观看| 曰本少妇高潮久久久久久| 色婷婷综合久久久中文字幕 | 国产99久久九九免费精品无码| 亚洲日韩视频免费观看| 秋霞电影网视频一区二区三区| 好色女博士| 高H黄暴NP辣H一女多男| 找老女人泻火对白自拍| 午夜福到在线2019| 欧美18videosex初次| 精品AV无码一二三区视频| 国产成人小视频在线观看| 99久久99久久久99精品齐| 亚洲人视频在线观看| 世界上第一个得抑郁症的人是谁| 狼人大香伊蕉国产WWW亚洲| 国产精品无码亚洲区艳妇| porono日本xxx|