■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.캐시를 거치지 않는다.
임베디드에서 프로세서의 레지스터를 직접 제어하는 경우가 많은데 캐시에 저장되어 있으면
레지스터 제어가 잘 되지않기 때문에 써주는 것이 좋다.
'Embedded C언어' 카테고리의 다른 글
[임베디드 C언어]임베디드 시스템 개념 정리 (0) | 2018.10.29 |
---|---|
[임베디드 C언어_Day8]Uart_Print 구현 (1) | 2018.10.29 |
[임베디드 C언어_Day6]LED + keypad(비트필드 구조체 사용)구현 (0) | 2018.10.15 |
[임베디드 C언어_Day5]CallBack (0) | 2018.10.15 |
[임베디드 C언어_Day4]LED + keypad 구현 (1) | 2018.10.15 |