====== 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:index#-s-|라이브러리 목록으로 가기]]