Practico 9, ejercicio 3

Practico 9, ejercicio 3

de Jose Agustin Bizio Piriz -
Número de respuestas: 3

Adjunto mi solución al ejercicio, la variable global programaInterrupt no se muy bien como inicializarla en el main, aunque en la rutina de servicio a la interrupción siempre cuando se utiliza tiene un valor definido


bool ESC; //variable que es 1 si la ultima tecla ingresada es ESC
rutina* programaInterrupt; //guarda la direccion del programa
bool estoyEnRutina; //variable que me dice si estoy en rutina o no

void main(){
    disable();
    //instalo interrupcion
    ESC = 0;
    estoyEnRutina = 0;
    enable();
}


//rutina de atencion a la interrupcion
void keyboard(){

    char TECLA = in(TECLA);

    if(TECLA == ESC && !estoyEnRutina){
        ESC = 1;
        jmp(padr());
    }else if(TECLA == ESC && estoyEnRutina){
        ESC = 1;
        jmp(programaInterrupt);//me voy de rutina
    }else if(ESC == 1 && TECLA == 1){
        ESC = 0;
        programaInterrupt = padr();
        jmp(radr(RUTINA1));
    }else if(ESC == 1 && TECLA == 2){
        ESC = 0;
        programaInterrupt = padr();
        jmp(radr(RUTINA2));
    }else if(ESC == 1 && TECLA == 3){
        ESC = 0;
        programaInterrupt = padr();
        jmp(radr(RUTINA3));
    }else{
        ESC = 0;
        jmp(padr());
    }
}

En respuesta a Jose Agustin Bizio Piriz

Re: Practico 9, ejercicio 3

de Federico Rivero -
Hola José!

La solución mantiene la forma que se espera para el problema. Tiene algún bug, me parece. Si estás en una rutina y apretás ESC, ahí salís, pero si después apretás {1,2,3} entrás en otra rutina de nuevo, sin haber apretado ESC nuevamente.

Saludos,
Federico
En respuesta a Federico Rivero

Re: Practico 9, ejercicio 3

de Agustín Marcio Ribeiro García -
Buenas!, ese bug que mencionas se soluciona poniendo (ESC == 1 && TECLA == 1 && !estoyEnRutina) y poniendo estoyEnRutina=1 cada vez que entras a uno de esos 3 ifs? Desde ya muchas gracias!
En respuesta a Agustín Marcio Ribeiro García

Re: Practico 9, ejercicio 3

de Federico Rivero -
Hola Agustín,

Perdón la demora. Algo así, sí, hay que poner 'estoyEnRutina' en 1 cuando entrás en una rutina. Lugo estoyEnRutina = 0 cuando salís (primer elseif). Y dentro de ese primer else if también hay que cambiar ESC = 1 por ESC = 0.

Saludos,
Federico