본문 바로가기

Programming/C Programming

volatile keyword

"비휘발성" 이라는 의미로,

컴파일러에게 임의의 최적화를 금지할때 쓰는 키워드 이다.


#define LCD_RAM              (*((volatile unsigned short *) 0x60020000)) /* RS = 1 */


이런식으로 address 에 직접 access 할때,

저장공간을 컴파일러가 최적화 하여, r3 나 r5 로 변경해 버리면 곤란할 것이다.


또한, HW 에 의해서 지속적으로 변경되는 데이터를 담고 있다면,

이또한 read 할때마다, 값이 update 되어야 하는데

컴파일러 최적화는 이를 방해하는 요소가 된다.


이러한 것들을 피할때 volatile keyword 를 사용한다.


단, 추가 첨언을 하자면..

The rule of thumb in Linux kernel programming is that if you feel tempted to use the “volatile” keyword, you’re doing something wrong: The correct way to access hardware registers is with iowrite32(), ioread32() and other io-something functions and macros. All device drivers demonstrate this.

리눅스 프로그래밍에서 volatile 을 사용해야 할것 같다면, 무언가 잘못 구현한 것이다.

iowrite32(), ioread32() 등의 메크로를 사용해야 한다.


'Programming > C Programming' 카테고리의 다른 글

printf / printk 에서 %p 사용방법  (0) 2016.01.04
#if 로 define 을 하면 좋은점.  (0) 2015.04.20
The cost of inline functions  (0) 2010.12.21
배열 초기화 선언  (1) 2010.10.29
c 와 c++ 의 const 내용정리  (0) 2010.10.08