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

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

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

3天內不再提示

一段有關MPU配置代碼的幾個小疑問

茶話MCU ? 來源:茶話MCU ? 作者:茶話MCU ? 2022-12-05 10:33 ? 次閱讀

當我們閱讀一些STM32F7或STM32H7系列芯片例程,或者基于這兩類芯片通過cubeMx進行配置并用到MPU功能時,往往會在代碼里看到下面這段MPU配置。

ab382200-73bf-11ed-8abf-dac502259ad0.png

對這段代碼可能有人有些疑問,這里重點一起聊聊其中的3個,供參考。

第一個疑問,那行做賦值0x87的代碼是什么意思?

第二個疑問,這段代碼的注釋【綠色】是說將未定義的區域配置為StronglyOrdered存儲屬性,這個未定義到底如何理解?從代碼看,這里清晰地對從0開始的整個4G空間做了配置,未定義區域到底指的哪里?

第三個疑問,這段代碼往往并不是開發者自己配置的。如果使用CubeMx進行配置它會自動給我們加上這段,為什么要加這段?很多時候經測試,即使沒這段代碼似乎也沒有什么問題。

這幾個問題,涉及到MPU和CortexM7內核芯片試探性訪問的知識。我盡量通俗地加以介紹,知曉怎么回事即可。

我們知道,通過MPU可以配置特定地址空間的存儲屬性,給CPU約定訪問權限。我們在對某塊地址空間做MPU配置時,通常需要設置起始地址、空間大小、Cacheable、Bufferable、Shareable、子區屬性、區塊編號等。這里的地址空間,英文用Region來特指,后面都使用該詞。

實際應用中我們往往會針對不同的Region做MPU配置,在做不同Region的MPU設置時,可能出現地址空間重疊的情況。比方像下面64KB空間內做了3個不同Region的MPU配置,而且發生了不同Region的地址重疊。

ab702c86-73bf-11ed-8abf-dac502259ad0.png

這個時候,對于地址重疊空間的MPU屬性由Region編號大的決定。結合上圖,N+2編號Region的MPU屬性優先級最高,Region N的最低。

剛才我在前面提到了子區,它是什么意思呢?

子區也是個特定概念,英文用SubRegion。所謂Subregion,當我們對某地址空間不小于256B的Region進行MPU配置時,可以把該Region等分為8個子區【Subregion】,并把當前Region的MPU屬性針對部分子區進行排除性或說例外性設置。啥意思呢?比方說,本來當前Region經MPU配置后為WriteThough支持共享的存儲屬性,同時呢,又將其中的2個子區做排除性設置,即這2個子區不適用當前的MPU配置。好比當前舉國抗疫防新冠,要求全面強制核酸,但同時又可以做例外說明,那些基本足不出戶的老人或小孩不適用該要求。

在MPU配置寄存器MPU_RASR里有個8位字段SRD專門用來配置子區的排除屬性。每1位對應一個子區,高位對應高地址子區,低位對應低地址子區。某位為0表示該子區使用當前MPU配置,為1表示該子區不適用當前配置,即被排除在外?!靖嗉毠澘梢詤⒖枷聢D】

ab85f160-73bf-11ed-8abf-dac502259ad0.png

不妨舉例說一下,假設我們選擇了某64KB區域進行MPU設置,其中有2個SubRegion被做了MPU排除處理,即其中2個8KB空間不適用當前的MPU配置。如下圖所示:

aba3363a-73bf-11ed-8abf-dac502259ad0.png

此時,對應到MPU配置寄存器MPU_RASR里的SRD字段的內容就是0x48。

聊到這里,我們就可以回答開篇的部分疑問了。

ab382200-73bf-11ed-8abf-dac502259ad0.png

從上面這段代碼不難看出,首先將從0開始的4GB空間做了MPU配置,Region編號為0,最終被配置為Strongly Ordered存儲屬性。那句賦值0x87的代碼則是進一步針對當前Region里的SubRegion做屬性排除設置。這里的0x87就是給前面提到的給SRD字段的賦值?!具@里每個子區空間大小為512MB】

abdfde78-73bf-11ed-8abf-dac502259ad0.png

也就是說,這4GB空間中有4個子區不適用目前配置的MPU屬性,即下圖中幾個紅色方框內區域。

abf4c16c-73bf-11ed-8abf-dac502259ad0.png

換句話說,這里并沒有真正針對整個4GB空間做MPU配置,實際上只對上圖中的綠色區域做了StronglyOrder的存儲屬性設置。然而,代碼的注釋又說是針對未定義區域做MPU配置,怎么理解未定義區域呢?

這里說的未定義區域到底是上圖中紅色區域還是綠色區域呢?

