메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

묻고 답하기
WhiteAT2008.01.23 09:52
1. 속도
    일반적으로 사용하는 9600bps 로 통신을 한다면,
    1초에 약 100바이트를 보내게 됩니다.
     즉 1바이트를 보내는데 10mS 가 소요됩니다.

    5바이트 이상의 데이터를 보낸다면 50mS 안에 응답을 완료하기 힘들겁니다.


2. (무조건) RX는 인터럽트로 처리해야 하고요....
    (다른 루틴 처리하다 데이터를 잃을 경우가 생길수 있기 때문에)
     Tx 는 while로 처리하면 될듯합니다.

    circular Queue 를 사용하여 RX데이터를 처리하면 간단합니다.
    즉, 데이터를 RX인터럽트로 받어 Q에 넣고, 수시로 수신된 데이터의 갯수를 체크하고, RX 데이터를 검사하는 겁니다.
    여기에서 응답해야 하는 패킷을 들어 왔을 경우에는 바로 응답을 보내지 않고, 플래그를 하나 만들어서, SET 하고,
    while()의 TX함수에서 그 플래그가 SET되어 있는 경우에 응답해주면 될겁니다.



간단하게 구조를 보면 아래처럼 될겁니다.

RX인터럽트(){
    큐에 보관....
}

TX함수(){  // 딜레이 타이머를 지정하지 않음
    데이터를 보내야 하면 => 데이터를 보내라.
}

RX데이터분석함수(){ // 딜레이 타이머를 지정하지 않음
     큐에 분석할 만한 데이터의 수가 있는가? 그렇지 않다면 그냥 나감.
     큐에 헤더, 데이터등의 패킷이 유효한가? 그렇지 않다면 (노이즈이기 때문에) 큐를 초기화 하고 나감
     패킷을 분석하여 TX 를 하겠다는 플래그 SET,  큐 초기화    
}

while(){
  TX함수();
  기타함수들();
  RX데이터분석함수();
}
  
사진 및 파일 첨부

여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.

파일 용량 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )