Go Down

Topic: While(1) (Read 86 times) previous topic - next topic

hypernovat

Aug 12, 2017, 08:43 pm Last Edit: Aug 12, 2017, 08:48 pm by hypernovat
Buenas, muy poca cosa la mia pero hoy aprendi que una manera de "parar" el loop es finalizando las sentencias con "while(1)". Eso es todo siempre hay alguien que tal vez no lo sepa.
Saludos.
Ejemplo:
Code: [Select]
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:

Serial.println("Esto se visualiza una sola vez gracias al while(1)");

while(1);
}

surbyte

WHAT!!!

Para eso lo ejecutas en el setup();

En el compilador común y silvestre no existe setup() y loop()
setup() se usa para inicializar una vez dispositivos, objetos, variables.

loop es un while(1) que ejecuta todo lo que tiene dentro, poner un while(1) dentro de un while(1) es una cosa que no tiene sentido.
Si quieres escribir algo como tu código solo hace esto.

 
Code: [Select]
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
// se ejecuta una vez
Serial.println("Esto se visualiza una sola vez gracias al while(1)");
}

void loop() {
}


Esto es lo mismo que tu propones.
Claro que da igual, ambos estan bien.

hypernovat

WHAT!!!


Gracias por tu respuesta.

Y si, conmigo vas a tener varios sustos, por suerte intervengo poco

ArielP

#3
Aug 12, 2017, 10:31 pm Last Edit: Aug 12, 2017, 10:38 pm by ArielP
Hola!

Claro, además de que en Setup() es más lógico, el problema que presenta (a mi entender) poner en medio del loop() un

Code: [Select]
while(1);


es que.....ahí finaliza el programa.

Es decir, el micro queda "eternamente" ejecutando ese bucle y no hay posibilidad de hacer nada más. Se envía el mensaje una sola vez (es cierto) pero no hay posibilidad de hacer nada más.

En cambio, con la opción que propone surbyte  se podría mandar ese mensaje una sola vez, y luego seguir procesando alguna otra cosa.

Saludos.


surbyte

#4
Aug 12, 2017, 10:48 pm Last Edit: Aug 12, 2017, 10:48 pm by surbyte
Bueno por eso dije, es lo mismo que ponerlo en el setup()

Si la idea es ejecutar algo una sola vez ambas soluciones son factibles, pero no es ningún descubrimiento, por eso mi WHAT!!!

Si miras bien, cuando se compila el código .ino se genera un .c o .cpp no recuerdo, si lo miras en el verán algo como


Code: [Select]
// librerías y globales
int main() {

  setup();

  while(1) {
       loop();
  }
  return 0;
}

Go Up