사용자 도구

사이트 도구

English

moacon:starttimerevent:index

startTimerEvent

void startTimerEvent (u16 interval)

interval : 타이머 이벤트 간격 (mS 단위, 1 부터 65535 까지 사용가능 ; =65.5 초)

설명

타이머 이벤트는 주기적으로 타이머 이벤트 함수를 실행시켜주는 기능입니다. 최소 1mS 간격부터 65 초 간격까지 사용가능합니다.

이 함수를 사용하여 타이머 이벤트를 시작합니다. Interval 은 이벤트를 발생시킬 시간 간격을 의미합니다. 1 일경우 1mS 마다 timerEvent 함수를 실행시킵니다.

10 일경우에는 10mS 마다 timerEvent 함수를 실행시킵니다.

이 기능은 매우 유용하게 쓰입니다. 백그라운드에서 I/O 처리를 해준다거나, 타이밍을 측정하기 위해 사용하기도 합니다. 마치 여러 개의 프로세서가 동시에 돌아가는 것처럼 보이도록 하는 멀티테스킹 처리도, 타이머 이벤트를 이용해서 처리할 수 있습니다.

타이머 이벤트 사용시 주의사항은, 이벤트 처리루틴이 반드시 타이머 이벤트 발생주기보다 빠르게 실행을 마쳐야 한다는 것입니다. 예를 들어 이벤트는 10mS 마다 발생하는데 이벤트 처리루틴이 100mS 이상 걸린다면, 이 프로그램은 계속해서 이벤트 루틴만 실행하게 되고, 메인루틴은 실행하지 못하게 됩니다.

사용예

#include "moacon500.h"
int tm;
#define delaytime 250
void cmain(void)
{
 short i,j;
 startTimerEvent(100); // 타이머 이벤트를 기동시킵니다.
 portInit(6,0);
 while (1) {
 portOff(61);
 delay(delaytime);
 portOn(61);
 delay(delaytime);
 }
}
// 100mS 마다 아래 함수를 실행합니다.
void timerEvent(void)
{
 printf("comfile tech %d \r\n",tm++);
} 

타이머 이벤트에서 CLCD사용시 주의할 사항

타이머 이벤트 루틴 안에서 CLCD 에 표시하는 함수를 사용하실 수 없습니다. 메인루프에서 CLCD 화면에 데이터를 표시하고 있는 중간에 이벤트가 발생할 수 있는데, 이때 표시위치를 다른곳으로 바꾸어서 캐릭터를 표시하게되면, 이벤트 복귀후 엉뚱한 위치에 글자가 표시될 수 있기 때문입니다.

#include "moacon500.h"
void cmain(void)
{
 int i=0;
 clcdI2cInit(0);
 clcdPower(1);
 delay(100);
 startTimerEvent(100);
 while(1) {
 clcdPrint(1,3,"%05d",i++);
 clcdPrint(2,2,"Comfile");
 }
}
void timerEvent(void)
{
 clcdPrint(5,0,"Event Print"); // 이벤트 루틴안에서 표시위치를 바꾸면 안됩니다.
} 

목록으로 가기

moacon/starttimerevent/index.txt · 마지막으로 수정됨: 2016/04/14 09:50 (바깥 편집)