|
마이컴에서 10개를 한번에 보낸다고 하더라도
ComPort에서는
8개 들어오고 2개 들어올수도 있구
4개 3개 3개... 뭐 이런식으로 들어올수도 있구
한번에 10개 다 들어올수도 있구
또는 10개 이상 .. 다음 데이터와 함께 들어올수도 있구..
결론적으로 10보낸다고 10개 한번에 들어오지 않을수 있다는것이 중요합니다.
그러니 님께서는 배열의 index를 global로 가지고 계시면서 그걸 이용해서 index로 써야하구요
ComPort의 Count는 그냥 수신된 갯수로만 사용해야 합니다.
그럼..
bear 님이 쓰신 글 :
: avr이란 마이컴하고 232 통신을 하는데...
: 마이컴에서는 아래와 같이 10개의 데이타를 보내고
:
: fputc(adc[0],COMM1);
: fputc(adc[1],COMM1);
: fputc(adc[2],COMM1);
: fputc(adc[3],COMM1);
: fputc(adc[4],COMM1);
: fputc(adc[5],COMM1);
: fputc(adc[6],COMM1);
: fputc(adc[7],COMM1);
: fputc(adc[8],COMM1);
: fputc(adc[9],COMM1);
:
: PC 프로그램에서는
: void __fastcall TfrmMeasure::ComPort1TriggerAvail(TObject *CP, WORD Count)
: {
: unsigned char ch,d1,d2,d3;
: String str;
: for(int i=0;i<Count;i++)
: {
: ch = ComPort1->GetChar();
: switch (i)
: { //testSerial,testSerial_00
: case 0x00 : Adc2Data[0] = ch ; break;
: case 0x01 : Adc2Data[1] = ch;break;
: case 0x02 : Adc2Data[2] = ch ; break;
: case 0x03 : Adc2Data[3] = ch;break;
: case 0x04 : Adc2Data[4] = ch ; break;
: case 0x05 : Adc2Data[5] = ch;break;
: case 0x06 : Adc2Data[6] = ch ; break;
: case 0x07 : Adc2Data[7] = ch;break;
: case 0x08 : Adc2Data[8] = ch ; break;
: case 0x09 : Adc2Data[9] = ch;break;
: }
: }
: for(int i=0;i<10;i++)
: adc[i] = Adc2Data[i];
:
: GasN2 = (adc[0]<<8) | adc[1];
: GasO2 = (adc[2]<<8) | adc[3];
: GasAr = (adc[4]<<8) | adc[5];
: DcVol = (adc[6]<<8) | adc[7];
: DcCur = (adc[8]<<8) | adc[9];
:
: str.sprintf("adc1 : %06ld--adc2 : %06ld--adc3 : %06ld--adc4 : %06ld--adc5 : %06ld",GasN2,GasO2,GasAr,DcVol,DcCur);
: m_rev_str = str;
: DisplayReceiveMessage();
: }
:
: 이렇게 받아서 처리를 할려고 하는데 문제는 8개까지는 잘 읽어서 표시 되는데 8개를 넘어서면 읽혀지지 않고 처음으로 가서 표시됩니다. 해결 할 수 있는 방법이......도움 부탁드립니다.
|