Letra:
Sea un sistema que controla las luces de iluminación de los pasillos de un edificio.
Este cuenta con un botón de encendido en cada piso y se desea que una vez transcurrido 45 segundos desde que fue presionado el botón de algún piso, estas se apaguen.
Para esto se sabe que:
● Cuando se aprieta un botón en cualquier piso, se invoca una rutina de interrupción llamada boton().
● El encendido de todas las luces se realiza poniendo en 1 el bit menos significativo del byte de la dirección 0x20 y se apagan colocando este mismo en 0.
● Además se cuenta con un timer que genera una interrupción cada un segundo la cual invoca a la rutina de interrupción tiempo().
Escribir en lenguaje de alto nivel las rutinas necesarias para implementar el controlador de luces.
Mi solución es la siguiente:
void interrupt boton(int &ticks){
ticks=0; //reinicio el contador
if (!(in(0x20)&=1)) //si no estan prendidas
out(0x20,in(0x20)|=1) //las prendo
}
void interrupt tiempo(int &ticks){
if(in(0x20)&=1){ //si las luces estan prendidas
ticks++;
if(ticks==45)
out(0x20,in(0x20)&=-2) //apaga las luces
}
}
Se espera que la solucion sea un poco mas elaborada? O hay algun detalle que no haya tenido en cuenta?
Es necesario que considere los casos cuando se llama a una rutina mientras se está ejecutando la otra? O el hecho de que como yo reinicio el contador en 0 en la rutina boton, y que la rutina tiempo se llama cada un segundo, puede ser que en lugar de durar 45 segundos la luz prendida, dure 44,... porque el boton fue presionado entre un segundo y otro?