欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

一段有關(guān)MPU配置代碼的幾個(gè)小疑問(wèn)

茶話MCU ? 來(lái)源:茶話MCU ? 作者:茶話MCU ? 2022-12-05 10:33 ? 次閱讀

當(dāng)我們閱讀一些STM32F7或STM32H7系列芯片例程,或者基于這兩類芯片通過(guò)cubeMx進(jìn)行配置并用到MPU功能時(shí),往往會(huì)在代碼里看到下面這段MPU配置。

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

對(duì)這段代碼可能有人有些疑問(wèn),這里重點(diǎn)一起聊聊其中的3個(gè),供參考。

第一個(gè)疑問(wèn),那行做賦值0x87的代碼是什么意思?

第二個(gè)疑問(wèn),這段代碼的注釋【綠色】是說(shuō)將未定義的區(qū)域配置為StronglyOrdered存儲(chǔ)屬性,這個(gè)未定義到底如何理解?從代碼看,這里清晰地對(duì)從0開(kāi)始的整個(gè)4G空間做了配置,未定義區(qū)域到底指的哪里?

第三個(gè)疑問(wèn),這段代碼往往并不是開(kāi)發(fā)者自己配置的。如果使用CubeMx進(jìn)行配置它會(huì)自動(dòng)給我們加上這段,為什么要加這段?很多時(shí)候經(jīng)測(cè)試,即使沒(méi)這段代碼似乎也沒(méi)有什么問(wèn)題。

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

我們知道,通過(guò)MPU可以配置特定地址空間的存儲(chǔ)屬性,給CPU約定訪問(wèn)權(quán)限。我們?cè)趯?duì)某塊地址空間做MPU配置時(shí),通常需要設(shè)置起始地址、空間大小、Cacheable、Bufferable、Shareable、子區(qū)屬性、區(qū)塊編號(hào)等。這里的地址空間,英文用Region來(lái)特指,后面都使用該詞。

實(shí)際應(yīng)用中我們往往會(huì)針對(duì)不同的Region做MPU配置,在做不同Region的MPU設(shè)置時(shí),可能出現(xiàn)地址空間重疊的情況。比方像下面64KB空間內(nèi)做了3個(gè)不同Region的MPU配置,而且發(fā)生了不同Region的地址重疊。

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

這個(gè)時(shí)候,對(duì)于地址重疊空間的MPU屬性由Region編號(hào)大的決定。結(jié)合上圖,N+2編號(hào)Region的MPU屬性優(yōu)先級(jí)最高,Region N的最低。

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

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

在MPU配置寄存器MPU_RASR里有個(gè)8位字段SRD專門用來(lái)配置子區(qū)的排除屬性。每1位對(duì)應(yīng)一個(gè)子區(qū),高位對(duì)應(yīng)高地址子區(qū),低位對(duì)應(yīng)低地址子區(qū)。某位為0表示該子區(qū)使用當(dāng)前MPU配置,為1表示該子區(qū)不適用當(dāng)前配置,即被排除在外?!靖嗉?xì)節(jié)可以參考下圖】

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

不妨舉例說(shuō)一下,假設(shè)我們選擇了某64KB區(qū)域進(jìn)行MPU設(shè)置,其中有2個(gè)SubRegion被做了MPU排除處理,即其中2個(gè)8KB空間不適用當(dāng)前的MPU配置。如下圖所示:

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

此時(shí),對(duì)應(yīng)到MPU配置寄存器MPU_RASR里的SRD字段的內(nèi)容就是0x48。

聊到這里,我們就可以回答開(kāi)篇的部分疑問(wèn)了。

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

從上面這段代碼不難看出,首先將從0開(kāi)始的4GB空間做了MPU配置,Region編號(hào)為0,最終被配置為Strongly Ordered存儲(chǔ)屬性。那句賦值0x87的代碼則是進(jìn)一步針對(duì)當(dāng)前Region里的SubRegion做屬性排除設(shè)置。這里的0x87就是給前面提到的給SRD字段的賦值。【這里每個(gè)子區(qū)空間大小為512MB】

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

也就是說(shuō),這4GB空間中有4個(gè)子區(qū)不適用目前配置的MPU屬性,即下圖中幾個(gè)紅色方框內(nèi)區(qū)域。

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

