Можно ли отправить NUL через последовательную линию?

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

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам