폴링방식과 인터럽트 방식의 차이점
폴링과 인터럽트는 둘다 어떤 작업을 수행시 외부에서 들어오는 이번트에 의해 어떠한 작업을 수행하는 것이다.
폴링과 인터럽트의 차이점에 대해서 알아보자
■ 폴링 방식
- 폴링방식은 정해진 시간 또는 순번에 상태를 확인해서 상태 변화가 있는지 없는지를 체크 하는 방식이다.
ex)
while(1)
{
if( BTN1 == 0 )
{
구문 1
}
else
{
구문 2
}
다른 작업1 ;
다른 작업2 ;
다른 작업3 ;
다른 작업 4;
}
위의 파일을 컴파일러가 되어서 생각 해보자.
먼저 버튼이 눌렸는지 안눌렸는지를 확인 뒤, 안눌렸다면 구문2 (else)를 실행 할 것이다.
그리고 else 문이 다 끝나면 순차적으로 다른 작업 n 을 실행한다.
그리고 나서 다시 if 문을 확인 할 것이다.
한 마디로 MCU는 정해진 순번 or 시간에 버튼의 상태변화를 확인해서 그에 맞는 일을 할 수 있도록 한다.
이것이 폴링 방식이다.
■ 인터럽트 방식
- 인터럽트 방식은 main문을 실행 하는 도중에 외부에서 정해져 있는 인터럽트 핀에 신호가 들어오면
MCU는 즉각적으로 하고 있는 동작을 멈추고 인터럽트 서비스 루틴을 실행 하는 것이다.
인터럽트 핀에 신호가 들어 오면, 스택공간에 실행 중이던 주소번지를 저장하고 인터럽트 서비스 루틴을 실행한다.
인터럽트 루틴을 마치면, 저장 되어 있던 스택에 작업중이였던 주소번지를 읽어 들여 다시 작업하던 곳으로
복귀해서 하던 일을 계속 이어 나가는 것이다.
◆ 폴링방식과 인터럽트 방식은
논리적으로는 둘다 외부의 신호에 의해 다른 작업을 하는 것이지만
회로 상으로 볼땐 전혀 다른 것이다.
폴링 방식은 버튼의 신호 유무를 판단 하기 위해서는 버튼의 입력이 들어 왔는지 안들어 왔는지를 MCU가 계속해서
확인 해야 하기 때문에 소스 군데 군데 상태를 체크 할 수 있도록 코딩을 해야 할 것이다.
반면 인터럽트 방식은 메인 루틴에서 하던일을 잠시 멈추고 실행되는 것 이기에 메인루틴 프로그램만 작성 하면 된다.
■ 인터럽트 서비스 루틴이란?
- CPU에서 데이터를 처리하는 방법에는 여러가지가 있는데 그 중에 인터럽트와 폴링이 있다.
폴링은 데이터가 그냥 쭉 들어오는 것이다.
프로세서는 그것을 정해진 순서대로 처리를 해준다.
그런데, 비상사태(전원이 나가기 전)나 급하게 처리해야 할 일이 생기면 신속하게 대응을 해줘야 하는데
순차적으로 작업을 처리하다 보니 타이밍을 놓치는 경우가 발생하게 되는 것이다.
저장 된 데이터가 날아 가버린다든지, 처리 타이밍을 놓친다든지...
그래서 만들어 놓은 것이 "인터럽트" 라는 것이다.
이것은 프로세서에 중대한 상황과 기타 사용가자 정의하는 상황을 번호로 매겨 놓는다.
그리고 그 일이 생기면 현재의 작업을 중단하고 우선 처리하게 된다.
이 인터럽트들은 프로세서에서 롬으로 정의를 해놓는다.
그런데, 롬에 저장이 되어 있으므로 수정이 불가능하다는 것이다.
해서, 인터럽트 벡터테이블 이라는 것을 램 영역에 만들고 이 부분에 처리해야 할 내용을 적어두는 것이다.
하지만 메모리의 할당이 적어서 많은 내용을 쓰지는 못하고, 다른 함수를 호출하게 되어있다.
인터럽트가 걸리고 정해진 내용을 처리하는 과정을 인터럽트 서비스라고 표현한다.
그리고 만들어진 내용(함수)을 인터럽트 서비스 루틴 이라고 한다.
PC에서 이런 인터럽트가 있고, 인터럽트가 걸렸다는 신호로 IRQ라는 것을 쓴다
IRQ란 Interrupt ReQuest 의 약자로 "인터럽트 요청" 을 뜻 한다.
PC는 주변 하드웨어가 많아서 인터럽트가 걸려도 어떤 놈이 걸었는지를 모른다.
따라서 IRQ라는 신호를 만들어서 "여기서 걸었어요~~" 라고 알려주는 역할을 한다.
'MicroProcessor > AVR' 카테고리의 다른 글
[AVR] Step1. 개발환경 구축하기 (AVR Studio 4.19) (0) | 2017.03.12 |
---|---|
cmd에서 avrdude를 이용하여 퓨즈비트 쓰기 (0) | 2012.05.23 |
USBasp - avrdude 명령어 (0) | 2012.05.22 |
외부 인터럽트실험2 (0) | 2012.03.09 |
USART 통신 기본 (0) | 2012.03.09 |
1분 카운터 & LED switching (0) | 2012.03.09 |
ATmega8 OSCCAL 레지스터 사용하기 (0) | 2012.03.09 |
댓글
이 글 공유하기
다른 글
-
USBasp - avrdude 명령어
USBasp - avrdude 명령어
2012.05.22 -
외부 인터럽트실험2
외부 인터럽트실험2
2012.03.09 -
USART 통신 기본
USART 통신 기본
2012.03.09 -
1분 카운터 & LED switching
1분 카운터 & LED switching
2012.03.09