Можно ли отправить NUL по последовательной линии?

Можно ли отправить NUL по последовательной линии?

Значение символа ASCII «NUL» равно 0. Можно ли отправить этот символ по последовательной линии, не интерпретируя его как отсутствие отправки данных?

решение1

Да, конечно. Обрамление символов отделено от их содержания. Нет причин, по которым восемь нулевых битов по сути интерпретировались бы как «данные не отправляются» — не больше, чем сектор диска, полный нулей.

Уточняю: в типичном асинхронном последовательном порте у вас есть стартовый бит, затем восемь бит данных, затем стоповый бит. У вас все еще будет восемь бит данных — они просто окажутся нулями. Стартовый и стоповый биты сообщают приемнику: «Вот символ». То, какими битами являются биты в символе, не имеет значения.

Если принимающая программа интерпретирует NUL как «нет данных», это ее дело, но это проблема прикладного уровня.

Например, если принимающая программа — это эмулятор терминала, то она, скорее всего, ничего не сделает, получив NUL (потому что именно так и поступают большинство реальных терминалов). API последовательного порта все равно зарегистрирует получение символа NUL и передаст его программе. Это эмулятор терминала решил: «О, я просто проигнорирую это».

Существует множество приложений для отправки «двоичных» данных по асинхронным последовательным линиям, которые не сработали бы, если бы NUL-данные вообще не отправлялись и не принимались.

Для получения более подробной информации см.https://en.wikipedia.org/wiki/Асинхронная_последовательная_связь

решение2

Последовательный протокол имеет стартовые и стоповые биты, и данные ограничены ими - N81 (без контроля четности, 8 бит, 1 стоповый бит позволит вам отправить любой символ ASCII и является одной из общих кодировок), таким образом, отправляя стартовый бит или не отправляя стартовый бит, можно отличить отсутствие данных от нуля.

Связанный контент