0x20000000부터 시작하여 메모리 영역에 보호 기능을 추가하고 싶습니다. 영역의 크기는 64 바이트입니다. 사용 권한은 읽기 전용이며 xn을 제외한 플래그는 설정되지 않습니다. 어떻게 생각해야합니까?cortex m4에서 MPU 레지스터를 어떻게 구성합니까?
#define MPU_CTRL (*((volatile unsigned long*) 0xE000ED94)) // MPU Control register
#define MPU_RNR (*((volatile unsigned long*) 0xE000ED98)) // MPU Region Number register
#define MPU_RBAR (*((volatile unsigned long*) 0xE000ED9C)) // MPU Region Base Address Register
#define MPU_RASR (*((volatile unsigned long*) 0xE000EDA0)) // MPU Region attributes and size register
void Registers_Init(void)
{
//MPU Configuring
MPU_RNR = 0x00000000; // use region 0
MPU_RBAR = 0x20000000; // base address is 0x20000000
MPU_RASR = 0x1608FF0B; // enable bit=1, 64 bytes,not subregions, s=c=b=0, xn=1, permission= ro/ro.
MPU_CTRL = 0x00000005; // enable memory protection unit,guaranteeing default priviliged access
}
int main()
{
Registers_Init();
return 0;
}
이 내용이 정확합니까? 내가 잘못하고 있니? 안내해주십시오.
레지스터를 다룰 때는 절대로 "마법 번호"를 사용하지 마십시오. 자신을 포함하여 아무도 그 번호가 의미하는 바를 모릅니다. 당신은 당신의 코드를 읽는 사람들에게 1) 16 진수를 2 진수로 바꿔서 비트를 설정하고 2) 매뉴얼을 항상 열어 놓도록 강요하십시오. 대신, 비트 마스크의 수를 정의하십시오. 올바른 C 코드는'MPU_XYZ = MPU_THIS | MPU_THAT;''MPU_THIS' 등은 비트 마스크입니다. – Lundin