版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
(MPU_RASR)配置成某一個(gè)值,在特權(quán)(Privilegedpermissions)和用戶模式(Unprivilegedpermissions)的訪問(wèn)許可是不同解這些名詞,并討論在STM32MCU代碼中如何使用內(nèi)存保護(hù)單元MPU的特權(quán)與用戶模式。MPU(MemoryProtection用來(lái)設(shè)置內(nèi)存屬性的MPU_RASR寄存器字段描述如下:位26:數(shù)據(jù)訪問(wèn)許可(RO,RW或者無(wú)權(quán)限21:SCB155AP[2MPU(MPU_RASR)配置成某一個(gè)值,在特權(quán)(Privilegedpermissions)和用戶模式(Unprivilegedpermissions)的訪問(wèn)許可是不同STM32MCUMPU的特權(quán)與用戶模式。MPU(MemoryProtectionSRAM區(qū)域定義成不可執(zhí)行,來(lái)阻止代碼注入型攻擊。也可以用來(lái)改變內(nèi)存的性質(zhì),例如是否允許緩存(Cache)。MPU_RASR寄存器字段描述如下:位26:數(shù)據(jù)訪問(wèn)許可(RO,RW或者無(wú)權(quán)限21:SCB155AP[2代碼擁有所有的訪問(wèn)許可;而代碼運(yùn)行在用戶模式,則訪問(wèn)權(quán)限受限制。限制包括在系統(tǒng)設(shè)計(jì)階段就定義的可運(yùn)行指令限制,PU3開(kāi)發(fā)板:STM32L476RGAP[2CorexPUPU代碼擁有所有的訪問(wèn)許可;而代碼運(yùn)行在用戶模式,則訪問(wèn)權(quán)限受限制。限制包括在系統(tǒng)設(shè)計(jì)階段就定義的可運(yùn)行指令限制,PU單元?jiǎng)討B(tài)所定義的內(nèi)存訪問(wèn)規(guī)則。圖表3在代碼中結(jié)合特權(quán)與用戶模式使用開(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)模式與用戶模式的切換(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)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版?zhèn)€人二手車貸款擔(dān)保合同6篇
- 2025年度高速鐵路司機(jī)雇傭合同匯編3篇
- 2024政府間公共文化服務(wù)體系建設(shè)借款合同3篇
- 2024銷售提成協(xié)議合同范本
- 創(chuàng)新2024年度物聯(lián)網(wǎng)技術(shù)應(yīng)用開(kāi)發(fā)合同
- 2024年航空器材采購(gòu)與維修合同
- 2025年度藝術(shù)展覽攝影合同(藝術(shù)作品記錄)3篇
- 二零二五年度駕駛員雇傭與物流配送優(yōu)化合同
- 二零二五年度高新技術(shù)項(xiàng)目合作保密合同
- 二零二五年度高校食堂學(xué)生營(yíng)養(yǎng)餐配送承包協(xié)議
- 胸痛中心護(hù)理相關(guān)知識(shí)培訓(xùn)
- 園林景觀工程施工組織設(shè)計(jì)-投標(biāo)書(shū)范本
- 護(hù)理倫理學(xué)(第二版)高職PPT完整全套教學(xué)課件
- GB/T 25919.1-2010Modbus測(cè)試規(guī)范第1部分:Modbus串行鏈路一致性測(cè)試規(guī)范
- GB/T 22484-2008城市公共汽電車客運(yùn)服務(wù)
- GB/T 14040-2007預(yù)應(yīng)力混凝土空心板
- 帶狀皰疹護(hù)理查房課件整理
- 奧氏體型不銹鋼-敏化處理
- 交通信號(hào)控制系統(tǒng)檢驗(yàn)批質(zhì)量驗(yàn)收記錄表
- 弱電施工驗(yàn)收表模板
- 探究基坑PC工法組合鋼管樁關(guān)鍵施工技術(shù)
評(píng)論
0/150
提交評(píng)論