2015년 1월 22일 목요일

에디슨에서 아두이노 스케치 지우기

Arduino IDE로 스케치를 작성해 에디슨에서 실행하면 이 스케치는 에디슨을 재부팅 해도 매번 자동으로 실행되어 버리기 때문에 추후 eclipse나 node.js에서 프로그램을 작성해 실행을 하면 GPIO 포트등을 사용하는데 충돌이 나기 쉽다.

예를 들어 먼저 Arduino에서 아래의 스케치를 에디슨에 업로드한다.



void setup()
{
  pinMode(13, OUTPUT);
}

void loop()
{
  digitalWrite(13, HIGH);
  delay(500);
  digitalWrite(13, LOW);
  delay(500);
}



이 스케치가 실행되면 LED가 깜빡이게 될 것이다. 하지만 이후 보드를 리부팅 한 후 다음의 명령을 입력해 보자.

# python
>>> import mraa
>>> led13 = mraa.Gpio(13)
>>> led13.dir(mraa.DIR_OUT)
>>> led13.write(0)

이렇게 하면 LED는 꺼져야 하지만 이전에 설치되어 있는 아두이노 스케치 때문에 LED는 계속 깜빡이고 있게 된다.

에디슨에서 아두이노 스케치는 독립적으로 실행되는 프로세스로 구현되어 있다. 그러므로 이 문제의 해결책으로 첫번째는 빈 스케치를 업로드 해 주는 것이다.



void setup()
{
}

void loop()
{
}

위의 스케치를 업로드 해 주면 된다. 하지만 이 경우 아무 일도 하지 않는 loop() 함수를 무한 호출하게 되어 비효율적이다.

다른 방법으로는 에디슨에 업로드 되어 있는 스케치 프로세스 파일을 아예 삭제해 부팅시 프로세스가 만들어 지지 않게 해 버리는 것이다.

# cd /sketch
# ls
sketch.elf      sketch.elf.old

/sketch 디렉토리에 보면 sketch.elf 파일이 들어있다. 이 파일이 arduino IDE에서 컴파일 한 후 업로드 한 것이다. 이 파일이 부팅될 때마다 자동으로 실행되게 되기 때문에 이 파일을 삭제해 주면 다음번에 재부팅 할 때는 스케치가 실행되지 않게 된다.

# rm sketch.elf

하지만 이 파일을 삭제해도 이미 프로세스로 실행되고 있는 스케치는 종료되지 않는다. 현재 실행되고 있는 스케치 프로세스를 삭제하려면 다음 명령을 입력해주면 된다.

# ps | grep sketch
  173 root     19824 S    /sketch/sketch.elf /dev/pts/0
  175 root      1792 S    /opt/edison/sketch_reset -i 207 -o 215 -s /opt/ediso
  510 root      2420 S    grep sketch
# kill -9 173

(위에서 173, 175, 510 같이 줄의 맨 앞에 있는 숫자는 매번 다르게 나올 것이다. 'kill -9 173'에서 173 대신 /sketch/sketch.elf /dev/pts/0 줄의 맨 앞에 있는 숫자로 바꿔줘야 한다. )

이제 실행되고 있던 스케치 프로세스가 종료되어 LED의 깜빡임이 멈춘걸 확인할 수 있을 것이다.

댓글 없음:

댓글 쓰기