顯然不是指紅色區域,因為這里特意對紅色區域做了MPU屬性排除處理,即當前MPU配置根本就不適用它。那是指綠色區域?似乎也不對!因為綠色區域的MPU配置不是很清晰嗎?Region編號、地址空間、訪問屬性等一應俱全。何來未定義呢?

我們可以進一步了解到,上圖中綠色區域對應的是外部存儲設備的地址空間。如果我們需要用到外部存儲設備的話,往往還會針對外擴的存儲單元再做MPU配置。比方我們基于STM32H7芯片外擴了一個32MB的SDRAM,然后做了如下的MPU配置。

ac12dcec-73bf-11ed-8abf-dac502259ad0.png

照樣,先對整個4GB空間做了MPU初始配置,即前面一直在解說的內容。然后針對外擴的32MB的SDRAM做了特定MPU配置,此時的Region標號為1,訪問屬性為Write Through。此塊Region空間屬于前面初始配置中外部存儲空間的一部分,即出現不同Region地址重疊,所以這塊SDRAM所在Region的MPU訪問屬性就是Write Through,而不再是一開始配置的Strongly Ordered屬性了。見下圖中綠色區域中那部分黃色方塊。

ac4f7c10-73bf-11ed-8abf-dac502259ad0.png

當然,如果說你還外擴了其它的存儲單元,比方擴個QSPI什么的,如果MPU屬性依然不同于Strongly Ordered、且Region編號大于0,更多綠色區域將被新的黃色區域替換。比方變成下面圖示的樣子。

ac7a9fd0-73bf-11ed-8abf-dac502259ad0.png

也就是說,注釋代碼里提到的未定義區域,是指初始定義出來的綠色區域中沒有被用戶的實際外部存儲器所占用的剩余空間。即上面圖中摳除黃色區域以后剩下的綠色區域。

這里又衍生個問題,為什么要這樣做呢?

這個問題又涉及到M7內核芯片的試探性訪問特性。試探性訪問可以提升芯片的性能,但有時可能也會導致些問題。比方,由于試探性訪問,在CPU訪問外部存儲器時,可能發生越界訪問。如果說它訪問到一個本不存在存儲設備的地址時,可能發生鎖死異常。結合上面圖形,黃色地址區域是實實在在的外部存儲器件所占用的空間,如果因為試探性訪問可能越界訪問不存在物理存儲單元的綠色區域而導致麻煩。

不過,由于CPU不會針對配置為Device 或Strongly Ordered存儲屬性的地址空間進行試探性訪問。為了防止上面提到的問題,于是就有了前面談到的一上來就把所有用于外部訪問的存儲空間配置為StronglyOrdered屬性,顯然這個配置是個粗框架性的。用戶具體使用時根據實際存儲器的特性、容量等再配置特定的MPU屬性并覆蓋原來初始設置,其它未用區域依然保持StronglyOrdered屬性,正是為了防止在沒有放置實際存儲器的地方發生試探性訪問。

最后一個問題,有人發現即使不要那段針對4GB空間的MPU初始代碼,似乎也沒遇到啥問題。

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

幾個小疑問,本以為可以很快寫完,不禁啰嗦了這么久,就此打住。祝君好運!

審核編輯:湯梓紅

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

    關注

    68

    文章

    10854

    瀏覽量

    211578
  • MPU
    MPU
    +關注

    關注

    0

    文章

    357

    瀏覽量

    48775
  • STM32F7
    +關注

    關注

    1

    文章

    48

    瀏覽量

    8967
  • CubeMx
    +關注

    關注

    0

    文章

    30

    瀏覽量

    1340

