Posted by 살레시오

댓글을 달아 주세요

Posted by 살레시오

댓글을 달아 주세요

Posted by 살레시오

댓글을 달아 주세요

Posted by 살레시오

댓글을 달아 주세요

Posted by 살레시오

댓글을 달아 주세요

Posted by 살레시오

댓글을 달아 주세요

Posted by 살레시오

댓글을 달아 주세요

Posted by 살레시오

댓글을 달아 주세요

  아두이노를 이용해서 사물인터넷을 아주 쉽게 구현해주는 Blynk 라는 서비스가 있다. 아래 동영상에서 사용법을 아주 자세히 설명해 주고 있다. 아두이노융이 다른 아두이노들 보다 비싸다는 건 함정.



Posted by 살레시오

댓글을 달아 주세요

 지시자(directive)인 volatile 은 변수 선언문의 변수형 앞에 두어서 컴파일러가 그 변수를 접근하는 방식을 지정한다.


 일반적으로 변수 데이터는 런타임에 RAM영역에 저장되지만 어떤 변수는 레지스터(register)에 임시로 저장되어 사용하기도 하는데 이 경우 속도면에서는 월씬 유리하지만 RAM에 저장된 실제 데이터와 레지스터에 저장된 (임시)데이터가 서로 다른 경우가 발생할 수도 있다.


 어떤 변수를 volatile로 지정하면 그 변수 데이터는 레지스터의 임시 저장소가 아니라 RAM에서 직접 읽어오도록 컴파일된다. 아두이노 프로그램의 경우 보통은 volatile로 정의할 필요는 없으나 인터럽트 서비스 루틴 (ISR) 내부에서 그 값이 변경되는 변수는 반드시 volatile로 선언해야 실시간으로 변경되는 데이터 값을 ISR 외부에서 정확하게 읽어올 수 있게 된다. 예를 들면 다음과 같다.


// toggles LED when interrupt pin changes state

int pin = 13;
volatile int state = LOW;

void setup()
{
 pinMode(pin, OUTPUT);
 attachInterrupt(0, blink, CHANGE);
}

void loop()
{
 digitalWrite(pin, state);
}

void blink()
{
 state = !state;
}


위의 예에서 blink()함수가 ISR이며 이 안에서 변경되는 변수 state는 volatile로 지정하였음을 확인할 수 있다.

(출처 : https://www.arduino.cc/en/Reference/Volatile )



Posted by 살레시오

댓글을 달아 주세요