
ASCII 문자 "NUL"의 값은 0입니다. 데이터가 전송되지 않는 것으로 해석되지 않고 직렬 회선을 통해 이 문자를 보낼 수 있습니까?
답변1
물론이죠. 문자의 프레임은 내용과 별개입니다. 0의 8비트가 본질적으로 "데이터가 전송되지 않음"으로 해석될 이유가 없습니다. 이는 0으로 가득 찬 디스크 섹터가 그렇듯이 마찬가지입니다.
자세히 설명하자면: 일반적인 비동기 직렬에는 시작 비트, 8개의 데이터 비트, 정지 비트가 있습니다. 여전히 8개의 데이터 비트가 있을 것입니다. 모두 0이 될 것입니다. 시작 및 정지 비트는 수신자에게 "여기에 문자가 있습니다"라고 알려줍니다. 캐릭터의 비트가 무엇인지는 관련이 없습니다.
수신 프로그램이 NUL을 "데이터 없음"으로 해석하는 경우 이는 해당 프로그램의 문제이지만 이는 응용 프로그램 계층 문제입니다.
예를 들어, 수신 프로그램이 터미널 에뮬레이터인 경우 NUL을 수신할 때 아무 작업도 수행하지 않을 가능성이 높습니다(대부분의 실제 터미널이 그렇게 했기 때문입니다). 직렬 포트 API는 여전히 NUL 문자 수신을 등록하고 이를 프로그램에 전달합니다. "아, 그냥 무시하겠습니다"라고 결정한 것이 터미널 에뮬레이터입니다.
NUL이 전혀 전송되거나 수신되지 않았다면 실패했을 비동기 직렬 회선을 통해 "바이너리" 데이터를 전송하는 응용 프로그램이 많이 있습니다.
자세한 내용은 다음을 참조하세요.https://en.wikipedia.org/wiki/Asynchronous_serial_communication
답변2
직렬 프로토콜에는 시작 및 중지 비트가 있으며 데이터는 N81(패리티 없음, 8비트, 1개의 정지 비트로 모든 ASCII 문자를 보낼 수 있으며 1개의 공통 인코딩임) 내에서 보호됩니다. 따라서 시작 비트 또는 시작 비트를 보내지 않으면 아무것도 없는 것과 null을 구별할 수 있습니다.