¿Cómo borro la memoria del Arduino Uno?


15

Solo soy un ingeniero aprendiendo Arduino con mi hijo y me sorprendió que cuando volví a enchufar el cable USB al Arduino, el programa aún se estaba ejecutando y pensé: "Es bueno que no haya estropeado nada". arriba."

Entonces, ¿cuál es la forma normal en que las personas lo llaman un día con estas cosas? ¿Sueles cargar el esqueleto sin hacer nada o simplemente desconectar todo?


44
¿Qué quiere decir con "cuando volví a enchufar el cable USB al Arduino, el programa aún se estaba ejecutando", qué comportamiento observó y qué comportamiento esperaba? ¿Había algo relacionado con el Arduino?
jippie

@jippie, sí, tenía un montón de LED conectados y todos se encendieron. Por alguna razón, pensé que los programas estaban cargados en la memoria y se reiniciarían, pero como eso no existe ...
Peter Turner

77
Los programas se cargan en la memoria flash, no en la RAM, por lo que se mantienen incluso después del apagado.
Ricardo

Respuestas:


15

Cuando se inicia, el Arduino ejecutará el último programa que se le haya puesto. Solución: no lo encienda si no desea que se ejecute.

Cuando está listo para usar, el Arduino generalmente ejecuta el programa Blink. Así que puedes cargar eso y llamarlo un día si quieres "restablecerlo".

O tenga un programa de bucle con un comando de suspensión.

Si ha estado jugando con el cargador de arranque USB a través de los pines icsp, sin embargo, esto no es suficiente, deberá reinstalar el cargador de arranque. Pero si ha estado cargando programas a través de usb o directamente usando un programador, no hay problema al cargar Blink o algún otro programa ficticio para restablecerlo.


¿Es posible que ejecute un programa autodestructivo sin nada conectado a los terminales de voltaje?
Peter Turner

@PeterTurner cuando no hay poder para eso? No. Pero puede agregar un programa que hace mal uso de los pines, y si lo deja con algún daño se puede llamar (no mucho a menos que los pines estén conectados)
Manishearth

9

Si la seguridad es una preocupación importante, casi siempre debe cargar un boceto stop * en el tablero antes de llamarlo un día. Esta sería una buena idea, por ejemplo, cuando su placa es semipermanente como parte de un sistema más grande. Podrías hacerlo al:

  • Cargue el boceto Bare Minimum que se encuentra en File-> Examples-> Basicen
  • Cargue un boceto con un gran retraso en el bucle.
#include <limits.h>

void setup()
{}

void loop()
{
  delay(ULONG_MAX);
}
void setup()
{
   exit(0);
}

void loop()
{}

* Stop es simplemente figurativo. El tablero realmente no deja de funcionar.


2
¿Podría obtener un efecto similar (y más permanente) llamando exit()desde dentro setup()o loop()?
Peter Bloomfield

@ PeterR.Bloomfield ¡No puedo creer que me haya olvidado de eso!
asheeshr

¿Por qué molestarse con la salida o la demora? Solo tiene que void setup () { } void loop () { }: en cualquier caso, internamente el procesador simplemente está dando vueltas "sin hacer nada útil".
Nick Gammon

1

Lo más importante que puede salir mal es si deja a un lado su Arduino durante un par de semanas, olvida qué boceto (código) se carga en él, luego vuelve a trabajar en él, conecta el hardware (como un interruptor, LED o motor ) y haga que se encienda / encienda inesperadamente, porque el código anterior abordó el pin al que estaba conectado.


Solución 1. Cargue el nuevo código primero.

Una técnica simple y segura es cargar el nuevo código en el que está trabajando hoy antes de enchufar cualquier hardware. Ahora ya sabe lo que hace el código, qué pines usa, y luego conecta el hardware después (preferiblemente girando el Arduino primero desconectándolo).

Luego, cuando vuelve a conectar la alimentación, ejecuta el boceto que cargó, tiene su hardware conectado y todo debería estar bien.


Solución 2. Cargue un boceto de "no hacer nada".

Puedes subir este breve boceto:

int main () { }

"No hace nada". Todos los pines permanecerán como entradas, por lo que puede conectar de forma segura su hardware y luego comenzar a codificar su nuevo proyecto.


Seguridad primero

Una buena regla es no enchufar o desconectar hardware (p. Ej., LED, interruptores, motores) con la energía aplicada. Si se distrae y se conecta a la toma incorrecta de la placa, puede dañar inmediatamente lo que está conectado, o el Arduino, o ambos.

Con la alimentación apagada, puede hacer una verificación de último minuto de que todo está conectado al lugar correcto, que tiene sus polaridades correctas, y así sucesivamente.

También asegúrese de no tener electricidad estática en su cuerpo, especialmente si usa un jersey o algo esponjoso, o si está sentado en una alfombra.

Personalmente siempre me acerco y toco alguna parte de metal cercana para "ponerme a tierra", antes de alcanzar el Arduino. Un ejemplo es la carcasa metálica de una PC, una toma de auriculares o algo así.

Si, después de conectar la alimentación al Arduino (por ejemplo, mediante el cable USB) no ve que se enciende de inmediato el LED de alimentación, ¡desconecte la alimentación inmediatamente! Es posible que haya acortado algo, y cuanto menos tiempo lo haga, mejor.


1

Mi mayor preocupación cuando esto sucede es que usualmente conecté el Arduino para mi nuevo proyecto y estoy conectando el USB para la descarga inicial del nuevo boceto. Me preocupa no tener idea de lo que intentará el programa anterior, estar conectado a un hardware totalmente diferente.

Hasta ahora no ha pasado nada malo y no creo que adopte la quema BLINK cada vez que vuelva a poner uno de mis Arduinos en la papelera. Sin embargo, es solo cuestión de tiempo.


0

Si la placa Arduino está conectada a cualquier otro dispositivo, desconecte todo y simplemente conecte el Arduino con la computadora usando el cable USB e intente cargar un nuevo boceto, espero que ayude.


¡Bienvenido a Arduino SE! ¿Hay alguna razón por la cual esta respuesta es mejor que las otras respuestas proporcionadas? ¡Gracias!
Anonymous Penguin

0

En el IDE de Arduino, vaya a ejemplos, seleccione Eeprom, seleccione eeprom clear y luego cargue el boceto.

Cuando se enciende el LED en el pin 13, ya está.

NÓTESE BIEN. Esto puede llevar algún tiempo dependiendo del tamaño de la EEPROM en el Arduino.


Entonces, ¿cuál es el punto? ¿Está ejecutando algo que no toca E / S (pero borra la EEPROM en cada encendido)?
Peter Mortensen

¿Realmente has intentado esto? El pin 13 no parece estar configurado como salida (Arduino IDE 1.6.5)
Peter Mortensen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.