Помогите хотя бы основной идеей... а то мозги закипают, глаз замылился... бубен порван =)
Есть основной цикл программы, а-ля:
while(!AppTermination){
DataSend(buf, 512);
outport(0x334,1);
}
Есть обработчик прерывания от оборудования по IRQ6:
void __far interrupt BITC_ISA_Event(void){
rcvr_state stat;
stat.value=inport(0x324);
if (stat.kr){
flushBuffer(buf);
for (i=0; i<512;i++) buf[i]=inport(0x330);
}
oldHandler();
}
То бишь на прерывание считываем буфер.... в основном цикле его выплёвываем по UDP (DataSend).
командой outport(0x334,1); - говорим оборудованию, что прерывание обработали (снимаем сигнал прерывания с шины).
Что происходит на практике - ловлю я эту всю красоту на другой машине Снифером Ethernet'a... В том варианте который написан выше... пакеты приходят через каждые 0.128 секунд (128 милисекунд),
Если же я DataSend и outport (0x344,1) перенесу в обработчик прерывания, то пакеты начинают приходить через каждые 10 миллисекунд. Основной цикл программы ничего кроме указанных двух комманд не содержит.
Почему DataSend в обработчике срабатывает чаще чем в основном цикле?