반응형
메모리 직접 접근
C/C++에서는 포인터 활용하여 메모리 접근 가능 하지만
임베디드 환경에서는 포인터 없이 직접 접근하는 경우가 많다.
(이는 특정 주소에 "모드 설정" or "데이터 값" 처리하기 때문)
예를 들어
0x2000_0000 번지에 값을 "10" 설정한다고 해보자.
0x20000000 = 10;
위와 같은 형태는 상수 = 상수로 당연히 처리 되지 않는다.
(*)0x20000000 = 10;
주소 값 형태로 하여 타입 캐스팅 하였지만
할당 받을 메모리 크기가 지정되어야 한다.
보통 양수로 값을 처리하기 때문에
아래와 같이 표현할 수 있다.
(unsigned int*)0x20000000 = 10;
마지막으로 컴파일러 최적화 처리를 방지하기 위해
아래 형태로 사용되는 편이다.
(volatile unsigned int*)0x20000000 = 10;
메모리 직접 접근 하는 방법은
메모리 레이아웃을 잘 이해하지 못한 경우에는
오동작을 유발할 수 있기 때문에 레이아웃 구성을 이해하고 사용해야 한다.
[C/C++] Volatile 키워드
volatile 키워드란?• 컴파일러 최적화(optimization)에서 제외한다.• 레지스터에 값을 사용하지 않고 항상 메모리에 접근 참조• 명확한 표준이 없어 컴파일러마다 차이가 있긴 하다. volatile 필요
zoosso.tistory.com
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
| [C++] enum class와 enum (9) | 2025.06.29 |
|---|---|
| [C++] 임시(temporary) 객체 (22) | 2025.04.26 |
| [C++] 소멸자 함수 (9) | 2025.04.25 |
| [C/C++] 메모리 영역(스택, 힙, 데이터 영역) (7) | 2025.04.20 |
| [C/C++] 비트 필드 구조체 (8) | 2025.03.23 |
댓글