Кольцо удобно когда поставщик и потребитель неизвестно в каком темпе работают: буфер последовательного канала итп. А тут все известно, чтение происходит порциями фиксированного размера в буфер, поэтому пинг-понг проще:
* не надо считать никаких голов и хвостов
* чтение всегда линейное, то есть можно пользоваться стандартными библиотеками для чтения прямо в буфер
* просто гарантировать то, что запись не происходит туда, откуда еще не все прочитано
Если очень хочется именно кольцо, то достаточно представить себе пинг-понг буфер кольцом длиной 2, где каждый элемент — это буфер
- - - Добавлено - - -
Так нельзя делать. Если обработчик все время будет выводить байт, то как только он выйдет, он тут же будет вызван снова, потому что пришел черед следующего байта. Получается, что наша программа просто переехала в прерывание, а времени на чтение как не было, так и нет.
Смысл прерывания в том, что основное свободное время, которое у нас есть, находится между полубитами. Время вывода полубитов так же является критичным для задачи. Поэтому прерывание выводит только один полубит. Это происходит по таймеру, поэтому мы знаем, что вывод работает максимально точно. После вывода полубита обработчик обязательно должен вернуться, чтобы во-первых иметь возможность быть вызванным снова вовремя и, во-вторых, чтобы дать время основному циклу для поддержания заполненности буферов.






Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
