MCU 프로그래밍시 같은 주소에 여러번 수정이 빈번하다 => 컴파일러가 최적화(중간생략) 해줌
- 인터럽트 핸들러 사용시
- 메모리 주소를 가진 I/O 레지스터
- 인터럽트 핸들러가 값을 변경하는 전역변수!
- 멀티 쓰레드 환경시
- 최적화 오류발생 가능성이 있는 변수에 사용
volatile사용시 해당변수는 최적화에서 제외하고 레지스터 로드값이 아닌 항상 메모리에 접근, 참조하도록 함.
c <syntax> volatile [type][variable_name];
즉 현재 프로그램의 수행흐름과 상관없이 외부 요인이 변수 값을 변경할 수 있다는 점에서 공유되는 변수의 경우에만 필요에 따라 volatile 사용하면 됨!