|
소스에서 보니 받은 부분과 쓰는 부분이 연결 안되어있네요 그리고 포트의
파라메터를 수신으로 한게 맞는지요 프로퍼티에서 수신문자가 얼마일때
인터럽트가 걸리게 셋팅했는지 안나타나 있군요
제가 쓸때는 수신시 1문자마다 인터럽트가 오게셋팅해도 읽어보면
여러자가 들어온상태이므로 계속 더하여야 합니다
rxchar 인터럽트는 계속 드나들며 발생하므로 그곳에서 맴돌게 만들면
프로그램이 서버림 (계속 버퍼를 읽어서 들어온것을 검사해야함)
그리고 통신의경우 헤더와 테일이 있을텐데 그것을 찾아서 올바른 데이타
패킷인지 처리하는 부분도 없는것 같고
초보자올림 님이 쓰신 글 :
: 고수님들의 조언 부탁 드립니다. ^^
:
: 데이터를 시리얼로 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);
:
: 저장 루틴에서 데이터가 제대로 저장이 되지 않네요.
:
: 고수님들의 예리한 눈으로 잘못 된 부분을 지적 좀 해 주세요^^
:
: 조언 기다리고 있겠습니다.
:
: 그럼 즐거운 하루 되세요
|