게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
안녕하세요.MFC 코딩 질문 부탁드리겠습니다.
게시물ID : programmer_7955짧은주소 복사하기
작성자 : Starter
추천 : 0
조회수 : 586회
댓글수 : 1개
등록시간 : 2015/02/02 19:35:24
안녕하세요. MFC를 이용해 시리얼 통신을 구현하고 있습니다. 헌데 어려움을 겪고 있습니다.
void Cuart_ctrlDlg::OnBnClickedBtSend()
{

 char buffer[MAX_COLS];
 char buffer21[MAX_COLS];   //x축 pulse 버퍼 저장 어레이
 char buffer22[MAX_COLS];   //y축 pulse 버퍼 저장 어레이
 char buffer23[4] = "100";   //z축은 일정하게 100개의 펄스를 넘겨준다.
 char buffer3[2];
 char arx[MAX_COLS];     //상대좌표 계산하기 위한 x축어레이
 char ary[MAX_COLS];     //상대좌표 계산하기 위한 y축어레이
 char arz[MAX_COLS];     //상대좌표 계산하기 위한 z축어레이
 float buffer_num = 0;    
 float buffer_numx = 0;    //x축 pulse 갯수
 float buffer_numy = 0;    //y축 pulse 갯수
 float buffer_numz = 0;    //z축 pulse 갯수
 int x, y, z = 0;
 int j = 1;
 int p = 1;
 int q = 1;
 
 
 string strx, stry;
 
 char enter[2] = "t";  //개행을 나타내기 위함 임시 변수
 char xp[2] = "a";  //x축 양의 방향
 char xn[2] = "b";  //x축 음의 방향
 char yp[2] = "c";  //y축 양의 방향
 char yn[2] = "d";  //y축 음의 방향
 char zp[2] = "e";  //z축 양의 방향
 char zn[2] = "f";  //z축 음의 방향
 //test라는 파일을 open한다.
 FILE* input = fopen(test, "r");
 memset(buffer, 0, MAX_LENGTH);
 if (input == NULL){
  puts("File opening error");
  exit(1);
 }

  
  while (fgets(buffer, sizeof(buffer), input) != NULL) {
  
   if (data[0] == 'a'){        //초기 data값을 r로 설정하여 맨 처음 줄을 송신 한 후, fpga에서 r을 받으면 다시 송신.
   
    memset(data, 'a', sizeof(data));    //fpga에서 data를 받은 후 while문을 돌 때마다 data array를 초기화 시켜주어 한줄씩 전송.
   
    ptr = strtok(buffer, " ");     //buffer 문자열을 띄어쓰기 단위로 pointer로 잘라서 나타냄.
    buffer3[0] = *ptr;       //buffer3[0]에 ptr을 저장해 맨 처음 문자를 식별.
    if (buffer3[0] == 'X'){
     arx[0] = 0;        //arx[0]=0으로 초기화 하여 상대 좌표 값을 계산함.
     buffer_num = atoi(ptr + 1);    //축 이외의 pulse 갯수만을 계산하기 위함.
     arx[j] = buffer_num;
     buffer_numx = arx[j] - arx[j - 1];
     buffer_numx = (buffer_numx * 1000) / 6.67;  //pulse 갯수 계산식
     _itoa(buffer_numx, buffer21, 10);
     strx = buffer21;
     if (strx == "")break;
     // X축으로의 양의방향인지 음의 방향인지를 나타냄.
     if (buffer_numx > 0){
      str = xp;
      m_comm->Send(str, str.GetLength());
     }
     else if (buffer_numx < 0){
      str = xn;
      m_comm->Send(str, str.GetLength());
     }
     for (x = 0; x < strlen(buffer21); x++){
      str = buffer21[x];
      if (x == strlen(buffer21)){
       break;
      }
      m_comm->Send(str, str.GetLength());
     }
     j++;

     //  X 축으로의 송신이 끝난 후 Y축 및 Z축으로의 송신이 있다면 진행.
     while (ptr = strtok(NULL, " ")){
      buffer3[0] = *ptr;
      if (buffer3[0] == 'Z')
      {
       str = zp;
       m_comm->Send(str, str.GetLength());
       for (z = 0; z < strlen(buffer23); z++){
        str = buffer23[z];
        m_comm->Send(str, str.GetLength());
       }
      }
      else if (buffer3[0] == 'Y'){
       ary[0] = 0;
       buffer_num = atoi(ptr + 1);
       ary[p] = buffer_num;
       buffer_numy = ary[p] - ary[p - 1];
       buffer_numy = (buffer_numy * 1000) / 6.67;
       _itoa(buffer_numy, buffer22, 10);
       stry = buffer22;
       if (stry == "")break;
       if (buffer_numy > 0){
        str = yp;
        m_comm->Send(str, str.GetLength());
       }
       else if (buffer_numx < 0){
        str = yn;
        m_comm->Send(str, str.GetLength());
       }
       for (y = 0; y < strlen(buffer22); y++){
        str = buffer22[y];
        if (y == strlen(buffer22)){
         break;
        }
        m_comm->Send(str, str.GetLength());
       }
       p++;
      }

     }
    }
    str = enter;
    m_comm->Send(str, str.GetLength());
    //Sleep(5000);     
    m_comm->Receive(data, 2);
   }   // if (data[0] == 'r')과 상응하는 괄호
  }
 fclose(input);
}
 
코드는 위와 같고 m_comm->Receive의 맨 아래 함수에서 fpga에서 계속 데이터를 받아와야 하는데 그게 잘 안되네요. 왜 그런거죠?
제발 답변 해 주시면 감사하겠습니다...
fpga보드와의 클락 문제인지 도무지 모르겠습니다...
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호