[an error occurred while processing this directive]
|
Во первых, прерывания не обязаны идти по приходу байта. Более того, в высокоскоростных портах прерывания не должны идти по сразу по приходу каждого байта - иначе, дествительно, процессор будет только их и обрабатывать. Пример - USART в ARM.
Ладно, допустим, прерывания генерятся по приходу очередного байта. Пусть идет суммарный поток N символов в секунду. Рассмотрим два случая: время обработки прерывания равно 0.5/N и это время равно 3/N.
1. 0.5/N При приходе символа в очередной (пустой) порт сразу возникает прерывание и символ оттуда удаляется. Легко видеть, что общий поток прерываний равен N в секунду вне зависимости от примененной схемы.
2. 3*N Если у нас много буферов - действительно, за время обработки прерывания придет еще три символа, скорее всего, в другие порты. Таким образом, действительно, второй прерывание нужно будет обрабатывать сразу же после завершения предыдущего, и ни на что другое времени уже не останется.
Что же произойдет в последнем случае при наличии одного приемника? Действительно, обработчик прерывания выкачает из его буфера все пришедшие байты. Только вспомним, что при обработке таких простых прерываний основное время тратится на переключения контекста и сохранение/восстановление регистров. Можно считать, что это время равно 1.5*N. Т. е. после выкачивания символов из буфера до выхода из прерывания заведомо прийдет еще один символ, и, опять, не останется времени ни для какой полезной работы.
E-mail: info@telesys.ru