2011년5월24일_두더지게임2 소스코드의 주석을 보기 좋게 정리함

 

주석을 보기 좋게 정리

 

1. 프로그램 정보가 담긴 첫 부분

1행과 2행 사이에 요구사항이 담겨 있으나 생략함.

   1:  /***************************************************************************
   2:      두더지잡기 게임2 설명
   3:  
   4:                  ....길어서 생략...
   5:  
   6:  ---------------------------------------------------------------------------
   7:  
   8:      다음은 함수 이름을 정리.
   9:      다음 부터는 아래와 같은 순서로 작성할 것.
  10:      
  11:      <순서> 
  12:      파일명: 
  13:      작성자:
  14:      목적:
  15:      사용방식:
  16:      사용파일:
  17:      제한사항:
  18:      오류처리:
  19:      이력사항:
  20:  
  21:  ----------------------------------------------------------------------------    
  22:  
  23:      작 성 자:    1.출처: 내 머리
  24:                  2.작성: [내장형 하드웨어]과정    김수만
  25:  
  26:      이력사항:    1.2011년 5월 23일...최초 작성.
  27:                  2.2011년 5월 24일...주석 정리. 
  28:                                      함수의 배치 순서 정리.
  29:                                      문자열 전송함수 개선 - \n만 하면 되도록
  30:  
  31:  ****************************************************************************/

왜 파일명, 사용방식, 사용파일를 넣어야 되는가 의문이나 넣으면 좋다고 하니 다음 부터는 넣도록 해봐야겠다.

 

2. 전역변수

   1:  /*------------------------------ 전역 변수 ---------------------------------- */
   2:  volatile unsigned int g_elapsed_time = 0;    // 시간 변수
   3:  volatile unsigned char key = 0;                // 키입력값 저장 버퍼
   4:  /*------------------------------ 전역 변수 ---------------------------------- */

전역변수 중에 g_elapsed_time과 타이머관련 함수와 인터럽트루틴을 모두 뭉쳐서 따로 파일을 만들고 싶으나..
어떻게 해야할지 조금 고민된다.

 

3. 시작부분 강조

   1:  /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 프로그램 시작 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
   2:  int main(void)
   3:  {
   4:   
   5:  }

소스보는 사람이 시작부분 부터 보고 싶어 하지 않을까 하여 강조하였음.
쉽게 찾을 수 있겠지?

 

 

4. 초기화 함수들

   1:  /*********************************************************************************
   2:          <초기화 함수들>
   3:                  
   4:          모두 상단의 전처리문을 참조해야 함.
   5:          
   6:  *********************************************************************************/
   7:  //I/O 포트 초기화
   8:  void init_port(void)
   9:  {
  10:   
  11:  }
  12:      
  13:   
  14:  //타이머0 초기화
  15:  void init_TC0(void)
  16:  {
  17:   
  18:  }
  19:   
  20:  //UART1 초기화
  21:  void init_USART1(void)
  22:  {
  23:   
  24:  }

모두 따로 파일을 만들어 분할 컴파일 하고 싶다.

 

5. 통신관련 함수들

   1:  /*>>>>>>>>>>>>>>>>>> 하드웨어와 밀접한 관련이 있는 함수들 (통신주변장치) <<<<<<<<<<<<<<<<<<<<*/
   2:   
   3:  //1바이트 수신함수
   4:  unsigned char USART_Receive(void)    // ← 이름 바꿀까?
   5:  {
   6:   
   7:  }
   8:   
   9:  //1바이트 전송함수
  10:  void uart_send_byte(unsigned char byte)
  11:  {
  12:   
  13:  }
  14:   

이 함수들은 하드웨어 사양 변경 시 주의해야할 부분이므로 강조함.

 

6. 수치처리함수들

   1:  /*>>>>>>>>>>>>>>>>>>>>> 어느 하드웨어에나 이식이 자유로운 수치처리함수 <<<<<<<<<<<<<<<<<<<<<<*/
   2:   
   3:   
   4:  //16진수를 10진수로 바꾸는 함수 (100미만의 값만 취급한다.)
   5:  unsigned char hex_to_dec(unsigned char cNum)
   6:  {
   7:   
   8:  }
   9:   
  10:  //정수를 문자로 바꾸는 함수. (0~255까지만 취급함.)
  11:  void dec_to_ascii(unsigned char cNum, char *p)
  12:  {
  13:   
  14:  }
  15:   
  16:  //log2 N의 값을 구함. (128~0 -> 7~0)
  17:  char log_2(unsigned char cNum)
  18:  {
  19:   
  20:  }
  21:   
  22:  //입력 받은 숫자 반전. (변수의 주소를 참조해 1의 보수를 취함.)
  23:  void ToggleNumber(char * state)
  24:  {
  25:   
  26:  }

어디서든 아무런 수정없이 가져다 쓸 수 있는 이런 함수들은 따로 파일만들기도 쉽겠다.
언제 만들꺼야?

 

 

7. 문자열 전송함수 수정

   1:  //문자열 전송함수(수만)
   2:  void uart_send_string_suman(char *cStr)
   3:  {
   4:      int i;        //Offset
   5:      
   6:      for(i = 0 ; '\0' != *(cStr + i) ; ++i)        //NULL문자까지 반복.
   7:      {
   8:          if('\n' == *(cStr + i))            //개행문자를 만나면,
   9:          {
  10:              uart_send_byte('\r');            //캐리지 리턴후에
  11:              uart_send_byte('\n');            //라인 피드
  12:          }
  13:          else
  14:          {
  15:              uart_send_byte(*(cStr + i));    //시작번지로 부터 i번째 문자 전송.
  16:          }
  17:      }
  18:      
  19:      return ;
  20:  }    

개행문자를 CR + LF로 바꿈.
다른 사람의 소스코드를 보면 개행문자를 만나면 캐리지리턴만 해도 되는데 왜 내껀 안 되는거야?