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

370
user233009

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

1

2 ответа на вопрос

4
Jamie Hanrahan

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

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

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

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

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

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

Так как же будет выглядеть 0 через последовательную линию? user233009 7 лет назад 0
Один бит состояния «интервал», который будет начальным битом. Восемь больше разрядов "пробела" - биты данных, в этом случае все нули. А потом хотя бы один бит времени «маркировки» - стоповый бит. После этого переход в состояние «интервал» сигнализирует о начале следующего кадра символа. Это может произойти в любое время после завершения одного стопового бита (или любого другого требования; для нескольких старых устройств требовалось два или даже 1,5 стоповых бита); свободная строка удерживается в состоянии «маркировка» столько времени, сколько необходимо, до начала следующего кадра символа. Jamie Hanrahan 7 лет назад 2
0
davidgo

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

* «таким образом, отправляя стоп-бит или не отправляя стоп-бит, можно различить ничто и ноль» * - Не верно. Стоповый бит сам по себе невидим по сравнению с состоянием ожидания (метки). На самом деле это стартовый бит, который указывает, что на проводе есть что-то (то есть кадр), а стоп-бит (ы) подтверждает конец этого кадра. Отсутствующий / недопустимый стоповый бит (ы) генерирует ошибку кадрирования. В противном случае есть полученный символ с ожидающей / необязательной проверкой четности. sawdust 7 лет назад 0