版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
(MPU_RASR)配置成某一個(gè)值,在特權(quán)(Privilegedpermissions)和用戶(hù)模式(Unprivilegedpermissions)的訪(fǎng)問(wèn)許可是不同解這些名詞,并討論在STM32MCU代碼中如何使用內(nèi)存保護(hù)單元MPU的特權(quán)與用戶(hù)模式。MPU(MemoryProtection用來(lái)設(shè)置內(nèi)存屬性的MPU_RASR寄存器字段描述如下:位26:數(shù)據(jù)訪(fǎng)問(wèn)許可(RO,RW或者無(wú)權(quán)限21:SCB155AP[2MPU(MPU_RASR)配置成某一個(gè)值,在特權(quán)(Privilegedpermissions)和用戶(hù)模式(Unprivilegedpermissions)的訪(fǎng)問(wèn)許可是不同STM32MCUMPU的特權(quán)與用戶(hù)模式。MPU(MemoryProtectionSRAM區(qū)域定義成不可執(zhí)行,來(lái)阻止代碼注入型攻擊。也可以用來(lái)改變內(nèi)存的性質(zhì),例如是否允許緩存(Cache)。MPU_RASR寄存器字段描述如下:位26:數(shù)據(jù)訪(fǎng)問(wèn)許可(RO,RW或者無(wú)權(quán)限21:SCB155AP[2代碼擁有所有的訪(fǎng)問(wèn)許可;而代碼運(yùn)行在用戶(hù)模式,則訪(fǎng)問(wèn)權(quán)限受限制。限制包括在系統(tǒng)設(shè)計(jì)階段就定義的可運(yùn)行指令限制,PU3開(kāi)發(fā)板:STM32L476RGAP[2CorexPUPU代碼擁有所有的訪(fǎng)問(wèn)許可;而代碼運(yùn)行在用戶(hù)模式,則訪(fǎng)問(wèn)權(quán)限受限制。限制包括在系統(tǒng)設(shè)計(jì)階段就定義的可運(yùn)行指令限制,PU單元?jiǎng)討B(tài)所定義的內(nèi)存訪(fǎng)問(wèn)規(guī)則。圖表3在代碼中結(jié)合特權(quán)與用戶(hù)模式使用開(kāi)發(fā)板:STM32L476RGAP[2,和復(fù)制CORTEXM_MPU\Src\stm32_mpu.c到CORTEXM_ModePrivilege\Src目錄下STM32CubeSTM32Cube_FW_L4_V1.6.0可以發(fā)現(xiàn),固件庫(kù)已分別實(shí)現(xiàn)了特權(quán)模式與用戶(hù)模式的切換(CORTEXM_ModePrivilege)MPU的配置(CORTEXM_MPU)。STM32MPU功能。CORTEXM_MPU\Src\stm32_mpu.cCORTEXM_ModePrivilege\Src目錄下在IAR下只需添加C文件。/*/*#include#include"stm32_mpu.h"/**@addtogroup*/**@addtogroup*/*GettheThreadmodestackused*/if((/*GettheThreadmodestackused*/if((get_CONTROL()&0x02)==SP_MAIN){/*Mainstackisusedasthecurrentstack*/CurrentStack=SP_MAIN;}{/*Processstackisusedasthecurrentstack*/CurrentStack=SP_PROCESS;/*Getprocessstackpointervalue*/PSPValue=get_PSP();}MPU_Config();/*added*/CORTEXM_ModePrivilegestm32_mpu.cstm32_mpu.h添加到工程文件中。IARKeil略有不同,IARC文件。/*/*#include#include"stm32_mpu.h"/**@addtogroup*/**@addtogroup*/*/*GettheThreadmodestackused*/if((get_CONTROL()&0x02)==SP_MAIN){/*Mainstackisusedasthecurrentstack*/CurrentStack=SP_MAIN;}{/*Processstackisusedasthecurrentstack*/CurrentStack=SP_PROCESS;/*Getprocessstackpointervalue*/PSPValue=get_PSP();}MPU_Config();/*added*/MPU_AccessPermConfig();/*added*/voidvoid{/*ConfigureregionforPrivilegedReadOnlyArrayasREGIONN?,32byteandRonlyinprivilegedmode*//*DisableMPU*/voidvoid{/*ConfigureregionforPrivilegedReadOnlyArrayasREGIONN?,32byteandRonlyinprivilegedmode*//*DisableMPU*/MPU_InitStruct.Enable=MPU_REGION_ENABLE;MPU_InitStruct.BaseAddressMPU_InitStruct.Enable=MPU_REGION_ENABLE;MPU_InitStruct.BaseAddress=ARRAY_ADDRESS_START;MPU_InitStruct.Size=ARRAY_SIZE;MPU_InitStruct.AccessPermission=portMPU_REGION_PRIVILEGED_READ_WRITE;MPU_InitStruct.IsBufferable=MPU_ACCESS_NOT_BUFFERABLE;MPU_InitStruct.IsCacheable=MPU_ACCESS_NOT_CACHEABLE;MPU_InitStruct.IsShareable=MPU_ACCESS_NOT_SHAREABLE;MPU_InitStruct.Number=ARRAY_REGION_NUMBER;MPU_InitStruct.TypeExtField=MPU_TEX_LEVEL0;MPU_InitStruct.SubRegionDisable=0x00;MPU_InitStruct.DisableExec=MPU_INSTRUCTION_ACCESS_ENABLE;/*EnableMPU(anyaccessnotcoveredbyanyenabledregionwillcauseafault)*//*ReadfromPrivilegedReadOnlyArray.Thiswillnotgenerateerror*/{PrivilegedReadOnlyArray[0]=}/*UncommentthefollowinglinetowritetoPrivilegedReadOnlyArray.Thiswillgenerateerror*/PrivilegedReadOnlyArray[0]=}/*Switch/*SwitchThreadmodefromprivilegedto /*Threadmodehasunprivilegedaccessset_CONTROL(THREAD_MODE_UNPRIVILEGED|/*ExecuteISBinstructiontoflushpipelineasrecommendedbyArm/*UnprivilegedaccessmainlyaffectabilityUseornotusecertaininstructionssuchasMSRAccessSystemControlSpace(SCS)registerssuchasNVICandSysTick/*CheckThreadmodeprivilegestatusif((get_CONTROL()&0x01)=={/*Threadmodehasprivilegedaccess*/ThreadMode=THREAD_MODE_PRIVILEGED;}{MPU_InitStruct.Enable=MPU_REGION_ENABLE;MPU_InitStruct.BaseAddressMPU_InitStruct.Enable=MPU_REGION_ENABLE;MPU_InitStruct.BaseAddress=ARRAY_ADDRESS_START;MPU_InitStruct.Size=ARRAY_SIZE;MPU_InitStruct.AccessPermission=portMPU_REGION_PRIVILEGED_READ_WRITE;MPU_InitStruct.IsBufferable=MPU_ACCESS_NOT_BUFFERABLE;MPU_InitStruct.IsCacheable=MPU_ACCESS_NOT_CACHEABLE;MPU_InitStruct.IsShareable=MPU_ACCESS_NOT_SHAREABLE;MPU_InitStruct.Number=ARRAY_REGION_NUMBER;MPU_InitStruct.TypeExtField=MPU_TEX_LEVEL0;MPU_InitStruct.SubRegionDisable=0x00;MPU_InitStruct.DisableExec=MPU_INSTRUCTION_ACCESS_ENABLE;/*EnableMPU(anyaccessnotcoveredbyanyenabledregionwillcauseafault)*//*ReadfromPrivilegedReadOnlyArray.Thiswillnotgenerateerror*/{PrivilegedReadOnlyArray[0]=}/*UncommentthefollowinglinetowritetoPrivilegedReadOnlyArray.Thiswillgenerateerror*/PrivilegedReadOnlyArray[0]=}/*Switch/*SwitchThreadmodefromprivilegedto /*Threadmodehasunprivilegedaccessset_CONTROL(THREAD_MODE_UNPRIVILEGED|/*ExecuteISBinstructiontoflushpipelineasrecommendedbyArm/*UnprivilegedaccessmainlyaffectabilityUseornotusecertaininstructionssuchasMSRAccessSystemControlSpace(SCS)registerssuchasNVICandSysTick/*CheckThreadmodeprivilegestatusif((get_CONTROL()&0x01)=={/*Threadmodehasprivilegedaccess*/ThreadMode=THREAD_MODE_PRIVILEGED;}{/*/*Threadmodehasunprivilegedaccess*/ThreadMode=THREAD_MODE_UNPRIVILEGED;}{PrivilegedReadOnlyArray[0]=}PrivilegedReadOnlyArray[0]=/*/*SwitchThreadmodefromprivilegedto /*Threadmodehasunprivilegedaccessset_CONTROL(THREAD_MODE_UNPRIVILEGED|/*/*Generateasystemcallexception,andintheISRswitchbackThreadmodetoprivileged*/@briefThisfunctionhandlesSVCall@param@retvalvoid{/*SwitchbackThreadmodetoprivilegedset_CONTROL(THREAD_MODE_PRIVILEGED|/*ExecuteISBinstructiontoflushpipelineasrecommendedbyArm}@briefThisfunctionhandlesMemoryManage@param@retvalvoid{/*GotoinfiniteloopwhenMemoryManageexceptionoccurs*/while(1)/*/*Threadmodehasunprivilegedaccess*/ThreadMode=THREAD_MODE_UNPRIVILEGED;}{PrivilegedReadOnlyArray[0]=}PrivilegedReadOnlyArray[0]=/*/*SwitchThreadmodefromprivilegedto /*Threadmodehasunprivilegedaccessset_CONTROL(THREAD_MODE_UNPRIVILEGED|/*/*Generateasystemcallexception,andintheISRswitchbackThreadmodetoprivileged*/@briefThisfunct
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度“唐代書(shū)法與繪畫(huà)藝術(shù)品收藏與投資合同”3篇
- 2025年度體育賽事VI視覺(jué)形象合同3篇
- 2024簡(jiǎn)約合同封面圖片
- 2025年度文化旅游景區(qū)場(chǎng)地經(jīng)營(yíng)權(quán)出讓協(xié)議2篇
- 2025年度城市綜合體拆遷補(bǔ)償與開(kāi)發(fā)合同4篇
- 2025便利店加盟店品牌保護(hù)及知識(shí)產(chǎn)權(quán)合同范本3篇
- 2024年03月廣東興業(yè)銀行廣州分行春季校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 2024版股權(quán)轉(zhuǎn)讓委托的協(xié)議書(shū)
- 專(zhuān)業(yè)會(huì)計(jì)咨詢(xún)與服務(wù)協(xié)議精簡(jiǎn)版版B版
- 2025年二零二五食堂工作人員聘用與食品安全培訓(xùn)及考核合同
- GB/T 14040-2007預(yù)應(yīng)力混凝土空心板
- 帶狀皰疹護(hù)理查房課件整理
- 奧氏體型不銹鋼-敏化處理
- 作物栽培學(xué)課件棉花
- 交通信號(hào)控制系統(tǒng)檢驗(yàn)批質(zhì)量驗(yàn)收記錄表
- 弱電施工驗(yàn)收表模板
- 絕對(duì)成交課件
- 探究基坑PC工法組合鋼管樁關(guān)鍵施工技術(shù)
- 國(guó)名、語(yǔ)言、人民、首都英文-及各地區(qū)國(guó)家英文名
- API SPEC 5DP-2020鉆桿規(guī)范
- 組合式塔吊基礎(chǔ)施工專(zhuān)項(xiàng)方案(117頁(yè))
評(píng)論
0/150
提交評(píng)論