|
data[] 가 혹시 char 형이라면 byte ( unsigned char ) 형이어야 할것 같아요,.
번외편 님이 쓰신 글 :
: C++ Builder 6 유저입니다.
: comport 시리얼 통신을 하다가 send쪽은 되는데 receive가 잘 안되어서 질문 드립니다.
:
: 우선 receive 패킷 프레임은 아래와 같습니다.
: Preamble (4byte) : 0xa5 0xa5 0xa5 0xa5
: STX (1byte) : 0xAE
: Length (2byte) : stx~etx
: Type (2byte) : 0x0000 ~ 0xffff
: Opcode (1byte) : 0x00 ~ 0xff
: Data (Nbyte) : 0x00 ~ 0xff 길이 가변
: CRC (1byte) : length~data 합(%255)
: ETX (1byte) : 0xaf
: 이런 프레임을 가지고 있으며 length type opcode data 는 Preamble, STX, ETX의 데이터를 가질수 없으며
: stuffing을 해서
: Preamble과 동일 데이터는 0xa0 0x05로 send 및 receive를 하며
: STX 동일데이터는 0xa0 0x0e
: ETX 동일데이터는 0xa0 0x0f
: 데이터 중간 a0가 있을시 0xa0 0x00 입니다.
:
: send쪽은 전부 코딩했는데 receive를 하면서 데이터가 잘 받아지지 않습니다.
: 소스에 이상한부분이 있는지좀 봐주시면 감사드리겠습니다.
: c++ builder 6에 comm 컴포넌트 사용중입니다.
: 아래 소스 입니다.
:
: unsigned int SERIAL_LEN = 0;
:
: void __fastcall TForm1::Comm1RxChar(TObject *Sender, DWORD Count)
: {
: Comm1->Read(serial_data,Count);
: for(i=0;i<Count;i++)
: {
: buffer=serial_data[i];
:
: switch(serial_number)
: {
: case 0:
: if(buffer==0xa5)
: {
: serial_number=1;
: data[0]=buffer;
: }
: else
: {
: serial_number=0;
: message = 0;
: }
:
: case 1:
: if(buffer==0xa5)
: {
: serial_number=2;
: data[1]=buffer;
: }
: else
: {
: serial_number=0;
: }
: break;
:
: case 2:
: if(buffer==0xa5)
: {
: serial_number=3;
: data[2]=buffer;
: }
: else
: {
: serial_number=0;
: }
: break;
:
: case 3:
: if(buffer==0xa5)
: {
: serial_number=4;
: data[3]=buffer;
: }
: else
: {
: serial_number=0;
: }
: break;
:
: default:
: data[serial_number-1]=buffer;
: serial_number++;
: if(serial_number >= 1024 ) serial_number = 0;
: break;
: }
: if((unsigned int)((data[5]<<8)+data[6])<serial_number) <----- 이부분
: {
: }
: }
: serial_number = 0;
: }
:
: 위의 저 부분을 체크해보니 숫자를 강제로 length에 맞춰서 136과 같이 넣으면 동작되는데
: 저렇게 (unsigned int)((data[5]<<8)+data[6]) 넣으면 동작을 하지 않습니다.
: 먼저 stuff를 하고 if문이 들어가야 하지만 데이터에 stuff 해야하는 데이터를 넣지 않아도
: 동작을 하지 않네요.
:
: 어디 부분에서 잘못하고있는지 찍어주시면 감사하겠습니다.
: receive 되는 실제 패킷은 아래와 같습니다.
:
: 2011-03-15 23:22:43.785 [RX] - A5 A5 A5 A5 AE 00 84 02 00 00 01 01 00 00 00 10 04 07 90 23 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7D AF
: 또 다른 패킷
: 2011-03-15 23:30:15.325 [RX] - A5 A5 A5 A5 AE 00 09 12 00 EE 01 09 AF
|