본문 바로가기
한국으로/ARM

volatile이 필요한 경우

by 영킴. 2018. 7. 21.

volatile


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


volatile이 필요한 경우:

Memory Mapped I/O

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

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


DMA에 의한 전송

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


인터럽트 처리루틴

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


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



'한국으로 > ARM' 카테고리의 다른 글

다중 메모리 이동: LDM, STM  (0) 2018.07.22
AAPCS와 레지스터 테이블  (0) 2018.07.21
ARM의 특수 용도 레지스터  (0) 2018.07.21
호출 규약 __cdecl 과 __stdcall의 차이점  (0) 2018.07.21
C Runtime Startup  (0) 2018.07.21
어셈블리어로 반복 프로그램 짜기  (0) 2018.07.21
어셈블리어 명령어  (0) 2018.07.21
ARM 프로세서 개요  (0) 2018.07.21