Tad писал(а):
Для скорости обмена 1200 бод нужен буфер не менее 1kb.
Так когда-то было
Вот именно, когда-то. На нашем несчастном компоненте я умудрялся читать 57600 без потерь, но не побайтово
Леонид писал(а):
Устройство передаёт с установленной скоростью 9600 бит пакеты данных по 20 символов, из них 13 -- стартовый ключ. Интервал между пакетами случайный в диапазоне от 10 до 1000 миллисекунд. Как часто (редко) надо считывать из буфера СОМ по 20 символов
Определяем длительность посылки одного пакета -- 20*10*1/9600~21 msec. Для твоего случая не пойдет, тк минимальное время между посылками у тебя равно 10 msec. Можно выбрать кратные пакеты, но время их опроса должна быть меньше 10 msec. И даже в случае, если ты не успеешь прочитать весь пакет сразу, то данные не пропадут, а новые приклеются к ним в хвост, но вот выудить начало хвоста с остатками предыдущих данных будет слегка проблематично.
1nd1g0 писал(а):
Если как-то умудриться переполнить аппаратный буфер контроллера до следующего цикла опроса, то контроллер снимает сигналы DTR и CTSна порте ПК, пытаясь сказать устройству, что пора бы и помолчать чуток
Это только в случае аппартного управления потоком. В случае программного управления потоком, все это безобразие вешается на ПО
Мля, опять я влез, не хотел ведь
------------ Дoбавленo в 21.58:
1nd1g0 писал(а):
ни DMA, ни IRQ на современных системах физическому COM порту никто не даёт
Там система немного сложнее, чем я описал. С вводом в аппаратную часть хабовой структуры распределения потоков, нагрузка на обработку прерываний от контроллеров повешана на хаб, и для системы эти прерывания недоступны, но DMA работает всегда, иначе бы система не справилась бы с такой нагрузкой, даже при теперешнем быстродействии, тк существует не только один несчастный COM порт, но еще и куча USB, HDD и прочей повешенной лабуды