본문 바로가기

About/Embedded System

(2)
[Embedded] 인터럽트 핸들러(interrupt handler, AVR 예시) 인터럽트 핸들러(interrupt handler)는 인터럽트 처리에 등록하기 위해 작성된 프로그램이다. 인터럽트 처리는 일반적인 처리보다도 CPU가 먼저 동작시킨다. 따라서 인터럽트 처리가 길면 일반 처리에 영향을 끼치므로 되도록 간단하고 최소한의 처리만을 작성하도록 주의하여야 한다. 인터럽트 핸들러 자체는 인터럽트 벡터에 대상 프로그램의 시작 번지를 등록함으로써 인터럽트가 발생했을 때 CPU가 자동으로 전환해 준다. 다음 예시는 AVR 환경(Atmega 128 등 ..)에서 Timer0을 이용하는 예시이다. AVR 환경에서는 다음과 같이 기술함으로써 인터럽트 벡터로 등록할 수 있다. ISR()(Interrupt Service Routine)이라는 매크로 함수를 이용해서 등록하고 싶은 인터럽트 벡터 위치..
[Embedded] volatile 선언(하드웨어 폴링과 volatile) 임베디드 시스템에서는 주기적으로 하드웨어를 감시해 상태가 변한 것을 감시하는 처리가 빈번히 실행된다. 이 처리를 폴링(polling)이라고 한다. 인터럽트 기능을 갖고 있지 않은 주변장치 등을 감시하기 위해 사용된다. 간단하게 말해서 폴링은 "프로그램이나 장치에서 다른 프로그램이나 장치들이 어떤 상태에 있는지를 지속적으로 검사하는 전송 제어 방식"이다. 이 때 주변장치의 감시를 위해 레지스터 주소를 지정한 처리를 작성했다고 하면, 컴파일러는 주변장치의 레지스터 주소를 알지 못하기 때문에 최적화 옵션을 지정하여 컴파일하면 의도하지 않은 상황으로 전개될 가능성이 있다. 이 때 volatile 선언으로 최적화를 하지 않도록 지정한다. for(;;){ if((*(unsigned long*)(0x0000000F)..