|
자세히는 보질 못했지만
sizeof("korea\n\r")
이 부분이 조금 눈에 거슬리네요~
sizeof(char) * strlen("korea\n\r")
이렇게 해야 하는거 아닌가요? 별 차이는 없지만 나중에 NULL 문자가...
아니면 편하게 strcpy 함수를 사용하시는 것도 방법이겠네요.
그리고 serial_number 변수 값 for 실행 하기 전에 초기화 시켜 주시구요
데이터 받는 부분과 UI에 반영 하는 부분과는 분리 해서 작업 하는 습관을 들이세요~
UI는 UI일 뿐~ UI에 데이터를 받고 처리하는 로직이 들어가면 나중에 유지보수 관리하기 힘들어 집니다.
데이터 처리 부분은 별도 클래스를 두고 관리하세요~
그럼 수고하세요~ *^^*
번외편 님이 쓰신 글 :
: 시리얼 데이터 통신을 아래와 같이 쓰고 있는데 문제가 있는지...
: 많이 버벅이고 조금씩 오동작을 하는거 같습니다.
: 놓치고 있는부분이나 잘못하고 있는부분좀 잡아주세요
: 하루종일 디버깅을 해봐도 잘 안되네요
:
:
: int i,j,k;
: char Buff[100];
: static char data[1000];
: static unsigned int serial_number;
: char serial_data[1000];
:
: String *Str_Data = new String;
:
: Comm1->Read(serial_data,Count);
:
: RzMemo1->Lines->BeginUpdate() ;
: //if( Count< 200)
: //{
: for(i=0;i<Count;i++)
: {
:
: data[serial_number] = serial_data[i] ;
:
: if( data[serial_number] == 0x0d )
: {
: if( (data[0] != 0x1b) && (data[1] != 0x1b) )
: {
: *Str_Data = (char)data[0];
: for(j=1;j<serial_number;j++)
: {
: *Str_Data = *Str_Data + (char)(data[j]);
: }
:
:
: RzMemo1->Lines->Add(*Str_Data ) ;
: RzMemo1->Perform(WM_VSCROLL, SB_BOTTOM, 0);
:
: //while(RzMemo1->Lines->Count>40)
: //RzMemo1->Lines->Delete(0);
: //RzMemo1->Perform(EM_LINESCROLL,0,RzMemo1->Lines->Count-1);
:
: //RzMemo1->SelStart=RzMemo1->Text.Length()-2;
: //RzMemo1->SelLength=1;
:
:
: }
:
: if(strstr(data,"Hello")!=NULL)
: {
:
: memset(ok,0,100);
: memcpy(ok,&data[17],20);
: Form6->RzStatusPane3->Caption = ok;
:
: //memset(data,0,100);
: }
:
: else if(strstr(data,"NAME")!=NULL)
: {
:
: memset(NAME,0,100);
: memcpy(NAME,&data[22],20);
: Form6->RzStatusPane1->Caption = NAME;
:
: //memset(data,0,100);
: }
:
: else if(strstr(data,"PASS")!=NULL)
: {
: UDP_Connect=0;
: RzMemo3->Lines->Add(DateTimeToStr(Now()) + ' ' +" 자동끊김");
: Timer4->Enabled=true;
: }
:
: memset(data,0,serial_number +10);
: serial_number = 0;
: }
:
: else if(strstr(data,"Enter user name: ")!=NULL)
: {
: memset(Buff,0,100);
:
: memcpy(Buff, "korea\n\r",sizeof("korea\n\r"));
: com = Comm1->Write(Buff,sizeof("korea\n\r"));
: Label6->Caption = "name ok";
:
: memset(data,0,100);
: }
:
: else if(strstr(data,"Enter login password: ")!=NULL)
: {
: memset(Buff,0,100);
:
: memcpy(Buff, "Time\n\r",sizeof("Time\n\r"));
: com = Comm1->Write(Buff,sizeof("Time\n\r"));
: Label7->Caption = "pass ok";
:
: memset(data,0,100);
: }
:
: else
: {
: serial_number++ ;
: }
:
: //if( serial_number > 100) serial_number = 0 ;
: }
: //}
: RzMemo1->Lines->EndUpdate() ;
|