Zdravim. Mam takyto kod:
struct _key_buffer {
unsigned int size;
unsigned char buffer[256];
} key_buffer;
char getc()
{
while(key_buffer.size == 0); /*<<<===========cez toto to neprejde*/
return key_buffer.buffer[--key_buffer.size];
}
/*rutina pre obsluzenie IRQ1*/
void IRQ1_Keyboard_isr(struct reg_struct non)
{
unsigned char scancode = inb(0x60);
switch(scancode)
{
case 0x2a: /*stisknutie shiftu*/
shift = 1;
case 0xaa: /*pustenie shiftu*/
shift = 0;
default:
if(scancode & 0x80) { /*zdvihnuty klaves*/
break;
} else {
if(shift)
key_buffer.buffer[key_buffer.size++] = asciiShift[scancode];
else
key_buffer.buffer[key_buffer.size++] = asciiNonSh[scancode];
}
}
}
Problem je v tom, ze cez cyklus while(key_buffer.size == 0) v getc() sa to nikdy nedostane.
IRQ1_Keyboard_isr() je volana asynchonne(prerusenie) a na 100% funguje tak ako ma (skusane) no getc() si akosi nevsima zmenu key_buffer.size....
Vobec neviem ze preco... Neviete niekdo ze v com je chyba ?