Diferencia entre revisiones de «Tip 1»

De ArduWiki
Saltar a: navegación, buscar
(Página creada con « == Descripción == Hay varias maneras de detener la ejecución de un boceto Arduino, también depende de lo que espere que sea "detenido". Digo esto porque el Arduino...»)
 
(Vea también)
 
(No se muestran 7 ediciones intermedias del mismo usuario)
Línea 7: Línea 7:
 
== Sin loop() ==
 
== Sin loop() ==
 
Cuando solo se quiere efectuar un calculo por ejemplo y no es necesario tener la repetitividad, deja en blanco [[loop()]]
 
Cuando solo se quiere efectuar un calculo por ejemplo y no es necesario tener la repetitividad, deja en blanco [[loop()]]
<pre>  
+
<pre>
 
void setup(){
 
void setup(){
 
   Serial.begin(115200);
 
   Serial.begin(115200);
Línea 15: Línea 15:
 
   //Nada
 
   //Nada
 
}
 
}
</pre>  
+
</pre>
  
 
== Manualmente ==
 
== Manualmente ==
Línea 25: Línea 25:
 
Este no es exactamente el resultado que estamos buscando todavía, ya que el Arduino usa un mecanismo llamado [[interrupciones]] para proporcionar una gran cantidad de funcionalidad y detienen el flujo del programa principal para que se ejecute "algo". Entonces, para completar este código para "detener" el uC, podemos agregar la función AVR para deshabilitar las interrupciones globales (o todas).
 
Este no es exactamente el resultado que estamos buscando todavía, ya que el Arduino usa un mecanismo llamado [[interrupciones]] para proporcionar una gran cantidad de funcionalidad y detienen el flujo del programa principal para que se ejecute "algo". Entonces, para completar este código para "detener" el uC, podemos agregar la función AVR para deshabilitar las interrupciones globales (o todas).
 
<pre>
 
<pre>
nointerrups();
+
noInterrups();
 
while (true){}  
 
while (true){}  
</pre>  
+
</pre>
  
 
== Funciones de C ==
 
== Funciones de C ==
Línea 36: Línea 36:
 
== Poner a dormir ==
 
== Poner a dormir ==
 
Con la administración avanzada de la energía se puede usar para poner el dispositivo en modo de suspensión y usar menos energía. Sin embargo, si el dispositivo es recuperable sin un reinicio, el dispositivo se vuelve mucho más amigable para el usuario.
 
Con la administración avanzada de la energía se puede usar para poner el dispositivo en modo de suspensión y usar menos energía. Sin embargo, si el dispositivo es recuperable sin un reinicio, el dispositivo se vuelve mucho más amigable para el usuario.
<pre>  
+
 
</pre>  
+
La documentación de AVR para "Administración de energía y modos de suspensión" tiene algunos ejemplos de cómo dormir el uC. Sleeping se puede usar tanto para una pausa controlada como para un bloqueo completo, similar al ciclo infinito explicado anteriormente.
 +
 
 +
<pre>
 +
cli();
 +
sleep_enable();
 +
sleep_cpu();
 +
sleep_mode();
 +
sleep_bod_disable()
 +
</pre>
 +
 
 +
La funcion sleep_disable() no es necesaria ya que el dispositivo nunca se despertará debido a que las interrupciones se desactivan.
  
 
== Vea también ==
 
== Vea también ==
* [[Tips]]
+
<categorytree mode=all>Tips</categorytree>
  
 
== Referencias ==
 
== Referencias ==
 
* [http://arduino.land/FAQ/content/7/47/en/how-to-stop-an-arduino-sketch.html Arduino Land]
 
* [http://arduino.land/FAQ/content/7/47/en/how-to-stop-an-arduino-sketch.html Arduino Land]
 +
* [http://www.nongnu.org/avr-libc/user-manual/group__avr__sleep.html Standard C library for AVR-GCC]
  
 
[[Category:Tips]]
 
[[Category:Tips]]

Revisión actual del 21:30 13 sep 2019

Descripción

Hay varias maneras de detener la ejecución de un boceto Arduino, también depende de lo que espere que sea "detenido". Digo esto porque el Arduino no usa un sistema operativo, su boceto nunca puede salir a ninguna parte, ya que es todo lo que el AVR tiene que trabajar.

A continuacion algunas alternativas para detener el dispositivo.

Sin loop()

Cuando solo se quiere efectuar un calculo por ejemplo y no es necesario tener la repetitividad, deja en blanco loop()

void setup(){
   Serial.begin(115200);
   Serial.println(sq(3));
}
void loop(){
   //Nada
}

Manualmente

Cuando se usa el método Arduino normal para escribir un boceto con setup() y loop(), su programa se ejecutará para siempre, lo que significa que la única vez que se puede detener a Arduino es cuando se elimina la energía. Para poner el Arduino en un estado parado, podemos simplemente usar un bucle infinito para bloquear efectivamente la uC, bueno, casi...

while (true){} 

Este no es exactamente el resultado que estamos buscando todavía, ya que el Arduino usa un mecanismo llamado interrupciones para proporcionar una gran cantidad de funcionalidad y detienen el flujo del programa principal para que se ejecute "algo". Entonces, para completar este código para "detener" el uC, podemos agregar la función AVR para deshabilitar las interrupciones globales (o todas).

noInterrups();
while (true){} 

Funciones de C

También podemos usar la funcion C cli() o abort() o exit(). Entonces hay tres métodos para detener el Arduino, y cada uno hace lo mismo, sin embargo, cada uno se compila a un tamaño diferente en las pruebas.

Con cualquiera de estos métodos el boceto sigue dando vueltas a toda velocidad y está completamente bloqueado hasta que se apaga la corriente, ya sea físicamente o mediante el uso del botón de reinicio.

Poner a dormir

Con la administración avanzada de la energía se puede usar para poner el dispositivo en modo de suspensión y usar menos energía. Sin embargo, si el dispositivo es recuperable sin un reinicio, el dispositivo se vuelve mucho más amigable para el usuario.

La documentación de AVR para "Administración de energía y modos de suspensión" tiene algunos ejemplos de cómo dormir el uC. Sleeping se puede usar tanto para una pausa controlada como para un bloqueo completo, similar al ciclo infinito explicado anteriormente.

cli();
sleep_enable();
sleep_cpu();
sleep_mode();
sleep_bod_disable()

La funcion sleep_disable() no es necesaria ya que el dispositivo nunca se despertará debido a que las interrupciones se desactivan.

Vea también

Tips


Referencias