|
답변 감사드립니다~ ^^
헌데 제가 여쭤본건 디버깅 Watch 창에서 데이터를 확인해보구 여쭤본거거든용.. ^^
그정도는... 할줄 아는... ^^
데이터를 확인해 보면 0x7F 이하 일때는 *szRead의 값(szRead[0] 한 바이트니깐..)이 딱 0x7F 로 나타나는데
0x80 이상의 데이터를 사용하면 szRead[0]의 값이 0xFFFFFF80 (앞의 3 바이트에 F 가..) 가 되더라구요..
이 이유를 모르겠더라구용.. 함수를 찾을 수가 없어서..
혹시 Write 나 Read의 함수의 원형을 볼 수 있는 방법이 있나요??
찾기를 해서 CPort 관련 파일들을 찾아봤는데 못찾겠드라구용..
아시면 좀 부탁드리겠습니당.. 꾸벅
크레브 님이 쓰신 글 :
: 해답은 아니고요..
:
: 최명권님이 직접 테스트해보실만한 것들이 몇가지 있군요^^
:
: 이런 문제가 생기면 실제 받는 데이터를 찍어보고 확인하셔야 합니다.
: 대충 날코딩해보면..
:
: TMemo 하나 올려놓으시고
:
: AnsiString sBuf;
: : for(int i = 0 ; i < Count ; i++)
: : {
: sBuf.sprintf("%02X", szRead[i]);
: TMemo1->Lines->Add(sBuf);
:
: : if(szRead[i] == ETX)
: : {
:
: : ShowMessage("ETX");
: : continue;
: : }
:
: 이렇게만 해보셔도 보낸 데이터와 날라온 데이터가 어떻게 차이가 나서
: 조건으로 안들어가는지 확인할 수 있지 않을까요?
: 질문을 하거나 디버깅은 그 다음입니다.
:
: 혹시 RS232C통신이 8비트가 다 전송되는것이 아니라 7비트만 전송되는건지 의심해볼수도 있고요
: (결과만 본다면 말이죠 )
: 7비트만 전송되는거라면 ..옵션에 따라 1비트가 패리티 비트로 쓰이지 않을까하는 생각도 해보시고..등등
:
: 이것저것 많이 고민해보세요
: 그만큼 실력이 늘어나는것이니까요
:
:
: 최명권 님이 쓰신 글 :
: : 금목암 님이 쓰신 글 :
: : : 최명권 님이 쓰신 글 :
: : : : szBuf(0xFF) 를 Write(szBuf, 1);
: : : :
: : : : 이렇게 보내고 워치 창에서 szBuf[0] 을 봣는데요
: : : :
: : : : 왜 ' ' 공백이 찍히나용??
: : : :
: : : : 매크로 값이 0x7F 을 넘는 값을 보내면
: : : :
: : : : Read 할 때 값을 보니깐 0xFFFFFF7F 가 찍히나요??
: : : :
: : : : 7F를 안넘으면 딱 두자리로 들어오던데...
: : :
: : : 글자를 바이너리아니고 아스키로 받으신거 같네요
: : : 그리고 xFFFFFF7F 는 lobyte(buffer) 로 마스킹해야 합니다
: : : 보통 4바이트가 1문자 입니다
: :
: : 확실하게 하려면 마스킹을 꼭해야겟네요..
: :
: : 저.. 질문 한개만 더요.. 제가 마스킹을 안하고 그냥 해봤거든요
: :
: : 보내는 쪽에서는
: : ======================================================
: : unsigned char szBuf[2];
: :
: : szBuf[0] = ETX;
: :
: : ComPort->Write(szBuf, 1);
: : ======================================================
: :
: : ComPortRxChar 에서는
: : ======================================================
: : char *szRead = new char[Count + 1];
: :
: : ComPort->Read(szRead, Count);
: :
: : for(int i = 0 ; i < Count ; i++)
: : {
: : if(szRead[i] == ETX)
: : {
: : ShowMessage("ETX");
: : continue;
: : }
: : ................ 뒷코드 생략 ....................
: : }
: : ======================================================
: :
: : 이렇거든요..
: : 여기서 ETX는
: : #define ETX 0x7F
: : 를 할 경우에는"ETX" 메시지가 출력되는데
: : ETX가 0x7F 를 넘어서게 되면(0x80 ~ 0xFF) "ETX" 메시지가 출력이 안되더라구요..
: :
: : 제가 어떤 걸 놓치구 얘기하는 것일까요?
|