RESPUESTA CORTA:
Después de desconectar la alimentación, puede tomar un poco de tiempo para que el voltaje del chip descienda lo suficiente para que el chip se reinicie. Durante este tiempo, es posible que ocurran cosas incontroladas como fallas y corrupción.
Si se baja la línea de RESTABLECIMIENTO, casi instantáneamente se pondrá el chip en un estado conocido en el que todos los pines IO están configurados en modo de entrada y el procesador se detiene.
Si su aplicación es sensible a estados desconocidos, entonces probablemente sea mejor usar la línea de reinicio.
RESPUESTA LARGA
Cuando vi por primera vez esta pregunta, la descarté como trivial. Mientras lo pensaba más, me di cuenta de que en realidad es una gran pregunta.
Solo puedo pensar en dos diferencias funcionales entre un reinicio de alimentación y un reinicio externo (tirando del pin RESET bajo) ...
-
Después de un restablecimiento externo, el bit EXTRF en el registro MCUSR será 1 y cualquiera de los otros bits seguirá teniendo sus valores de restablecimiento previo. Después de un reinicio de encendido, el bit PORF será 1, pero los otros indicadores de reinicio serán 0.
-
La SRAM de datos internos se llenará con datos no definidos después de un reinicio de encendido, mientras que después de un reinicio externo seguirá conteniendo los datos que tenía antes del reinicio. Tenga en cuenta que los registros IO se configuran en sus valores iniciales de cualquier manera.
Si bien puedo imaginar los casos en los que es posible que desee restablecer el procesador, pero aún así mantener el contenido de la SRAM, están diseñados. En el uso normal, si desea restablecer, probablemente también desee volver a cargar los datos que tenía en la SRAM.
-
Si (a) el temporizador WatchDog no está habilitado a través de un fusible, y (b) el temporizador WatchDog se habilita a través del software antes del restablecimiento, luego, después de un restablecimiento externo, WatchDog seguirá habilitado, mientras que se desactivará después un reinicio de energía.
Por lo general, es un buen estilo apagar el Watchdog inmediatamente después de un reinicio (suponiendo que no haya un fusible), por lo que no debería haber una diferencia práctica.
Por lo tanto, la razón principal por la que puedo pensar en usar el pin RESET en lugar de tirar de la energía podría ser que desee reiniciar de forma controlada y (casi) atómica. Cuando tira de la línea RESET baja, los pines de E / S entran en modo de entrada y el procesador se detiene, y esto sucede de manera muy rápida y limpia.
Cuando extrae energía, gracias a la capacitancia y la inductancia (algunas inherentes al chip en sí mismo y sus conexiones) puede llevar un tiempo pequeño pero significativo para que el chip vea que el Vcc desciende hasta el voltaje de corte. Durante este tiempo, puede continuar ejecutando instrucciones. Puede haber un momento en que el voltaje sea demasiado bajo para soportar la velocidad actual del reloj, pero aún por encima del umbral de reinicio de alimentación. Durante este tiempo, el procesador puede fallar y generar salidas corruptas. (Podría usar el detector de oscurecimiento para mitigar potencialmente este caso, pero todavía hay casos en los que puede meterse en problemas).
Así que supongo que todo se reduce a lo que tu chip va a hacer en el momento en que quieras restablecerlo. Si está conectado a un montón de botones y LED parpadeantes, realmente no importa si uno de los LED parpadea incorrectamente durante un microsegundo cuando el chip se desvanece. Sin embargo, si está conectado a un controlador de motor de alta corriente reversible por software, existe la posibilidad de que el chip pueda crear un cortocircuito peligroso en el camino.
CASO ESOTERICO:
Creo que también hay un caso en el que un reinicio externo mientras el chip se encuentra en un modo de suspensión profunda omite el tiempo de espera de inicio, por lo que en este caso el arranque después de que se libere el reinicio externo podría ser más rápido arranque después de un encendido.
Si alguien más conoce otras diferencias relevantes, ¡me encantaría escucharlas!