
#<함수형>****************************************************
void _Timer_생성_(unsigned char  *r타이머,
                 unsigned char   p번호,
                 unsigned int    p시간주기값);
               
#define  _Timer_Create_    _Timer_생성_

#<인수>
'r타이머'
타이머 [생성자](반드시 <unsigned char [6]> 의 배열로 선언해야함).
'p번호'
타이머 번호(0 - 7 사이값으로 서로 중복되어서는 안됨).
'p시간주기값'
10ms 단위 타이머 이벤트 발생 시간주기값(100 이면 1초).
반드시 1 이상의 값을 사용해야함.

#<반환값>

#***********************************************************

#<적용구분>

"맷돌 전용"

#<선언문서>

"_Timer_생성_.h"

#<설명>

타이머를 한개 생성합니다.

타이머 [생성자] 는 6 바이트 공간을 가지며 반드시 <unsigned char [6]> 의 
배열로 선언되어야 하고, 반드시 [전역변수] 로 선언되어야 합니다.

타이머 생성시 [타이머번호] 는 반드시 0 - 7 사이의 값을 가져야하며 서로 중복될수 없습니다.
타이머는 동시에 최대 8 개까지 생성가능하고 모두 독립적으로 동작됩니다.
단, 시간 주기가 짧은 타이머가 동시에 너무 많이 구동되면 맷돌의 동작 속도가 느려질수 있습니다.

맷돌의 타이머는 실행 시간을 고려하여 10ms(0.01초) 주기를 가지고있습니다. 즉, 이벤트가 발생하는
최소 시간주기는 10ms(0.01초)가 됩니다(시간주기값이 100 이면 1초가 됩니다).

생성한 자체로는 타이머는 동작되지 않으며 이벤트도 발생하지 않으므로, 반드시 <_Timer_동작_()>
API 로 타이머를 동작시켜주어야 합니다.

#<예제>

// ...

//[내부정의]
//{
    #define  bool     unsigned char

    #define  true     1
    #define  false    0
    
//}

//[VAR]
//{
    //<알리문저장소> 를 제공합니다(크기는 사용자 조정가능).
    unsigned char  알림문저장소[256];
    
    //타이머0 생성자(이름은 사용자 마음대로).
    unsigned char  타이머0[6];
    
//} 

void event(void)
{
  //[이벤트] 발생시 여기서 처리합니다.

  //[VAR]
  //{
      unsigned char  알림문;
  
  //}
  
  //[<알림문> 한개 꺼내기]
  //{
      //<알림문저장소> 에서 가장 처음의 <알림문> 을 하나 꺼낸다.
      알림문 = _MsgQ_읽기_();        
  
  //}
  
  //<알림문> 에 따른 처리를 수행한다.
  switch(알림문)
  {
    case  d_EvtMsg_Timer0 :
    {
      //타이머0 발생이벤트는 여기서 직접처리하거나 처리 함수를 호출하여 처리합니다.
     
      // ...  
     
                   
    } break;
    
    //다른 [이벤트] 는 여기서 처리합니다.
    
  }  
  
}

void main(void) 
{
  //[<알림문저장소> 설정]
  //{
      //<알림문저장소> 공간을 사용자 정의 크기로 생성합니다(선언된 공간크기와 같은 크기로 지정).
      //저장소선언된크기와동일----v
      _MsgQ_생성_(알림문저장소, 256);
      
  //}
  
  //[타이머 설정]
  //{
      //타이머를 0번 타이머, 20ms 주기로 생성합니다. 
  
      //타이머0 를 생성합니다.
      //타이머 시간주기는 20ms--v
      //타이머 번호---------v
      _Timer_생성_(타이머0, 0, 2); 
      
      //다른 시간주기값을 설정하는 경우는 해당 API 로 다시 시간값을 설정가능합니다.
      //이 API 로 다시 주기를 다른 값으로 재설정 가능합니다.
      //주기를 1000ms(1초) 로 재설정 하는 경우. 
      _Timer_시간주기값_(타이머0, 100); 
      
      //타이머0 를 동작 시킵니다.
      _Timer_동작_(타이머0, true); 
     
  //}
  
  //[전체 이벤트 허용]
  //{    
      //전체이벤트를 허용합니다.
      _Event_전체_(true);
      
  //}    
  
  //여기서부터 타이머0 이벤트가 정해진 시간 주기로 발생하게 됩니다.
  
  
  //사용자 다른 처리.
  

}  

