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 |