지시자(directive)인 volatile 은 변수 선언문의 변수형 앞에 두어서 컴파일러가 그 변수를 접근하는 방식을 지정한다.
일반적으로 변수 데이터는 런타임에 RAM영역에 저장되지만 어떤 변수는 레지스터(register)에 임시로 저장되어 사용하기도 하는데 이 경우 속도면에서는 월씬 유리하지만 RAM에 저장된 실제 데이터와 레지스터에 저장된 (임시)데이터가 서로 다른 경우가 발생할 수도 있다.
어떤 변수를 volatile로 지정하면 그 변수 데이터는 레지스터의 임시 저장소가 아니라 RAM에서 직접 읽어오도록 컴파일된다. 아두이노 프로그램의 경우 보통은 volatile로 정의할 필요는 없으나 인터럽트 서비스 루틴 (ISR) 내부에서 그 값이 변경되는 변수는 반드시 volatile로 선언해야 실시간으로 변경되는 데이터 값을 ISR 외부에서 정확하게 읽어올 수 있게 된다. 예를 들면 다음과 같다.
// toggles LED when interrupt pin changes state |
위의 예에서 blink()함수가 ISR이며 이 안에서 변경되는 변수 state는 volatile로 지정하였음을 확인할 수 있다.
(출처 : https://www.arduino.cc/en/Reference/Volatile )
'하드웨어 > 아두이노' 카테고리의 다른 글
[공학설계입문]아두이노 02강 디지털신호와 디지털핀 (0) | 2017.09.30 |
---|---|
아두이노 + Blynk 를 이용한 사물인터넷 구현 (0) | 2016.12.16 |
아두이노의 tone()함수 예제 1 (0) | 2015.11.11 |
아두이노 아날로그핀 연습문제 (0) | 2015.11.11 |
아두이노의 tone() 함수로 멜로디 연주하기 (0) | 2015.11.04 |