메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

묻고 답하기
일반
2008.01.22 17:44

RS485 통신 방법

조회 수 23,123 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

위로 아래로 댓글로 가기 인쇄 쓰기 목록
?

단축키

Prev이전 문서

Next다음 문서

위로 아래로 댓글로 가기 인쇄 쓰기 목록
?
  • WhiteAT 2008.01.23 09:52
    1. 속도
        일반적으로 사용하는 9600bps 로 통신을 한다면,
        1초에 약 100바이트를 보내게 됩니다.
         즉 1바이트를 보내는데 10mS 가 소요됩니다.

        5바이트 이상의 데이터를 보낸다면 50mS 안에 응답을 완료하기 힘들겁니다.


    2. (무조건) RX는 인터럽트로 처리해야 하고요....
        (다른 루틴 처리하다 데이터를 잃을 경우가 생길수 있기 때문에)
         Tx 는 while로 처리하면 될듯합니다.

        circular Queue 를 사용하여 RX데이터를 처리하면 간단합니다.
        즉, 데이터를 RX인터럽트로 받어 Q에 넣고, 수시로 수신된 데이터의 갯수를 체크하고, RX 데이터를 검사하는 겁니다.
        여기에서 응답해야 하는 패킷을 들어 왔을 경우에는 바로 응답을 보내지 않고, 플래그를 하나 만들어서, SET 하고,
        while()의 TX함수에서 그 플래그가 SET되어 있는 경우에 응답해주면 될겁니다.



    간단하게 구조를 보면 아래처럼 될겁니다.

    RX인터럽트(){
        큐에 보관....
    }

    TX함수(){  // 딜레이 타이머를 지정하지 않음
        데이터를 보내야 하면 => 데이터를 보내라.
    }

    RX데이터분석함수(){ // 딜레이 타이머를 지정하지 않음
         큐에 분석할 만한 데이터의 수가 있는가? 그렇지 않다면 그냥 나감.
         큐에 헤더, 데이터등의 패킷이 유효한가? 그렇지 않다면 (노이즈이기 때문에) 큐를 초기화 하고 나감
         패킷을 분석하여 TX 를 하겠다는 플래그 SET,  큐 초기화    
    }

    while(){
      TX함수();
      기타함수들();
      RX데이터분석함수();
    }
      
  • WhiteAT 2008.01.24 09:56
    1.
    TX 내부에 delay()를 직접 주는 거는 위험요소가 될수 있습니다.

    TX함수()에 딜레이가 필요하면.. 타이머를 써야 할듯합니다.
    (처음부터 힘들게 작업하신게  delay 를 직접 사용하지 않는 구조를 사용하지 않으려는 거였잖아요^^)


    void Tx(void) {
      if( next_tiimer > 0) return;
      if(!보낼데이터가 있는가?) return;

      if(tx_step ==0) {
        //통신칩 register 세팅
       write_reg(xxxx);
       write_reg(xxxx);
       write_reg(xxxx);
       write_reg(xxxx);
       write_reg(xxxx);
       tx_step++;
       next_tiimer = 1200; //
      }
     else if(tx_step==1) {
         // Main while에서 받은 값을 tx 버퍼 큐에 쓴다.
        Write_Data(ui8Z85_TBuf[tx_data_cnt]); 
           tx_data_cnt++;
           if(tx_data_cnt >= 14){u8tx_step = ??;} 
       }
      next_tiimer = 1; // 데이터를 보낸후에는 딜레이가 필요없다.
    }
    // 통신칩을 초기화 한후에는 1200딜레이를 가진후 TX를 하게 됩니다.


    2. RX분석 함수에 TX함수를 직접 넣으면 다른 함수에 영향을 줄수도 있습니다.
       TX 하는데 시간이 많이 소요되 때문에 분리해서 하시는게 좋을거 같습니다.
        (TX 인터럽트를 사용해서 보내는 것도 좋은 방법입니다.)


    3. 8Mhz로 9600 으로 (PC와) 통신을 해보셨나요?
       제 경험으로 9600bps로도 통신이 잘 안되고, 데이터 시트에도 에러율이 높게 나와 있습니다.

       시리얼통신((482,232 등)의 통신이 중요한 시스템이라면, 11.0592 같은 통신용 크리스탈을 사용하시는게 좋습니다.





  • WhiteAT 2008.01.25 10:11

    1.
    네이버에서 검색해보니 http://krdic.naver.com/search.nhn?query_euckr=%C0%C0%B4%E4%BD%C3%B0%A3

    응답이 시작되기까지 걸리는 시간이라고 하네요.^^.
    50mS 면 충분한 시간일듯 합니다..

    2. TX함수에서 송신시에는 그냥 연속으로 데이터를 보내세요.
         TX 인터럽트를 사용하지 않고 한 바이트씩 나눠서 보내면, 수신측에서 연속으로 오는 데이터가 아니라서 노이즈로 판단할수도 있습니다.
        ( 저도 개인적으로 이 부분(TX)을 인터럽트로 처리하는 방법으로 변경해야 하는데, 아직 별 문제가 없고, 귀차니즘 때문에 그냥 사용합니다.^^)

    void Tx(void) {

      if(tx_step ==0) {
        //통신칩 register 세팅
       write_reg(xxxx);
       tx_step++;
      }
     else if(tx_step==1) {
         // Main while에서 받은 값을 tx 버퍼 큐에 쓴다.
        Write_Data(ui8Z85_TBuf[tx_data_cnt]); 
           tx_data_cnt++;
           if(tx_data_cnt >= 14){u8tx_step = 3;}
     
        for(i = 0;i<14;i++)   //  데이터는 연속으로 보내야....
              Send Data;
        tx_step = 3;
        timer = 1900;;  // 딜레이도 여기에 주는게...

       }
      else if(tx_step==3) { //Rx 를 위한 세팅..
          
          delay(1900);  // 여기도 delay가 있었네요. -.-'
          
          tx_data_cnt  = 0;
          tx_step =0;
        
          Write_reg(0x21); //Rx 수신대기를 위한 칩 세팅 -- 그렇다면 이 부분도 인터럽트 루틴에 넣는 것이 좋을까요?..
          Write_reg(0x3e);
          Write_reg(0x92);
          Write_reg(0x23);
          ...........................
          Write_reg(0x02);
        }
    }

    3.
    PC 와 통신을 해보라고 말한거는, 꼭 PC와 통신 하라는 뜻이 아니고요^^
    AVR이 8Mhz일 때 9600bps 이상일 경우 통신이 잘 안되기 때문에 그 보레이트에서 에러가 없는지 확인해보시라는 뜻이었습니다.^^ (이건 괜히 급하게 언급했나 보네요ㅡㅡ;)


    4.
    RX 인터럽트는 주기가 필요하지 않습니다.
    데이터가 수신되는 즉시 걸리는 루틴입니다.

    RX 인터럽트 루틴에서는 큐에 데이터를 넣기만 하고요

    interrupt [USART0_RXC] void usart0_rx_isr(void)
    {
     char status,uart_data;
     status=UCSR0A;
     uart_data = UDR0;   /* Read receive data */
     //  putchar1('4');
     if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
     {          
      if (structRX0Info.rx_wr_index1 >= RX_BUFFER_SIZE1-1) structRX0Info.rx_wr_index1=0;
      structRX0Info.rx_buffer[structRX0Info.rx_wr_index1]=uart_data;
      structRX0Info.rx_wr_index1++; 
     };
    }



    데이터 분석 함수에서는 데이터를 분석만 하면 됩니다.
    TX()// 즉 데이터 분석 함수에서는
    큐에 저장된 데이터를 하나씩 꺼내와서 분석만 하면 될겁니다.

    INT16S getchar0(void){
     INT16S iReturnValue = -1;
     #asm("cli")
     if( structRX0Info.rx_rd_index1 >= structRX0Info.rx_wr_index1){
       structRX0Info.rx_rd_index1 = 0;
       structRX0Info.rx_wr_index1 = 0;
      iReturnValue = -1;
     }else{
      if(structRX0Info.rx_rd_index1 >= RX_BUFFER_SIZE1-1){
       structRX0Info.rx_rd_index1 = 0;
      }
      iReturnValue = structRX0Info.rx_buffer[structRX0Info.rx_rd_index1];
      structRX0Info.rx_rd_index1++;
     }
     return iReturnValue;
    }
    
    
    
    
    Tx(){ 
     iRxData=getchar0(); // 큐에 데이터가 있는지 확인
    while (0<= iRxData && iRxData<=255 )  // 
     {
          하나씩 꺼내서 분석...
          패킷이 일치하면 tx_flag = on;
            
     }
    
    }
    




     


List of Articles
번호 분류 제목 날짜
161 일반 오목에서 육목을 하면안되나요???( 2006.07.09
160 일반 다운로드 할때 1 2006.05.17
159 일반 다운로드 실패 이유 1 2006.07.30
158 일반 안녕하세요 c언어 질문드립니다. 2 2007.12.11
157 일반 c언어 문제 질문드립니다. 2 2007.12.12
156 일반 c 언어 여러 가지 질문입니다. 2 2007.12.13
155 일반 <p>전체 소스 (VC6.0): <a href="http://whiteat.com/?module=file&act=procFileDownload&file_srl=229896&sid=6ebae326649698cb86cc2e234788c5d7&module_srl=259">723498_WATMakeDlg.zip</a></p> <p>실행 파일 :  <a href="http://whiteat.com/?module=file&act=procFileDownload&file_srl=229897&sid=6ebae326649698cb86cc2e234788c5d7&module_srl=259">723502_WATMakeDlg_exe.zip</a> </p> <p> </p> <p> </p> <h4>MFC 형태</h4> <h4> </h4> <p>MFC 로 만들수 있는 프로그램은 윈도우 모양에 따라 크게 3가지로 나뉜다.<br /> 1. Dialog Base<br /> 2. Single Document<br /> 3. Multi Documents</p> <p>이 3가지중 Dialog Base 형태의 프로그램을 만들 것이고, 최종 목표는<br /> 버튼을 눌렀을때, [안녕하세요]라는 메세지를 띄우는 프로그램을 만드는 것이다.</p> <h4>Dialog Base 기본 프로그램 만들기</h4> <h4> </h4> <p>[File] =>      를 실행<br /> 아래와 같은 [New]창이 생성된다.</p> <p>Projects 형태 : [MFC AppWizard (exe)]<br /> ( Projects 에 여러가지가 있는데 여기서는 설명생략. )<br /> Projects name : WATMakeDlg<br /> 다른 것들은 디폴트로 둔다.</p> <p> </p> <p id="IyNTjuC"><img alt="" sizes="(max-width: 741px) 100vw, 741px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a814dd57.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a814dd57.png 741w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a814dd57-300x194.png 300w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a814dd57-670x434.png 670w" /></p> <p>OK 로 다음으로 진행<br /> What type of application would you like to create? [어떤 형태의 프로그램을 작성할것인가?]<br /> 3가지 형태가 있는데 [Dialog based]를 사용하겠다.</p> <p>그외 것들을 간단히 설명하면,<br /> Single document : 한 프로그램 내에 1개의 문서만 열수 있음.<br /> Multiple documents : 한 프로그램 내에 여러 개의 문서를 열수 있음 (예:MS-Word..)<br /> Dialog based : 특별히 문서를 필요로 하지 않는 간단한 프로그램에 사용      (예 : 계산기)</p> <p id="GdTYqyu"><img alt="" sizes="(max-width: 612px) 100vw, 612px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a8a8d4f6.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a8a8d4f6.png 612w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a8a8d4f6-300x229.png 300w" /></p> <p> </p> <p>일단은 step 2부터 마지막 까지는 모두 default 로 하고 진행한다.</p> <p id="drtrVEL"><img alt="" sizes="(max-width: 612px) 100vw, 612px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a98dc698.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a98dc698.png 612w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a98dc698-300x229.png 300w" /></p> <p id="DcDxrHP"><img alt="" sizes="(max-width: 612px) 100vw, 612px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a9ead898.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a9ead898.png 612w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55a9ead898-300x229.png 300w" /></p> <p id="IGCkCxB"><img alt="" sizes="(max-width: 612px) 100vw, 612px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55aa5cad59.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55aa5cad59.png 612w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55aa5cad59-300x229.png 300w" /></p> <p id="mEpCvru"><img alt="" sizes="(max-width: 550px) 100vw, 550px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55aab615d9.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55aab615d9.png 550w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59e55aab615d9-300x281.png 300w" /></p> <p>[OK]로 진행을 하면 마법사가 끝나고 하나의 프로젝트가 완성될 것이다.</p> <p>마지막으로 컴파일을 하고 실행을 해보자.[Ctrl + F5]<br /> 파일이 없으니, 만들거냐고 물어볼 것이다.(당연히 Yes)</p> <p id="niMdXhb"> </p> <p id="niMdXhb"><img alt="" editor_component="image_link" sizes="(max-width: 395px) 100vw, 395px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d471e26d.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d471e26d.png 395w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d471e26d-300x94.png 300w" /></p> <p>아래처럼 컴파일이 진행된 후에 결과물이 나올것이다.</p> <p><img editor_component="image_link" src="http://whiteat.com/file:///N:/20120924_%EC%8A%A4%ED%94%84%EB%A7%81%EB%85%B8%ED%8A%B8%EB%B0%B1%EC%97%85/WhiteAT.com/MFC_%EC%9E%90%EB%A3%8C%EC%8B%A4/01_Dialog_%ED%98%95%ED%83%9C%EC%9D%98_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8_%EB%A7%8C%EB%93%A4%EA%B8%B0/723392_MakeDlg09.JPG" /></p> <p id="bHkAzMe"><img alt="" editor_component="image_link" sizes="(max-width: 582px) 100vw, 582px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d530d8cc.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d530d8cc.png 582w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d530d8cc-300x239.png 300w" /></p> <p>[결과물]</p> <p><img editor_component="image_link" src="http://whiteat.com/file:///N:/20120924_%EC%8A%A4%ED%94%84%EB%A7%81%EB%85%B8%ED%8A%B8%EB%B0%B1%EC%97%85/WhiteAT.com/MFC_%EC%9E%90%EB%A3%8C%EC%8B%A4/01_Dialog_%ED%98%95%ED%83%9C%EC%9D%98_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8_%EB%A7%8C%EB%93%A4%EA%B8%B0/723398_MakeDlg10.JPG" /><img alt="" editor_component="image_link" sizes="(max-width: 566px) 100vw, 566px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d5b9a2cc.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d5b9a2cc.png 566w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d5b9a2cc-300x172.png 300w" /></p> <p> </p> <h4>버튼 추가</h4> <p> </p> <p>버튼을 누르면 메세지 보이기<br /> 버튼을 어떻게 넣어야 할까?<br /> 아래 그림에서 Controls 도구바에서 선택하면 된다. (윗줄 6번째)<br /> 버튼을 (클릭으로) 선택한 후 화면에 그리는 방법과 버튼을 끌어 당겨서 그리는 방법이 있다.</p> <p><img editor_component="image_link" src="http://whiteat.com/file:///N:/20120924_%EC%8A%A4%ED%94%84%EB%A7%81%EB%85%B8%ED%8A%B8%EB%B0%B1%EC%97%85/WhiteAT.com/MFC_%EC%9E%90%EB%A3%8C%EC%8B%A4/01_Dialog_%ED%98%95%ED%83%9C%EC%9D%98_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8_%EB%A7%8C%EB%93%A4%EA%B8%B0/723402_MakeDlg11.JPG" /></p> <p id="AzKACVT"><img alt="" editor_component="image_link" sizes="(max-width: 482px) 100vw, 482px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d651e26c.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d651e26c.png 482w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d651e26c-300x176.png 300w" /></p> <p>버튼을 추가하고, 속성에서 아래그림처럼 마우스 오른쪽 클릭후 Propeties 를 선택하면 컨트롤의 자세한 설정을 할수 있는 속성창이 뜬다.<br /> <img editor_component="image_link" src="http://whiteat.com/file:///N:/20120924_%EC%8A%A4%ED%94%84%EB%A7%81%EB%85%B8%ED%8A%B8%EB%B0%B1%EC%97%85/WhiteAT.com/MFC_%EC%9E%90%EB%A3%8C%EC%8B%A4/01_Dialog_%ED%98%95%ED%83%9C%EC%9D%98_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8_%EB%A7%8C%EB%93%A4%EA%B8%B0/723410_MakeDlg12.JPG" /></p> <p id="xMlFdJD"><img alt="" editor_component="image_link" sizes="(max-width: 521px) 100vw, 521px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d78b584f.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d78b584f.png 521w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d78b584f-300x286.png 300w" /></p> <p>ID : 컨트롤 번호<br /> Caption : 화면에 표시할 내용<br /> Visible :  화면에 보여줄 것인가?<br /> Group : 그룹으로 사용할것인가? (조금 복잡함)<br /> Help ID : 도움말에 관련된 사항<br /> Diabled : 수정이 안되게 할것인가?<br /> Tab Step : TAB 키로 포커스를 이동할것인가?<br /> <img editor_component="image_link" src="http://whiteat.com/file:///N:/20120924_%EC%8A%A4%ED%94%84%EB%A7%81%EB%85%B8%ED%8A%B8%EB%B0%B1%EC%97%85/WhiteAT.com/MFC_%EC%9E%90%EB%A3%8C%EC%8B%A4/01_Dialog_%ED%98%95%ED%83%9C%EC%9D%98_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8_%EB%A7%8C%EB%93%A4%EA%B8%B0/723416_MakeDlg13.JPG" /></p> <p id="zzHqRdr"><img alt="" editor_component="image_link" sizes="(max-width: 528px) 100vw, 528px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d8154d6e.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d8154d6e.png 528w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d8154d6e-300x107.png 300w" /></p> <p> </p> <p> </p> <p>ID 를 IDC_TEST_BUTTON 으로 Caption 을 TEST버튼으로 하겠다.</p> <h4>버튼 이벤트</h4> <p>버튼을 눌렀을 때 실행될 함수는?<br /> 버튼을 눌렀을 때 메세지를 보여져야 하는데 어디서 해야 할까?<br /> 버튼을 눌렀을 때 실행되는 함수를 만들면 된다.(간단하다)</p> <p>버튼에서 마우스 오른쪽을 클릭하면 메뉴 중에 [ClassWizard] 라고 있다.</p> <p>( Classwizard란 프로그램을 쉽게 할수 있게 도와주는 툴이라고 생각하면 된다.)</p> <p><img editor_component="image_link" src="http://whiteat.com/file:///N:/20120924_%EC%8A%A4%ED%94%84%EB%A7%81%EB%85%B8%ED%8A%B8%EB%B0%B1%EC%97%85/WhiteAT.com/MFC_%EC%9E%90%EB%A3%8C%EC%8B%A4/01_Dialog_%ED%98%95%ED%83%9C%EC%9D%98_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8_%EB%A7%8C%EB%93%A4%EA%B8%B0/723418_MakeDlg14.JPG" /></p> <p id="yvhQKGS"><img alt="" editor_component="image_link" sizes="(max-width: 741px) 100vw, 741px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d881656c.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d881656c.png 741w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d881656c-300x196.png 300w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d881656c-670x438.png 670w" /></p> <table> <tbody> <tr> <td>Object IDs : 해당 컨트롤 ID 를 선택<br /> Messages    : 어떤일을 할것인지를 나타냄<br /> BN_CLICKED               : 마우스를 클릭했을 경우<br /> BN_DOUBLECLICKED  : 마우스를 더블 클릭했을 경우<br /> 여기서는 BN_CLICKED (마우스 클릭)를 선택하면 된다.Member functions<br /> 현재 클래스에서 만들어진 함수를 보여준다. <p> </p> <p>Add Class    :  새로운 클래스는 만드는 작업<br /> Add Function:  새로운 함수 만드는 작업 <=여기서 버튼을 눌렀을 때 실행될 함수를 만들것이다.</p> <p>Delete Function: 생성된 함수를 지우는 버튼인데, 지금은 사용을 하지 말것!!.<br /> Edit Code      : 생성되어 있는 함수를 수정</p> </td> </tr> </tbody> </table> <p>필요한 것을 체크 했으니 Add Function 으로 함수를 생성하자.<br /> 함수명을 물어보는데, 기본값으로 두자.</p> <p><img editor_component="image_link" src="http://whiteat.com/file:///N:/20120924_%EC%8A%A4%ED%94%84%EB%A7%81%EB%85%B8%ED%8A%B8%EB%B0%B1%EC%97%85/WhiteAT.com/MFC_%EC%9E%90%EB%A3%8C%EC%8B%A4/01_Dialog_%ED%98%95%ED%83%9C%EC%9D%98_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8_%EB%A7%8C%EB%93%A4%EA%B8%B0/723478_MakeDlg15.JPG" /></p> <p id="IARKSgw"><img alt="" editor_component="image_link" sizes="(max-width: 386px) 100vw, 386px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d93a1fcd.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d93a1fcd.png 386w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d93a1fcd-300x116.png 300w" /></p> <p>OK 후 EDIT code 누르면,<br /> WATTetrisView.cpp 파일의 마지막 줄에<br /> 아래와 같은 코드가 생길 것이다.</p> <p> </p> <p><img editor_component="image_link" src="http://whiteat.com/file:///N:/20120924_%EC%8A%A4%ED%94%84%EB%A7%81%EB%85%B8%ED%8A%B8%EB%B0%B1%EC%97%85/WhiteAT.com/MFC_%EC%9E%90%EB%A3%8C%EC%8B%A4/01_Dialog_%ED%98%95%ED%83%9C%EC%9D%98_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8_%EB%A7%8C%EB%93%A4%EA%B8%B0/723482_MakeDlg16.JPG" /></p> <p id="ZpDuQex"><img alt="" editor_component="image_link" sizes="(max-width: 573px) 100vw, 573px" src="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d9e6188d.png" srcset="https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d9e6188d.png 573w, https://docs.whiteat.com/wp-content/uploads/2017/10/img_59df6d9e6188d-300x244.png 300w" /></p> <p>즉, TEST_BUTTON을 누르면 OnTestButton()함수가 실행이 되는 것이다.<br /> 이제 함수안에 메세지를 보이는 내용만 추가하면 된다.<br /> 메세지 보이게 하는 것은 한줄이면 된다.<br /> MessageBox(“안녕하세요”);</p> <p> </p> 1 2007.12.20
154 일반 IAR compiler for avr 관련 코딩 질문요.~~!(급질) 4 2008.01.03
153 일반 IAR 컴파일러 환경에서 AVR128 Timer1 인터럽터 구현이 안되요.. 2 2008.01.04
152 일반 LED 깜빡 거림. 8 2008.01.08
151 일반 인터럽트 루틴을 메인으로 빼고자 하는데 가능할 지요? 12 2008.01.09
150 일반 함수인자를 구조체 변수나 구조체 주소로 받는 것. 2 2008.01.14
» 일반 RS485 통신 방법 3 2008.01.22
148 일반 mfc 테트리스 질문이요~ 1 2008.05.15
147 일반 c++구조체와 함수를사용해서 성적표만들기 1 2008.05.29
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 Next
/ 11