본문 바로가기

AVR 기초/LED 제어하기

[AVR 기초]delay 헤더파일 간단히 만들어보기

*키트는 Atmega128A를 사용하였습니다*

 

딜레이 헤더파일을 이용해 간단히 딜레이를 할 수 있지만

딜레이 헤더파일을 직접 만들어 보도록 하겠습니다.

 

코드는 다음과 같습니다.

 

void del(int sec){							//delay 를 대신할 함수 del
	volatile int j,k,l;
	for(j = 0; j< sec ; j++){
		for(k = 0; k< 1000 ; k++){
			for (l = 0; l<500;l++){
			}
		}
	}
}

이런 식으로 만들게 되면 저 문장들을 실행하는데 시간이 걸리게 되어 delay 헤더파일과 비슷하게 동작이 됩니다.

 

더 오래 걸리게 만들고 싶다면 for문 안에 있는 k의 숫자를 늘려주면 됩니다.

 

 

변수 앞에 volatile을 선언하는 이유는 

 

일반적으로 프로그램은 실행할 때, 컴파일러는 최적화를 진행합니다. 위의 코드에서는 다중 for문 안에 값이 비어있으므로 최적화를 진행하게 되어 프로그램은 일반적으로 del함수를 실행하지 않습니다.

하지만 volatile을 선언하게 되면 컴파일러는 해당 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듭니다. 즉, 이 변수는 언제든지 값이 변할 가능성이 있으니 항상 메모리에 접근하라고 컴파일러에게 알려주는 것입니다.

 

결과적으로 volatile을 선언→ 무조건 실행이 되게 함으로써 시간이 걸리게 하는것입니다.