|
고수님들의 조언 부탁 드립니다. ^^
데이터를 시리얼로 4096바이트를 일정 간격으로 받을려고 합니다.
물론 Cport 라이브러리를 사용하여 데이터를 받습니다.
그런데 4096바이트 데이터를 받고 나면 다음 데이터를 기다리다 보면
프로그램이 동작을 않습니다.
데이터 속도는 38400이구요. 이것 때문에 문제가 되는것이 아닌지...
프로그램은 간단히 아래와 같이...
unsigned long Index, Count;
void __fastcall TForm1::FormPaint(TObject *Sender)
{
if((Buffer = (unsigned char *)malloc(4096*1000)) == NULL) {
Close();
return;
}
}
void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count1)
{
String Str;
unsigned char str[3];
unsigned long i;
for(i=Index;i<Index+Count1;i++) {
ComPort1->ReadStr(Str, 1);
strcpy(str,Str.c_str());
Buffer[i] = str[0];
}
Index += Count1;
Count = Index;
if(Index%4096 == 0){ // 4096 받을때 마다 버퍼 클리어
if(ComPort1->Connected == true) {
ComPort1->ClearBuffer(true, true);
ComPort1->Close();
}
if(ComPort1->Connected == false) {
ComPort1->Open();
ComPort1->ClearBuffer(true,true);
}
}
}
/////////////////////////////////////////
/////// 바이러리로 저장 루틴... ///////////
/////////////////////////////////////////
FILE *fp;
unsigned char cal_data;
unsigned long i;
if ((fp=fopen("dat1.aaa","wb+"))== NULL){
fprintf(stderr, "Cannot open output file.\n");
return ;
}
for(i=0;i<Count;i++) {
cal_data = Buffer[i];
fwrite(&cal_data,1,sizeof(unsigned char),fp);
// fprintf(fp,"%c",cal_data);
}
fclose(fp);
저장 루틴에서 데이터가 제대로 저장이 되지 않네요.
고수님들의 예리한 눈으로 잘못 된 부분을 지적 좀 해 주세요^^
조언 기다리고 있겠습니다.
그럼 즐거운 하루 되세요
|