|
대충 전달과정을 그려보면
sw1-device Driver-serial port - line ....... line - serial port - device driver - sw2
sw1에서 tx를 하면 그게 바로 sw2까지 가는게 아닙니다.
DeviceDirver 에서 받죠 그다음은 DeviceDirver 에서 처리합니다.
sw에서는 DeviceDirver 까지만 가고 보내고 return 됩니다.
그러니 님께서 원하시는데로 이벤트가 발생하지 않습니다.
sw1에서 한번에 100Byte를 보내도 수신쪽에서는 두번,세번에 걸쳐서 받을수 있습니다.
님처럼 5번에 걸쳐서 보내도 5번이 아니라 1~2번 안에 모두 수신할 수도 있습니다.
송신 pc의 SerialPort와 수신PC의 SerialPort가 다이렉트로 연결되어있다 하더라도
수신이벤트는 천자만별 만약 중간에 모뎀이 있거나 하면 더욱 이상하게 되죠
------------------------------------------------
그리고 님의 말씀대로 sw1에서 tx중에는 rx하지 못할것입니다.
tx중간에 들어온것이 있다하더라도
tx가 끝나고 난뒤에 rx이벤트가 뜰것입니다.
------------------------------------------------
대충 아래와 같은식으로 하면 tx와 rx가 순차적으로 일어날것입니다.
옛날에 쓰던 XModem식 프로토콜로 해야 한다는겁니다.
SW1.전송함수
{
do
{
1. ComPort 전송(데이타)
2. ComPort 수신체크(잘받았다.)
}while(!전송끝)
}
SW2.OnRxChar
{
Rx..
AllRxCount += RxCount
if(AllRxCount==단위Size)
{
AllRxCount=0;
ComPort 전송-잘받았다.
기타 처리..
}
}
XModem을 쓰라는 얘기가 아닙니다.
그럼..
조각발 님이 쓰신 글 :
: Break Point 써서 확인도 안되고 해서 다시 질문 드립니다.
: 다음과 같은 경우에요..
: *********************************************************************
: 프로그램 1
: A 함수
: {
: ComPort->Write( szData1 , Count ); // szData들은 5바이트고요
: ComPort->Write( szData2 , Count );
: ComPort->Write( szData3 , Count );
: ComPort->Write( szData4 , Count );
: ComPort->Write( szData5 , Count );
: }
: OnRxChar 함수
: {
: ComPort->Read( szRead , Count ); // 받아서
: ..................... // 데이터 처리를 합니다
: }
: *********************************************************************
:
: *********************************************************************
: 프로그램 2 - ComPort 에서 받은 데이터를 그대루 다시 보내줍니다.
: OnRxChar 함수
: {
: ComPort->Read( szRead, Count );
: ComPort->Write( szRead, Count);
: }
: *********************************************************************
:
: 프로그램 1 과 2 를 시리얼로 연결시키고 테스트를 했는데.. 궁금한건요..
:
: 프로그램 1에서 ComPort->Write 를 연속으로 보내지요.. 헌데 프로그램 2는 받은 즉시
: 프로그램 1로 다시 보내니깐,
:
: 순서로 보면
:
: 1 ComPort->Write( szData1 , Count );
: 2 프로그램 2의 OnRxChar
: 3 ComPort->Write( szData2 , Count );
: 4 프로그램 2의 OnRxChar
: 5 ComPort->Write( szData3 , Count );
: 6 프로그램 2의 OnRxChar
: 7 ComPort->Write( szData4 , Count );
: 8 프로그램 2의 OnRxChar
: 9 ComPort->Write( szData5 , Count );
: 10 프로그램 2의 OnRxChar
: 11 프로그램 1의 OnRxChar
:
: 제 생각은 이런식으루 되는게 아닐까 싶어서요..
: 다른 인터럽트나 스레드 같은건 안돌리니깐 프로그램 1의 A함수가 다 처리되야 다른 놈으로 넘어가니깐..
: 제 생각대로 된다면 프로그램 1의 OnRxChar에서 받을 수 있는건 어떻게 되는지..
: szData5 만 받을수 잇는건지..
: 아니면 Count 가 25가 되어.. szData1 ~ 5를 통채로 받는건지..
: 이게 궁금했거든요..
:
: 근데 이렇게 순서가 안되는거 같아요, 데이터 처리에서 각 데이터를 처리가 되더라구요
: ComPort의 OnRxChar이 언제 활성화 되는건가요?
: 프로그램 1의 A함수 도중에 데이터가 수신된다고 해서 OnRxChar로 넘어가면 안되는게 아닌가해서요.
:
: 답변 부탁드리겟습니다.
|