한국으로/ARM

volatile이 필요한 경우

영킴. 2018. 7. 21. 22:10

volatile


메모리를 다른 프로세스, CPU, 주변장치 등과 공유하는 경우 volatile이 필요하다.


volatile이 필요한 경우:

Memory Mapped I/O

하드웨어적으로 값이 변경됨.
주변장치는 반드시 volatile unsigned가 필요!
외부적으로 바뀔 가능성있는 변수는 volatile을 써야함.

ex) #define REG0 (*(volatile unsigned short*)0x1000)


DMA에 의한 전송

DMA로 데이터 이동 시 CPU는 메모리 변화를 알지 못함.


인터럽트 처리루틴

인터럽트 처리루틴과 Main 루틴의 공유 변수의 경우 volatile 필요.
컴파일러는 인터럽트 처리함수가 CPU가 호출하는 함수인 지 알지 못함.
따라서 컴파일러가 최적화하면서 컴파일러가 볼 때 불필요한 코드 영역을 스킵함.


멀티 프로세스 또는 멀티 프로세싱에 의한 메모리 공유