Hola, para resolver este ejercicio se me ocurrio algo así y me surguió unas dudas:
pongo como me quedo:
unsigned char dato;
unsigned char dispositivo;
unsigned char salida;
bool imprimir_dato_entrada;
bool imprimir_dato;
int concentrador(){
salida= 0x0FF;
imprimir_dato_entrada = false;
imprimir_dato = false;
habilitar_interrupciones();
while(true){
out(0x20,salida);
}
}
int int_entrada(){
imprimir_dato_entrada=true;
if( in(0x10) % 2){
dato = in(0x11);
dispositivo = 0;
}
else ..... // Igual para cada uno de los dispositivos que siguen.. cambiando solo la dirección y el valor de la variable dispositivo;
}
int int_salida(){
if(imprimir_dato_entrada){
if(imprimir_dato){
salida = dato;
imprimir_dato_entrada = false;
imprimir_dato = false;
}
else{
salida = dispositivo;
imprimir_dato = true;
}
else {
salida = 0x0FF;
}
Esto esta correcto?
Y luego las dudas que me surguen son las siguientes, que pasaria si dos dispositivos mandan interrupción al mismo tiempo? o de forma tal que solo llegue una interrupción? si es por nivel ta, pero si es por flanco?
Puedo desactivar las interrupciones dentro de un procedimiento de interrupción? Por ejemplo si quisiera que no se pueda interrumpir hasta que se halla transmitido el dispositivo y el dato? dejando el procedimiento int_salida de esta forma:
int int_salida(){
if(imprimir_dato_entrada){
if(imprimir_dato){
salida = dato;
imprimir_dato_entrada = false;
imprimir_dato = false;
}
else{
salida = dispositivo;
imprimir_dato = true;
deshabilitar_interrupciones();
}
else {
salida = 0x0FF;
habilitar_interrupciones();
}