"비휘발성" 이라는 의미로,
컴파일러에게 임의의 최적화를 금지할때 쓰는 키워드 이다.
#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 |