Embedded C언어
[임베디드 C언어_Day7]Volatile
Whatman
2018. 10. 17. 20:18
■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.캐시를 거치지 않는다.
임베디드에서 프로세서의 레지스터를 직접 제어하는 경우가 많은데 캐시에 저장되어 있으면
레지스터 제어가 잘 되지않기 때문에 써주는 것이 좋다.