Otras respuestas no parecen haber discutido mucho el consumo de energía, sobre lo que preguntaste específicamente.
La respuesta es que depende un poco del microcontrolador, pero a menudo la ejecución desde la RAM puede reducir el consumo de energía porque requiere menos energía leer las instrucciones desde la RAM que desde la memoria flash.
Un uso típico sería ejecutar una función "dormir" de bajo consumo desde la RAM, con la memoria flash apagada. No sólo se reduce el consumo de energía, sino que si el microcontrolador necesita despertarse rápidamente (por ejemplo, en respuesta a una interrupción externa) no hay retraso mientras la memoria flash se alimenta de nuevo.
Algunas piezas, como algunas de la gama SAM de Atmel, tienen RAM especiales de muy bajo consumo que pueden utilizarse para este fin. Esto permite cargar una pequeña cantidad de código en la RAM especial, mientras que la mayor parte de la RAM disponible y todas las demás memorias se apagan y el microcontrolador entra en un modo de reposo profundo.
14 votos
Ejecutar código desde RAM consume menos corriente (no estoy seguro de si es cierto para todas las CPU/SoCs). Una vez hice un proyecto en el que pusimos la mayor parte del código en RAM porque era un dispositivo de batería y queríamos que viviera el mayor tiempo posible. Si puedes ejecutar código sólo desde la RAM puedes incluso apagar los bloques flash en algunos SoCs y ahorrar aún más energía.
4 votos
@pipe - Me imagino que la razón de hacerlo un comentario en lugar de una respuesta es que no responde a la pregunta real, que es la razón por la que usted no querría siempre utilizar la RAM para ejecutar su código.
1 votos
@Jules Sí, imagino que como "anécdota útil". Las cosas Stack Exchange está diseñado para evitar, por muy buenas razones.
1 votos
Porque no tienes suficientes registros para ejecutar desde registro. (Tengo ese chip.)
0 votos
Además de todo: ejecutar código de dinámico La RAM en concreto podría formar parte de un elaborado pirateo de software para perpetrar la actualización de la DRAM. :)
1 votos
Un ejemplo concreto en el que la velocidad (accesos de un solo ciclo) es importante son los bucles de retardo. Los estados de espera de Flash pueden afectar al tiempo de retardo en función de cómo esté alineado el código en la memoria. Puede ser difícil de averiguar, por lo que es mucho más fácil decir simplemente "ejecutar desde RAM".
0 votos
En los microcontroladores con arquitectura Harvard, ejecutar código desde la RAM suele ser mucho más lento. La memoria Flash/ROM tiene allí un bus de direcciones y datos separado y dedicado, y puede funcionar en paralelo con el acceso a los datos. Mientras que una arquitectura von Neumann tendrá un único bus que los accesos de datos y programas tendrán que compartir. Las CPU von Neumann modernas intentan emular hasta cierto punto la arquitectura Harvard mediante el uso de cachés.