직렬 포트를 통해 데이터를 수신할 때 중단 없이 깨끗한 전송 속도를 강제합니다.

직렬 포트를 통해 데이터를 수신할 때 중단 없이 깨끗한 전송 속도를 강제합니다.

저는 데이터의 하위 니블이 항상 동일한 순서를 따르는 PC로 데이터를 보낼 수 있는 마이크로컨트롤러를 사용하여 프로젝트를 만들었습니다. 예를 들어 내 데이터는 다음과 같이 전송됩니다.

x0 x1 x2 x3 x4 ..... xE xF

여기서 x는 0부터 F까지의 16진수 값입니다.

처음에는 전송이 잘 되지만 PC에서 마이크로컨트롤러로 데이터를 보낸 다음 데이터를 반환하면 항상 정확히 동일한 바이트 위치를 건너뛰려고 합니다. 예를 들어 대신...

x0 x1 x2 x3 x4......

나는 얻다:

x0 x2 x3 x4.....

코드와 그 효율성을 다시 확인하여 인코딩할 수 없도록 했습니다. 특히 PC에 데이터를 생성하는 동일한 함수가 매번 정확히 동일하고 해당 함수가 데이터 형식을 지정하여 낮은 니블이 시퀀스 번호인 경우에는 더욱 그렇습니다. 전송이 완료될 때까지 기다립니다.

이로 인해 일부 UNIX 설정을 적용해야 한다고 생각합니다.

setserial과 stty를 살펴봤지만 실제로 어떤 설정이 가장 좋은지 알고 싶습니다. 직렬 테스트가 실행되는 동안 내 컴퓨터가 다른 모든 프로세스를 잠궈도 상관 없습니다.

setserial에서 opening_wait 및 close_delay 옵션을 조정할 생각입니다. low_latency를 활성화하고 애플리케이션(일명 od)에서 Nice 및 ionice 명령을 사용하여 I/O를 관찰할 수도 있습니다. 그런데 또 제가 사용하고 있는 앱이 고장날 수도 있나요? 이것은 데이터를 읽는 데 사용하는 명령입니다.

od -t x1 -w16 -v /dev/ttyS0

그렇다면 직렬 포트에서 문자 손실 없이 모든 데이터를 얻을 수 있게 해주는 가장 유용한 UNIX 도구는 무엇입니까? 두 장치의 데이터 속도는 57600bps로 설정되어 있으며 1미터 길이의 직렬 포트 케이블을 사용하고 있습니다.

관련 정보