Soluciones diferentes a la oficail?

Soluciones diferentes a la oficail?

de Usuario eliminado -
Número de respuestas: 3
En todos los ejercicios de interrupciones me pasa que mi solución es bastante diferente a la que dan en la resolucion, por ejemplo ,para el examen de arq1 en febrero de este año:


#define Oscuro 0
#defne Tenue 1
#define Normal 2
#define Luminoso 3
int estado
int luzactual
int luzobjetivo[4] = {10,75,125,200}
bool cortinamov
int indicefoco
int tics


int main() {
DESHABILITAR
    cortinamov = FALSE;
    indicefoco = 0;
tics++
INSTALAR
HABILITAR
    while (TRUE) {
        if (!cortinamov) {
            if ((estado < Oscuro)&& (in(SENSOR_INTERNO)  < luzobjetivo[estado])) { // falta luz
                if (!(in(TOPE_CORTINA))) { //cortina no esta en tope
                    out(CONTROL_CORTINAS,0x1);
                    cortinamov=TRUE; //abro cortina
                }
                else { //cortina en tope, prendo foco
 indicefoco <<= 1;
 indicefoco++;
                    out(LUCES,indicefoco);
 }
 else if ((estado > Luminoso)&&(in(SENSOR_INTERNO) > luzobjetivo[estado])) { //sobra luz
 if (indicefoco!=0) { //hay algun foco prendido
 indicefoco >>= 1;
 out(LUCES,indicefoco);
 }
 else { //no hay focos prendidos, cierro cortina
 out(CONTROL_CORTINAS,0x2);
 cortinamov=TRUE;
 }
 }
 }
}
}

void iluminar() {
    estado = (in(ID_BOTON_PRESIONADO) & 0x3);
tics=0;
}

void Cortinas() {
cortinamov= FALSE;
}
void Timer() {
tics++;
if ((estado!=Oscuro)&&(tics==50*60*60*12)) 
 estado=Tenue;
}


Me levanta sospechas porque generalmente las soluciones oficiales tienen bastante tratamiendo de estados y cosas un poco mas complicadas que lo que siempre se me ocurre hacer, hay algun problema en lo mio o simplemente es mas precario pero funciona igual?

En respuesta a Usuario eliminado

Re: Soluciones diferentes a la oficail?

de Gonzalo Tejera -
Hola. Tu solución es razonable. Algunos comentarios:

1-no entiendo el tics++ al principio del main.
2-no se para que usas la expresión (estado < Oscuro) en el segundo if del while true.
3-está mal el comando 0x2 para cerrar cortina.

Saludos, Gonzalo
En respuesta a Gonzalo Tejera

Re: Soluciones diferentes a la oficail?

de Usuario eliminado -
Deberia ser tics=0.
La expresion se usa porque Oscuro es el {unico estado para el cual la falta de luz no es un problema, ya que tiene que ser MENOR que el umbral, no igual. Analogo para el caso de Luminoso.
Como seria para dejar el bit mas significativo en 1? Lo puse asi porque pense que eran dos bits
En respuesta a Usuario eliminado

Re: Soluciones diferentes a la oficail?

de Gonzalo Tejera -
Hola. En la letra no se especifica el tamaño del puerto. Si te fijás en la solución escribe 0x80 por lo que asume que es un puerto de tamaño byte y escribe un 1 en el bit 7.

Saludos, Gonzalo