(*((volatile unsigned int *)(addr)))
여기서 괄호를 빼면
*(volatile unsigned int *)addr
이 됩니다
volatile 은 전원끄면 내용 날라가는 메모리 즉 RAM 영역을 지정하는 단어입니다
(volatile unsigned int *)addr 은 addr을
RAM영역의 unsigned int형 pointer로 보라는 (type casting) .
따라서
*(volatile unsigned int *)addr 은 unsigned int형 포인터인 addr 이 가리키는 값, 즉 addr번지의 내용(32bit)이 됩니다
예를 들어
(*((volatile unsigned int *)(1234))) = 5678;
이 문장은
RAM의 1234 번지에 5678 을 써넣는 문장이 되고
int a=(*((volatile unsigned int *)(1234)));
이 문장은RAM 1234 번지의 내용을 읽어 그 값을 변수 a 에 넣으라는 문장이 됩니다
re: (*((volatile unsigned int *)(addr)))
volatile이라는 형은 값이 이 데이타를 포함하고 있는 프로그램에의해 영향을 받지 않고 다른 프로그램 외부에 의해 값이 변할 수 있는 값이 라는 것입니다.
특정 물리 메모리 주소에 쓰여지는 값을 여러 프로그램에서 공유하여 변경될 수 있을때 사용할 수 있습니다.
예로 시리얼 포트로 들어오는 값들(특정I/O 주소에 값이 저장되죠)
(volatile unsigned int *)는 포인터(addr)를 volatile unsigned int 포인터 형으로 바꾸라는 것입니다.
(*((volatile ...
에서 *는 포인터에 저장된 값 (주소를따라간 그 안에 값) 이란 의미입니다.
결국 addr이란 포인터가 저장하고 있는 주소값을 unsigned int의 주소값으로 받아들이고 이곳에 저장된 unsigned int값을 가져오라는 것입니다.
'ETC' 카테고리의 다른 글
2013.08.30[펌]기울기 검출시에 자이로와 가속도센서를 같이 쓰는 이유 (0) | 2013.08.30 |
---|---|
2013.06.07_Escape Sequence_ (0) | 2013.06.07 |
2013.04.10_환경변수경로설정 (0) | 2013.04.10 |
2013.04.10_센서종류 (2) | 2013.04.10 |
2013.04.10_ARM칩에소스올리는방법!! (0) | 2013.04.10 |