본문 바로가기
VisualStudio.C++.C#/C . C++

C. C++. 메모리 직접 접근

by i.got.it 2020. 1. 20.

 

메모리 주소 ( 예. 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 최적화 옵션 적용하여 실행결과 엉망되는 사례. 

 

GCC 컴파일러 optimization 위험성. 예 : SW4STM32 에서 optimization 에 따라 float 변수 바이트 단위 접근시.

GCC 기반툴( SW4STM32 등) 에서 컴파일러 셋팅에 있는 Optimization 설정(아래그림)에 따라 프로그램 작동결과가 심각하게 다른 결과가 나오는 경우 있다. 특히 float 형 변수 사용하는 경우 옵션에 따라 황당한..

igotit.tistory.com

 

 

 


첫 등록 : 2020년 1월 20일 

최종 수정 : 

단축 주소 : https://igotit.tistory.com/2450

 


 

 

 

 

 

 

댓글



 

비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5