태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

티스토리 툴바





오늘 AVR Studio4를 이용해서 임베디드대회에 나갈 차량에 사용할 프로그램을 만들고 있었다.
ADC 두 개채널로 값을 입력받고, PWM파형을 만들고..문제없이 진행되다가 갑자기 심각한 문제가 생겼다.
외부인터럽트를 입력하면 인터럽트가 실행된 직후에 변수값들이 다시 원래대로 돌아오는 것이었다.

레지스터 설정에 문제가 있다고 생각하고, 세 시간정도 삽질을 한 것 같다.
답답한 마음에 AVR에 관련된 책을 읽기시작했다. 외부인터럽트에 대한 이론설명이었다.
(사실 외부인터럽트는 레지스터 설정도 쉽고, 자주 사용하던 기능이라 이론설명부분을 읽지 않고있었다)

그 때...눈에 들어온 문구.

WIN AVR GCC는 프로그램 오류를 막기위해 사용자가 지정하지 않은 인터럽트가 발생할 경우 프로그램을 reset한다.

젠장-_-...그리고 이러한 기능때문에 생기는 문제를 처리하기위해 설정되지 않은 인터럽트가 발생 시 이를 무시하도록 하는 명령어가 있었던 것이다.



EMPTY_INTERRUPT(BADISR_vect);     // for empty interrupt (important)

이 한줄... 이 한 줄만 추가시키면 해결될 일을 세 시간이나 삽질을 하고있었다 -_-;;;


이러한 기능은 코드비젼에서는 없는 기능이기때문에 이런 황당한 일을 겪은 것 같다.

저작자 표시 비영리 변경 금지