작성
·
209
0
메모리 맵 자체는 data width가 1바이트인데, 0xE000ED00의가 가리키는 값은 왜 4바이트 인가요?
답변 1
0
안녕하세요. 박진수님
말씀하신 0xE000ED00 는 SCB(system control block) - CPUID 하드웨어 레지스터의 주소입니다.
이 레지스터는 32비트 크기를 갖고 있고요.
C 프로그램에서 이 레지스터를 접근하려고 하면 다음과 같은 방법으로 가능합니다.
volatile unsigned int* hwreg_cpuid = (unsigned int*)0xE000ED00;
temp = *hwreg_cpuid
여기서 unsigned char* 나 unsigned short* 을 사용하지 않고 unsigned int* 을 사용한 이유는 그 레지스터의 크기가 32비트라서 그렇습니다.
메모리맵과 버스에 대한 이해를 위하여 다음의 정보 글을 읽어보시기를 추천드립니다.
답변 감사드립니다. 궁금한게 하나 더있는데요. 32bit 레지스터에 들어가는 값이 int 형이라 주소를 4씩 증가시키잖아요. 근데 만약에 32bit 레지스터에 short 형이나 double 형으로 들어간다고 가정하면 어떤식으로 동작 할까요? short 형이면 2 byte니 4byte가 되야 레지스터가 차고 double형은 8 byte인데 주소 2개가 0x0000_0000 ~ 0X0000_0007 이 같은 값을 가지게 될까요?