換句話說(shuō),這里并沒(méi)有真正針對(duì)整個(gè)4GB空間做MPU配置,實(shí)際上只對(duì)上圖中的綠色區(qū)域做了StronglyOrder的存儲(chǔ)屬性設(shè)置。然而,代碼的注釋又說(shuō)是針對(duì)未定義區(qū)域做MPU配置,怎么理解未定義區(qū)域呢?

這里說(shuō)的未定義區(qū)域到底是上圖中紅色區(qū)域還是綠色區(qū)域呢?

顯然不是指紅色區(qū)域,因?yàn)檫@里特意對(duì)紅色區(qū)域做了MPU屬性排除處理,即當(dāng)前MPU配置根本就不適用它。那是指綠色區(qū)域?似乎也不對(duì)!因?yàn)榫G色區(qū)域的MPU配置不是很清晰嗎?Region編號(hào)、地址空間、訪問(wèn)屬性等一應(yīng)俱全。何來(lái)未定義呢?

我們可以進(jìn)一步了解到,上圖中綠色區(qū)域?qū)?yīng)的是外部存儲(chǔ)設(shè)備的地址空間。如果我們需要用到外部存儲(chǔ)設(shè)備的話,往往還會(huì)針對(duì)外擴(kuò)的存儲(chǔ)單元再做MPU配置。比方我們基于STM32H7芯片外擴(kuò)了一個(gè)32MB的SDRAM,然后做了如下的MPU配置。

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

照樣,先對(duì)整個(gè)4GB空間做了MPU初始配置,即前面一直在解說(shuō)的內(nèi)容。然后針對(duì)外擴(kuò)的32MB的SDRAM做了特定MPU配置,此時(shí)的Region標(biāo)號(hào)為1,訪問(wèn)屬性為Write Through。此塊Region空間屬于前面初始配置中外部存儲(chǔ)空間的一部分,即出現(xiàn)不同Region地址重疊,所以這塊SDRAM所在Region的MPU訪問(wèn)屬性就是Write Through,而不再是一開(kāi)始配置的Strongly Ordered屬性了。見(jiàn)下圖中綠色區(qū)域中那部分黃色方塊。

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

當(dāng)然,如果說(shuō)你還外擴(kuò)了其它的存儲(chǔ)單元,比方擴(kuò)個(gè)QSPI什么的,如果MPU屬性依然不同于Strongly Ordered、且Region編號(hào)大于0,更多綠色區(qū)域?qū)⒈恍碌狞S色區(qū)域替換。比方變成下面圖示的樣子。

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

也就是說(shuō),注釋代碼里提到的未定義區(qū)域,是指初始定義出來(lái)的綠色區(qū)域中沒(méi)有被用戶的實(shí)際外部存儲(chǔ)器所占用的剩余空間。即上面圖中摳除黃色區(qū)域以后剩下的綠色區(qū)域。

這里又衍生個(gè)問(wèn)題,為什么要這樣做呢?

這個(gè)問(wèn)題又涉及到M7內(nèi)核芯片的試探性訪問(wèn)特性。試探性訪問(wèn)可以提升芯片的性能,但有時(shí)可能也會(huì)導(dǎo)致些問(wèn)題。比方,由于試探性訪問(wèn),在CPU訪問(wèn)外部存儲(chǔ)器時(shí),可能發(fā)生越界訪問(wèn)。如果說(shuō)它訪問(wèn)到一個(gè)本不存在存儲(chǔ)設(shè)備的地址時(shí),可能發(fā)生鎖死異常。結(jié)合上面圖形,黃色地址區(qū)域是實(shí)實(shí)在在的外部存儲(chǔ)器件所占用的空間,如果因?yàn)樵囂叫栽L問(wèn)可能越界訪問(wèn)不存在物理存儲(chǔ)單元的綠色區(qū)域而導(dǎo)致麻煩。

不過(guò),由于CPU不會(huì)針對(duì)配置為Device 或Strongly Ordered存儲(chǔ)屬性的地址空間進(jìn)行試探性訪問(wèn)。為了防止上面提到的問(wèn)題,于是就有了前面談到的一上來(lái)就把所有用于外部訪問(wèn)的存儲(chǔ)空間配置為StronglyOrdered屬性,顯然這個(gè)配置是個(gè)粗框架性的。用戶具體使用時(shí)根據(jù)實(shí)際存儲(chǔ)器的特性、容量等再配置特定的MPU屬性并覆蓋原來(lái)初始設(shè)置,其它未用區(qū)域依然保持StronglyOrdered屬性,正是為了防止在沒(méi)有放置實(shí)際存儲(chǔ)器的地方發(fā)生試探性訪問(wèn)。

