2017-03-01 1 views
0

Boost asio를 사용하여 직렬 포트와 통신 할 수있는 몇 가지 작동 코드가 있습니다. 우리가 관찰해온 한 가지는이 통신이 실시간이 아니며 언젠가는 상당한 대기 시간이 있다는 것입니다.Boost asio를 사용하는 실시간 직렬 I/O

모든 데이터를 직렬 포트에서 수신하고 목록의 대기 시간을 보내려합니다. 즉, 명시 적 플러싱 호출이 없기 때문에 일괄 처리를 읽거나 쓰는 동안 버퍼링을 피하거나 대기 시간을 늘리는 일반적인 우선 순위로 자체 스레드를 사용할 수있는 부스트 비동기 호출을 피할 수 있습니다.

실시간 시나리오에서 대기 시간이 가장 적은 직렬 포트 통신을 위해 부스트 asio를 사용하는 샘플 코드가 있습니까? 샘플 코드가 TCP/UDP 포트를위한 것이라면, 우리는 여전히 그것을 적응시킬 수있을 것입니다 ...

답변

1

ASIO는 실제로 이런 종류의 것을 제공하지 않습니다. 직렬로 직접가는 것이 더 나을 것입니다. 정확히 CPU에 부담이되는 것과는 다릅니다.

입력 버퍼링을 비활성화하는 것은 fcntl(fd, F_SETFL, FNDELAY);과 유사합니다. 블로킹 I/O가 켜져 있어도 항상 즉시 읽습니다.

보내기 강제로 쓰기는 tcdrain()입니다.

내가 마지막으로 직렬 I/O 코드를 작성한 이후로 오랜 세월이 지났지 만 위의 내용은 좋은 출발점입니다.

관련 문제