原文標題:一段有關MPU配置代碼的幾個小疑問

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    一段C代碼關聯的知識點

    之前有位網友在交流群里發了一段代碼的截圖,我覺得很有意思,在此分享下。
    發表于 08-30 10:42 ?445次閱讀
    <b class='flag-5'>一段</b>C<b class='flag-5'>代碼</b>關聯的知識點

    MPU6050勻速轉動一段時間后,偏航角不變怎么解決?

    顯示之前的數據(看著像數據滯后),然后最后恢復正常,所以目前問題就是機器人勻速轉動一段時間后就會偏航角輸出不變,請問各位有遇到過嗎,怎么解決的。
    發表于 04-09 08:24

    一段人體紅外感應設計代碼!

    我是初學者,對著方面不太懂,之前自己寫了一段,自己感覺沒問題,結果下載到單片機上九出問題了,謝謝大家的幫助,最好是寫一段用人體紅外感應模塊控制個LED的代碼!謝謝了!
    發表于 03-09 15:19

    敲了一段verilog代碼,找到了努力的方向。

    的日子,被考研逼著去學習泰勒柯西了,之前上課就沒好好聽,看個視頻理解的都很費勁。敲了一段verilog代碼,立刻有種找回自我的感覺,很提神,這幾天看各種考研視頻看得昏昏欲睡。推薦各位燒友們在人生迷茫的時候敲一段
    發表于 02-28 21:18

    labview 如何調用HTML中的一段JS代碼

    labview 如何調用HTML中的一段JS代碼,紅色字體怎么轉成labview代碼?CComQIPtr spDoc = m_web.get_Document
    發表于 04-01 15:21

    檢測一段文本是否為全中文

    易語言是門以中文作為程序代碼編程語言學習例程:易語言-檢測一段文本是否為全中文
    發表于 06-06 17:01 ?4次下載

    基于8051的Proteus仿真-播放一段音樂

    基于8051的Proteus仿真-播放一段音樂
    發表于 09-01 23:32 ?8次下載

    基于8051的Proteus仿真-演奏一段音階

    基于8051的Proteus仿真-演奏一段音階
    發表于 09-01 23:37 ?33次下載

    瑟瑟發抖:深度學習可以通過一段代碼找出代碼作者

    最近又有兩個人,Caliskan和Greenstadt(名字不重要,姑且就稱大C和大G)突然站出來說代碼也類似!每個人都有自己的代碼風格,深度學習是可以追蹤出一段代碼的原作者的。
    的頭像 發表于 08-14 17:45 ?4505次閱讀

    Arduino 接MPU6050 9250使用IIC通訊,輸出數據一段時間后死機卡死的問題解決

    Arduino 接MPU6050 9250使用IIC通訊,輸出數據一段時間后死機卡死的問題解決
    發表于 12-06 15:06 ?24次下載
    Arduino 接<b class='flag-5'>MPU</b>6050 9250使用IIC通訊,輸出數據<b class='flag-5'>一段</b>時間后死機卡死的問題解決

    STM32之FreeRTOS:() 中斷配置和臨界的使用

    STM32之FreeRTOS:() 中斷配置和臨界的使用文章目錄STM32之FreeRTOS:() 中斷配置和臨界
    發表于 01-14 15:43 ?3次下載
    STM32之FreeRTOS:(<b class='flag-5'>一</b>) 中斷<b class='flag-5'>配置</b>和臨界<b class='flag-5'>段</b>的使用

    真是一段漫長的旅程:從阿基米德到可重新配置儀表板

    真是一段漫長的旅程:從阿基米德到可重新配置儀表板
    發表于 11-03 08:04 ?0次下載
    真是<b class='flag-5'>一段</b>漫長的旅程:從阿基米德到可重新<b class='flag-5'>配置</b>儀表板

    基于AT89C51單片機播放一段音樂仿真及代碼

    基于AT89C51單片機播放一段音樂仿真及代碼
    發表于 05-05 10:33 ?1次下載

    基于AT89C51單片機演奏一段音階仿真及代碼

    基于AT89C51單片機演奏一段音階仿真及代碼
    發表于 05-05 10:09 ?0次下載

    devc怎么注釋掉一段代碼

    在DevC中,要注釋掉一段代碼,你可以使用注釋符號來標記這段代碼。注釋符號的作用是告訴編譯器不要編譯這些代碼,而是將其視為注釋,這樣可以方便開發人員在
    的頭像 發表于 11-22 10:23 ?2480次閱讀
    主站蜘蛛池模板: 在线国内自拍精品视频| 亚洲第一页视频| 涩涩999| 色综合久久88色综合天天提莫| 婷婷开心激情综合五月天| 小莹的性荡生活45章| 亚洲欧洲日韩视频在钱| 中国比基尼美女| hdsex老太婆70| 国产AV一区二区三区传媒| 国产女人喷潮视频免费| 久99re视频9在线观看| 免费完整版观看| 日韩亚洲国产中文字幕欧美| 亚洲 欧美 国产 综合 播放| 在线播放一区二区精品产| 99亚洲精品自拍AV成人软件| 囯产精品一品二区三区| 黄色a三级免费看| 蜜臀AV999无码精品国产| 日韩少妇爆乳无码专区| 亚洲精品乱码久久久久久直播| 中文在线观看永久免费| 成人在线免费看片| 混乱家庭电影完整版在线看| 欧美A级肉欲大片XXX| 无人区在线日本高清免费| 在线二区 中文 无码| 成人a毛片久久免费播放| 娇妻让壮男弄的流白浆| 欧美影院在线观看完整版 mp4| 性生片30分钟| 99久久免费国产精品特黄| 国产午夜人做人免费视频中文| 美国z0069| 亚州免费一级毛片| 99久久蜜臀亚洲AV无码精品| 韩国精品无码少妇在线观看网站| 中文在线观看| 国产a级午夜毛片| 老妇高潮潮喷到猛进猛出|