메모리 주소 ( 예. 0xF000F100 등 아무거나 시스템에서 메모리 주소로 사용하고 있는 것 ) 에 직접 접근하여 값 uint32_t 값 기록하는 방법.
임베디드 시스템 이라면 메모리 주소는 GPIO 포트 출력 설정하는 레지스터 주소일수도있고, 플레시 메모리 영역일수도 있다.
// 코드 의미. 주소에 해당하는 숫자를 uint32_t 포인터로 처리하고 그것의 값 * 에 0xFF 대입하라.
// volatile 은 컴파일러 (특히 GCC) 의 최적화 옵션 적용하지 말라는 설정. 코드에 기록된 그대로 컴파일 하라는 의미.
*((volatile uint32_t *) 0xF000F100 ) = 0xFF;
// 매번 위 구문 타이핑 하기 번거로우니 매크로로 정의하면 사용하기 편리하다.
#define MEM_LED (*((volatile uint32_t *) 0xF000F100 ))
MEM_LED = 0xFF;
MEM_LED = 0x00;
연관
- GCC 최적화 옵션 적용하여 실행결과 엉망되는 사례.
첫 등록 : 2020년 1월 20일
최종 수정 :
단축 주소 : https://igotit.tistory.com/2450
'VisualStudio.C++.C# > C . C++' 카테고리의 다른 글
C++ REST SDK. Json 형식 다루기 . (0) | 2020.03.22 |
---|---|
C/C++. C 에서 C++ 함수 호출하기. extern "C" 선언. C++ 에서 C함수 호출. (0) | 2020.01.24 |
C/C++. & 와 * 메모리 접근 형변환 (0) | 2020.01.13 |
C/C++. 구조체 변수 선언 동시 멤버 초기화 (0) | 2020.01.10 |
C, C++. 상수 2진수 , 16진수 (0) | 2020.01.03 |
댓글