[오리지널] 저속 직렬 통신 경험

2255 단어 직렬 통신

[오리지널] 저속 직렬 통신 경험


쓸데없는 말을 잔뜩 늘어놓았으니, 다음은 본론으로 들어가자.
Author: chad Mail: [email protected]
본문은 자유롭게 전재할 수 있으나, 전재는 반드시 출처와 본 성명 정보를 명기해 주십시오.
실제 프로젝트에서 여러 차례 적외선 데이터 송수신 문제에 부딪혔는데 프로그램 구조는 다음과 같다.
send( data )
{
    set_send_mode()  // 
    write(data)    // 
    sleep(100 // 
    set_recive_mode() //   
}

위 프로그램의 문제점은 다음과 같습니다.
만약sleep시간이 너무 짧으면 데이터가 발송되지 못하고 데이터 프레임이 끊어지는 문제가 발생할 수 있다.sleep시간이 너무 길면 수신이 완전하지 못할 수 있고sleep시간은 발송 길이와 선형 관계가 없기 때문에 디버깅하기가 매우 어렵다.
효과적인 해결 방법은 데이터 전송을 바이트별 전송 모드로 바꾸는 것이다. 구조는 다음과 같다.
send( data )
{
    set_send_mode()  // 
    int i = 0for(i=0;i<size(data);i++)
    {
        write(data[i],1 // 
    }   
    sleep(10 // 
    set_recive_mode() //   
}

이렇게 하면 발송 후 아주 작은 고정 시간을 지연시켜 마지막 글자의 에너지 절약 발송이 완성될 수 있다는 장점이 있다.위의 방법에는 또 결함이 있다. 상대방의 회답이 매우 빠를 때 마지막 지연 시간은 수신이 정확하지 않을 수 있기 때문에 개선하는 방법은 다음과 같다.
send( data )
{
    set_send_mode()  // 
    int i = 0for(i=0;i<size(data);i++)
    {
        write(data[i],1 // 
    }   
    write(data[i],1 // 
    //sleep(10) // 
    set_recive_mode() //   
}

좋은 웹페이지 즐겨찾기