inflearn logo
강의

Course

Instructor

ARM Cortex-M Processor Programming

s402_Memory Mapped IO

메모리 맵 질문

279

js26411135

8 asked

0

메모리 맵 자체는 data width가 1바이트인데, 0xE000ED00의가 가리키는 값은 왜 4바이트 인가요?

임베디드 arm-architecture cortex

Answer 1

0

guileschool

안녕하세요. 박진수님

말씀하신 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비트라서 그렇습니다.

메모리맵과 버스에 대한 이해를 위하여 다음의 정보 글을 읽어보시기를 추천드립니다.

 

0

js26411135

답변 감사드립니다. 궁금한게 하나 더있는데요. 32bit 레지스터에 들어가는 값이 int 형이라 주소를 4씩 증가시키잖아요. 근데 만약에 32bit 레지스터에 short 형이나 double 형으로 들어간다고 가정하면 어떤식으로 동작 할까요? short 형이면 2 byte니 4byte가 되야 레지스터가 차고 double형은 8 byte인데 주소 2개가 0x0000_0000 ~ 0X0000_0007 이 같은 값을 가지게 될까요?

0

guileschool

메모리는 동일한 위치(주소)의 변수를 필요하다면 1, 2, 4 바이트 서로 다른 사이즈로 접근해도 되지만, 하드웨어 레지스터는 원래의 정해진 사이즈로만 접근해야 합니다.

원래의 크기가 아닌 다른 사이즈로 레지스터를 접근하였을 때는 정상적인 액세스를 보장할 수 없습니다.(될 수도 있고 안 될 수도 있다는 뜻)

0

js26411135

음 만약에 16bit 레지스터면 short로 32bit 레지스터면 int, 64bit 레지스터면 double로 접근하면 된다 이렇게 생각하면 될까요??

0

guileschool

네네 맞습니다 ^^

 

stm32cubeide 관련 문의

0

43

2

DMA 관련한 강의도 제작해주실 수 있으신가요 ?

0

90

1

그림들도 해석 할 수 있어야 하나요?

1

100

2

no-stlink

1

80

2

4개의 CPU 사이클이 필요한 이유

1

99

2

MAC으로 진행 질문드려요..

1

95

2

학습 진행 시, 사용하는 Board에 대한 문의 드립니다!

0

159

2

push pop 질문

1

190

2

STM32Fx Cortex ARM 프로그래밍 저자:홍봉조, 출판사:지식과 감성

0

242

1

CORTEX_02_ASSEMBLY 빌드시 에러

1

270

1

외부 ST Link 연결 이용한 SWD 방법

0

338

1

파이프라인과 명령어

1

326

1

명령어 fetch

0

238

1

lr 레지스터 LSB 값

1

258

1

Disassembly 창 문제

0

349

1

s702 강좌에서 사용한 technical reference manual 문서

1

323

1

s702에 원자적 Access 를 위한 BSRR 코드작성 부분에 대해서

1

270

1

s202 LED 점등 예제 실행시 에러

2

351

1

STM32F429I-DISC 보드의 펌웨어

2

394

1

제공되지 않은 강의교재

0

319

1

s524 테일체이닝 강의 질문

0

234

1

부트코드와 부트로더의 차이점

1

1524

1

xPSR 레지스터 플래그 값 및 기타 질문 드립니다.

1

858

2

컴퓨터 연결 및 회로도

0

420

1