본문 바로가기
코딩/아두이노

ESP8266 외부인터럽트 에러 해결 방법

by DIYver 2022. 5. 30.

 

이번에 Wemos D1 mini 를 이용하여 프로젝트를 하나 진행 중에 외부 인터럽트를 사용하려고 시도하던 중 에러가 발생했다.

시리얼 모니터를 확인하니 이런 에러코드만 뜨면서 계속 재부팅이 되었다.

 

처음에는 뭐가 잘 못 되었는지 이해가 되질 않았다.

Wemos D1 mini는 모든 GPIO를 외부 인터럽트로 사용할 수 있기 때문이다.(GPIO16 제외)

 

 

그래서 우연히 검색하던 중 한 블로그를 접하게 되었다.

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=mkhee77&logNo=221463453343 

 

<내용추가>ESP8266 External Interrupt(외부인터럽트)

- 2020.11.05 에러발생관련 내용추가 - 새로 Wemos D1 mini 보드를 구입 후 아래의 코드를 업로드 후 실...

blog.naver.com

운 좋게도 해결 방법이 담겨 있었다.

 

간단히 설명 하자면

ISR 함수 앞에 ICACHE_RAM_ATTR 를 붙여 주면 된다.

기존에는

attachInterrupt(left_cds, check_outgoing, RISING);

void check_outgoing()
{
  Serial.println("인터럽트 실행");
}

로 인터럽트를 구성했었다면

 

attachInterrupt(left_cds, check_outgoing, RISING);

ICACHE_RAM_ATTR void check_outgoing()
{
  Serial.println("인터럽트 실행");
}

위와 같이 ICACHE_RAM_ATTR 을 앞에 붙여주면 된다.

 

정상적으로 센서 신호값이 변함에 따라서 인터럽트가 실행 되는 것을 확인할 수 있었다.


왜 이렇게 해야하는지에 대한 이유는 좀 더 살펴봐야겠다.
일단 해결책을 찾았기에 기록해본다.

 

댓글