■Volatile■

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<stdio.h>
 
int main(void)
{
    volatile unsigned int i;
//  unsigned int i;
    for(i=0;i<0x10000000;i++);
    //Dead Code 
    
    /************************
    1.vlatile 없이 
    gcc -o test test.c
    ./test.c
    =>delay가 생김. 
    
    2. gcc -o test test.c -O3
    =>최적화(delay x)
    
    3.volatile 작성
    gcc -o test test.c -O3
    =>delay가 생김 
    **************************/ 
printf("\n");
printf("end...");
}
cs

<Volatile의 역할>
1.컴파일러의 최적화를 막아준다.
위 코드를 보면 dead code같은 코드를 보면 컴파일러가 최적화 레벨에 따라
생략해서 컴파일하게 된다.

2.캐시를 거치지 않는다.
임베디드에서 프로세서의 레지스터를 직접 제어하는 경우가 많은데 캐시에 저장되어 있으면
레지스터 제어가 잘 되지않기 때문에 써주는 것이 좋다.



+ Recent posts