




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
(MPU_RASR)配置成某一個(gè)值,在特權(quán)(Privilegedpermissions)和用戶模式(Unprivilegedpermissions)的訪問許可是不同解這些名詞,并討論在STM32MCU代碼中如何使用內(nèi)存保護(hù)單元MPU的特權(quán)與用戶模式。MPU(MemoryProtection用來設(shè)置內(nèi)存屬性的MPU_RASR寄存器字段描述如下:位26:數(shù)據(jù)訪問許可(RO,RW或者無權(quán)限21:SCB155AP[2MPU(MPU_RASR)配置成某一個(gè)值,在特權(quán)(Privilegedpermissions)和用戶模式(Unprivilegedpermissions)的訪問許可是不同STM32MCUMPU的特權(quán)與用戶模式。MPU(MemoryProtectionSRAM區(qū)域定義成不可執(zhí)行,來阻止代碼注入型攻擊。也可以用來改變內(nèi)存的性質(zhì),例如是否允許緩存(Cache)。MPU_RASR寄存器字段描述如下:位26:數(shù)據(jù)訪問許可(RO,RW或者無權(quán)限21:SCB155AP[2代碼擁有所有的訪問許可;而代碼運(yùn)行在用戶模式,則訪問權(quán)限受限制。限制包括在系統(tǒng)設(shè)計(jì)階段就定義的可運(yùn)行指令限制,PU3開發(fā)板:STM32L476RGAP[2CorexPUPU代碼擁有所有的訪問許可;而代碼運(yùn)行在用戶模式,則訪問權(quán)限受限制。限制包括在系統(tǒng)設(shè)計(jì)階段就定義的可運(yùn)行指令限制,PU單元?jiǎng)討B(tài)所定義的內(nèi)存訪問規(guī)則。圖表3在代碼中結(jié)合特權(quán)與用戶模式使用開發(fā)板:STM32L476RGAP[2,和復(fù)制CORTEXM_MPU\Src\stm32_mpu.c到CORTEXM_ModePrivilege\Src目錄下STM32CubeSTM32Cube_FW_L4_V1.6.0可以發(fā)現(xiàn),固件庫已分別實(shí)現(xiàn)了特權(quán)模式與用戶模式的切換(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 書籍設(shè)備采購合同范本
- 課程建設(shè)研究課題申報(bào)書
- 企業(yè)廠區(qū)租賃合同范本
- 小學(xué)數(shù)學(xué)思維課題申報(bào)書
- 共建工廠合作合同范例
- 勞動(dòng)合同范本 計(jì)時(shí)
- 農(nóng)機(jī)隊(duì)耕種合同范本
- 印譜制作合同范例
- 體育產(chǎn)業(yè)趨勢分析與未來市場展望
- 2025年黑龍江農(nóng)業(yè)工程職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案1套
- 《勞動(dòng)法常識(shí)(第3版)》中職全套教學(xué)課件
- 2025年勞動(dòng)合同延期補(bǔ)充協(xié)議模板
- 2025年日歷表(含農(nóng)歷、節(jié)假日、記事、A4打印版)
- 《反家庭暴力》課件
- 二零二五年度房地產(chǎn)預(yù)售合同協(xié)議4篇
- 建(構(gòu))筑物消防員初級(jí)技能培訓(xùn)課件
- 2025-2030年中國天線行業(yè)市場需求狀況規(guī)劃研究報(bào)告
- 2024年南京旅游職業(yè)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 如何提升自我管理能力
- 2025年潛江市城市建設(shè)發(fā)展集團(tuán)招聘工作人員【52人】高頻重點(diǎn)提升(共500題)附帶答案詳解
評(píng)論
0/150
提交評(píng)論