1

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

2 ответа2

4

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

Для уточнения: в типичном асинхронном последовательном соединении у вас есть стартовый бит, затем восемь битов данных, затем стоповый бит. У вас все равно было бы восемь битов данных - они просто оказались бы нулями. Начальный и конечный бит сообщают получателю "вот персонаж". То, что происходит с битами персонажа, не имеет значения.

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

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

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

Для получения дополнительной информации см. Https://en.wikipedia.org/wiki/Asynchronous_serial_communication.

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .