Пришло время отправить 32 КБ на скорости 9600 бод?

Мне интересно, верна ли моя математика здесь. Если моя скорость передачи 9600, то это означает, что каждую секунду отправляется 9600 бит, верно? Если так, то:

9600 bit/sec <=> 1000 ms/ 9600 bit = 0.1042 ms/bit

Таким образом, отправка 32 КБ должна занять:

32,000*(8+2) bits = 320,000 bits -- (8+2) because 8 data bits + 1 start bit + 1 stop bit
320,000 bits*0.1042 ms/bit = 33344 ms = 33.344 sec

Это правильно?


person Nate    schedule 28.09.2012    source источник
comment
32 КБ = 32 * 1024 = 32768 байт. Кроме этого, и при условии отсутствия задержек рукопожатия или отставания передатчика от водителя, да.   -  person Hans Passant    schedule 29.09.2012
comment
Ваш вопрос неполный, потому что вы указываете только последовательное соединение. Последовательные соединения могут быть синхронными или асинхронными. Более распространенным последовательным соединением, конечно же, является асинхронное EIA-232 (также известное как RS-232). Для асинхронного последовательного соединения скорость передачи данных указывает только скорость передачи данных для битов в кадре символа. Атрибут асинхронный означает, что время между символьными кадрами не указано. Таким образом, время отправки через асинхронное последовательное соединение может быть ограничено только минимальным временем и не ограничено максимальным временем.   -  person sawdust    schedule 29.09.2012
comment
Технически скорость передачи определяет количество символов в секунду; а не биты. Если я правильно помню, модемы телефонных линий достигли максимальной скорости 9600 бод, но, кодируя больше битов на символ, мы можем достичь скорости от 14,4 кбит/с до 57,6 кбит/с. В противном случае я думаю, что ваша математика верна, игнорируя любые другие факторы, такие как исправление ошибок.   -  person Ian Clelland    schedule 02.10.2012
comment
Для всех традиционалистов, спорящих о том, в каких случаях килограмм означает 1024, а в каких 1000: прекратите уже это. Пожалуйста. Кило означает 1000×. Киби означает 1024×. Период.   -  person ulidtko    schedule 11.03.2020


Ответы (3)


Действительно, но вы потеряли точность, умножив свою аппроксимацию разрядности, так что указание времени до трех знаков после запятой неверно.

Чтобы избежать потери точности, не используйте округленное промежуточное выражение, а скорее:

bytes x bits_per_character / bits_per_second

Итак, в вашем случае:

32000 x 10 / 9600 = 33.333(recurring) seconds.

Однако традиционно 32 КБ относится к 32 x 1024 байтам, поэтому в этом случае:

32 x 1024 x 10 / 9600 = 34.1333(recurring) seconds.
person Clifford    schedule 29.09.2012
comment
Ответ из шести значащих цифр необоснован, поскольку для правильного ответа требуется, чтобы слова, по крайней мере, были добавлены к значению. Вы не можете оговаривать или предполагать, что между каждым символьным кадром существует абсолютно нулевое мертвое время. Кстати, 32Kb относится к 32 x 1024 байтам и должен быть заглавным B в Kb. - person sawdust; 29.09.2012
comment
@sawdust: Не стесняйтесь редактировать Kb, если вы действительно искренне думаете, что это вообще важно или каким-то образом яснее! Что касается межсимвольного интервала, конечно, это допустимо. Но, возможно, можно было бы предположить, что если этот расчет вообще важен, то конструкция должна гарантировать, что UART будет получать данные на протяжении всей передачи, что обычно не будет проблемой при таких низких скоростях передачи данных. - person Clifford; 30.09.2012

Если вам нужно приблизительно проверить величину (будь то 3 с, 30 или 300), помните, что 9600 кбит/с ~ 1 КБ/с (10 бит, если у вас есть 2 дополнительных бита четности/стоп), поэтому 32 КБ -> около 32 секунд.

person makapuf    schedule 28.09.2012
comment
Достаточно справедливо для приближения, но в вопросе указано время с точностью до трех знаков после запятой; так что, возможно, требуется больше, чем приближение? - person Clifford; 29.09.2012
comment
Таким образом, вы могли бы сказать, что это занимает около одной миллисекунды на байт, верно? - person mvermand; 17.01.2017

Мне интересно, верна ли моя математика здесь. Если моя скорость передачи 9600, то это означает, что каждую секунду отправляется 9600 бит, верно? Если так, то:

9600 бит/сек ‹=› 1000 мс/9600 бит = 0,1042 мс/бит

Таким образом, отправка 32 КБ должна занять:

32 000 * (8 + 2) бит = 320 000 бит -- (8 + 2), потому что 8 бит данных + 1 стартовый бит + 1 стоповый бит 320 000 бит * 0,1042 мс/бит = 33344 мс = 33,344 с

Это правильно?

Нет. Это больше похоже на 3,33 секунды.

person Jim    schedule 21.02.2021