2007. 3. 9. 16:33

volatile 은 휘발성 메모리라는 표시로 그 값이 프로그램에서
바꾸지 않아도 바꾸어 질 수 있기 때문에 컴파일러가 옵티마이즈를 하지 않습니다.

보통 하드웨어를 제어하는 곳(디바이스 드라이버)에서 사용하게 되며
프로그램이 그 값을 정의 했더라도 하드웨어에서
자체적으로 다른 값으로 바꿀 수 있는 곳에 사용됩니다.

예를 들어

unsigned int flashRead32 (unsigned int *pFlash, unsigned int offset)
{
    volatile unsigned int dword;
    dword = *(pFlash->base + offset);
    dword = *(pFlash->base + offset);

return (dword);
}

dword를 volatile로 선언 했기때문에 읽으라는 값을 두번 읽지만
그냥 선언 했을 경우에는 한번만 읽은 것 하고 동일한 로직으로 보기 때문에 한번만 수행할 가능성이 높습니다.

특히 딜레이를 주기위하여 for문을 쓰는 경우에 변수정의를 위와 같은 이유로아래와 같이 사용해 주어야 딜레이 값이 확실하게 작용합니다.

volatile unsigned int i;

'STUDY > C 언어' 카테고리의 다른 글

연산자 1  (0) 2007.03.16
데이터형 구조  (0) 2007.03.16
명령어 이해 - for 문  (0) 2007.03.07
명령어 이해 - #ifdef / #ifndef / #endif  (0) 2007.03.02
명령어 이해 - if / while / brake  (0) 2007.03.02
Posted by Paul Hwang