По четыре и делают. Делается двойная буферизация, размер буферов кратен 4. Один буфер заливается обработчиком прерываний, второй в это время обрабатвается программой
for (i=0; i<len; i+=4) { do_something(buf[i]); }
Задержка будет на len отсчётов, для любого реал-тайма достаточно, вызывать прерывание на каждый отсчёт всё-равно слишком накладно. На самых подходящих процессорах сохранение контекста в обработчиках прерываний требует десятков (а то и сотни) тактов. Нафиг нужно процессор грузить, да ещё и 6x, который как правило вообще аппаратно запрещает прерывания в конвейерных циклах, поскольку обычно неспособен сохранять контекст конвейера.
|