9600bps에서 반이중 RS-485 프로토콜을 통해 UART 직렬 포트에 연결된 스트림에서 데이터를 읽는 중입니다. 데이터 : 8 비트, 임베디드 장치에서 패리티 없음 1 비트 중지.UART 스트림 읽기 - 데이터 청크
필자가 연결 한 시스템은 20ms 간격으로 2 바이트와 10 바이트 사이의 바이너리 명령을 전송한다는 것을 알고 있습니다.
나는 다음과 같은 플래그 스트림에 액세스 :
uart0_filestream = open(COM_UART_DEV, O_RDWR | O_NOCTTY | O_NDELAY);
그러나, 10 바이트 명령을 내 응용 프로그램에 체크섬 오류의 원인이 절반으로 청크 분할됩니다 자주 발생합니다. 나는 매 20ms마다 폴링을 할 필요가 있는데, 내가 찾은 유일한 해결책은 설문 조사 사이의 수면 시간을 줄이는 것이고, 나는 그것을 원치 않는다.
스트림 버퍼의 내용을 읽기 전에 전송이 완료되었는지 확인하는 데 사용할 수있는 플래그 또는 스마트 방법이 있습니까?
하드웨어 핸드 셰이크에 문제가 있습니까? –
@ πάνταῥεῖ 아마도 다른 장치가 어떤 종류의 흐름 제어를 기대하지는 않을 것입니다. – Machinegon
최악의 시나리오 (분명히 발생)는 장치가 매 20ms마다 메시지를 보내고 프로그램이 해당 전송 중간에 20ms마다 폴링/읽기 (** 10ms ** 또는 ** 50 일 수 있음)입니다 xmit 간격의 % **). 보낸 사람과 동기화 할 메커니즘이 없습니다. 폴링 간격을 늘리고 싶지는 않습니다. 당신은 투표율을 높여야합니다. BTW는 읽기 시스템 콜당 완전한 바이너리 메시지 패킷을 가져올 것을 기대합니다. 비 차단 모드를 사용 중이므로 불편할 수 있습니다. 즉 VMIN 및 VTIME 기능을 사용할 수 없습니다. – sawdust