본문 바로가기
임베디드

[임베디드] Timer란?

by 코딩히어로 2021. 10. 12.
728x90

임베디드 시스템 프로그램에서 빼놓을 수 없는 Timer interrupt란 무엇인지 알아보겠습니다.

 

Timer란 말 그대로 시간을 재는 기능이라고 간단하게 표현할 수 있습니다.

 

그런데 이 Timer를 임베디드 시스템에서는 어떻게 측정을 할까요??

 

Timer의 기본 이론부터 파악해 보도록 하겠습니다.

 

 

1) Timer란


먼저 Timer가 무엇인지 알기 위해서는 Interrupt의 개념이 숙지되어 있어야 합니다.

 

왜냐하면 임베디드 시스템상의 Timer는 Interrupt를 통해 구현되기 때문입니다.

 

간단하게 설명하면 개발자가 설정한 시간 주기마다 Interrupt를 발생시켜서 숫자를

 

세는 방식으로 이 설정한 주기가 Timer 구현의 핵심입니다.

 

예를 들어,

 

개발자가 Interrupt를 1ms마다 발생시킨다고 가정해보겠습니다.

 

1ms마다 발생하는 Interrupt에서는 어떠한 변수를 통해 숫자를 세고 이 숫자 한 개는 1ms를 나타냅니다.

 

즉 개발자가 100ms라는 시간을 재려고 한다면 이 변수의 개수가 100개가 됐을 때가

 

바로 원하던 100ms가 경과한 시간 값이 되는 것입니다.

 

즉 이 Timer Interrupt는 계산 시 맞아떨어지는 숫자로 설정해둔다면 편합니다.

 

자 다시 정리하면

 

Interrupt overflow 시간 간격이 Timer 측정 최소 단위가 됩니다

 

 

 

2) Timer Interrupt


자 그럼 Timer Interrupt는 어떻게 구현하는지 프로그램을 보겠습니다.

먼저 Timer를 세팅해주는데 위 세팅은 1ms마다 overflow가 발생하는 설정입니다.

그런 다음 Interrupt구문 내에서는 tm8_1ms라는 변수 안에 숫자를 1씩 증가해줍니다.

 

자 여기까지만 구현을 해도 tm8_1ms라는 변수는 1ms라는 시간마다 카운팅 될 것입니다.

다음으로는 가장 중요한 Timer함수입니다.

 

여기에서는 Timer변수들을 만들어서 tm8_1ms값을 추가해줍니다.

 

이렇게 설정해 놓고 Main함수 내에 While문내에서

 

TimerVarProc();

 

까지만 실행해 주어도 TimerVarProc내부의 Timer변수들은 숫자를 세고 있을 것입니다.

 

마지막으로 If문을 통해 비교해 줄 Timer 비교 함수를 define 해 주도록 하겠습니다.

시간을 비교하기 위한 모든 작업이 완료되었습니다.

 

사용 시에는 간단하게 아래와 같이 사용할 수 있습니다.

 

예를 들어 위에 구현된 Timer 변수 MainTimer를 가지고 설명하도록 하겠습니다.

 

1. MainTimer = 0으로 초기화

 

2. If(MainTimer>=Timer_ms(100)){}

 

이제 100ms가 되었든 1000ms가 되었든 간단하게 시간을 측정할 수 있습니다.

728x90
반응형

댓글