最后一個(gè)問(wèn)題,有人發(fā)現(xiàn)即使不要那段針對(duì)4GB空間的MPU初始代碼,似乎也沒(méi)遇到啥問(wèn)題。

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

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

審核編輯:湯梓紅

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

    關(guān)注

    68

    文章

    10908

    瀏覽量

    213087
  • MPU
    MPU
    +關(guān)注

    關(guān)注

    0

    文章

    375

    瀏覽量

    48972
  • STM32F7
    +關(guān)注

    關(guān)注

    1

    文章

    48

    瀏覽量

    9030
  • CubeMx
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    1386

原文標(biāo)題:一段有關(guān)MPU配置代碼的幾個(gè)小疑問(wèn)

文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一段C代碼關(guān)聯(lián)的知識(shí)點(diǎn)

    之前有位網(wǎng)友在交流群里發(fā)了一段代碼的截圖,我覺(jué)得很有意思,在此分享下。
    發(fā)表于 08-30 10:42 ?486次閱讀
    <b class='flag-5'>一段</b>C<b class='flag-5'>代碼</b>關(guān)聯(lián)的知識(shí)點(diǎn)

    MPU6050勻速轉(zhuǎn)動(dòng)一段時(shí)間后,偏航角不變?cè)趺唇鉀Q?

    顯示之前的數(shù)據(jù)(看著像數(shù)據(jù)滯后),然后最后恢復(fù)正常,所以目前問(wèn)題就是機(jī)器人勻速轉(zhuǎn)動(dòng)一段時(shí)間后就會(huì)偏航角輸出不變,請(qǐng)問(wèn)各位有遇到過(guò)嗎,怎么解決的。
    發(fā)表于 04-09 08:24

    一段人體紅外感應(yīng)設(shè)計(jì)代碼!

    我是初學(xué)者,對(duì)著方面不太懂,之前自己寫了一段,自己感覺(jué)沒(méi)問(wèn)題,結(jié)果下載到單片機(jī)上九出問(wèn)題了,謝謝大家的幫助,最好是寫一段用人體紅外感應(yīng)模塊控制個(gè)LED的代碼!謝謝了!
    發(fā)表于 03-09 15:19

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

    的日子,被考研逼著去學(xué)習(xí)泰勒柯西了,之前上課就沒(méi)好好聽(tīng),看個(gè)視頻理解的都很費(fèi)勁。敲了一段verilog代碼,立刻有種找回自我的感覺(jué),很提神,這幾天看各種考研視頻看得昏昏欲睡。推薦各位燒友們?cè)谌松悦5臅r(shí)候敲一段
    發(fā)表于 02-28 21:18

    labview 如何調(diào)用HTML中的一段JS代碼

    labview 如何調(diào)用HTML中的一段JS代碼,紅色字體怎么轉(zhuǎn)成labview代碼?CComQIPtr spDoc = m_web.get_Document
    發(fā)表于 04-01 15:21

    檢測(cè)一段文本是否為全中文

    易語(yǔ)言是門以中文作為程序代碼編程語(yǔ)言學(xué)習(xí)例程:易語(yǔ)言-檢測(cè)一段文本是否為全中文
    發(fā)表于 06-06 17:01 ?4次下載

    基于8051的Proteus仿真-播放一段音樂(lè)

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

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

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

    瑟瑟發(fā)抖:深度學(xué)習(xí)可以通過(guò)一段代碼找出代碼作者

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

    Arduino 接MPU6050 9250使用IIC通訊,輸出數(shù)據(jù)一段時(shí)間后死機(jī)卡死的問(wèn)題解決

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

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

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

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

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

    基于AT89C51單片機(jī)播放一段音樂(lè)仿真及代碼

    基于AT89C51單片機(jī)播放一段音樂(lè)仿真及代碼
    發(fā)表于 05-05 10:33 ?1次下載

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

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

    devc怎么注釋掉一段代碼

    在DevC中,要注釋掉一段代碼,你可以使用注釋符號(hào)來(lái)標(biāo)記這段代碼。注釋符號(hào)的作用是告訴編譯器不要編譯這些代碼,而是將其視為注釋,這樣可以方便開(kāi)發(fā)人員在
    的頭像 發(fā)表于 11-22 10:23 ?2681次閱讀