Acabo de encontrar algunas macros para que mi compilador de microcontroladores fuerce (o sugiera) que una función se ejecute desde la RAM.
http://processors.wiki.ti.com/index.php/Placing_functions_in_RAM
https://community.nxp.com/thread/389099
¿En qué casos es esto valioso? ¿Por qué no siempre debería ejecutar desde RAM si el beneficio es solo una mayor velocidad? ¿Esto generalmente causa un mayor consumo de corriente?
microcontroller
ram
tarabyte
fuente
fuente
Respuestas:
Además de la velocidad y otras características que otros ya han mencionado, la ejecución de código desde la RAM puede ser útil en los cargadores de arranque donde necesita reprogramar el flash de su micro: no puede ejecutar el código desde el flash que está a punto de borrar. reprogramación
fuente
No miré la hoja de datos de ese micro. Sin embargo, a menudo es el caso en esta situación que la recuperación desde RAM es más rápida que la recuperación desde la memoria flash desde la que se implementa la memoria del programa.
La ventaja de flash es que grandes cantidades pueden ser relativamente baratas. Por lo tanto, los fabricantes de microcontroladores a veces colocan una gran cantidad de flash en un chip y luego proporcionan un espacio RAM más limitado desde el que se puede ejecutar el código. Esto permite copiar rutinas de tiempo crítico en la RAM y luego ejecutarlas desde allí.
El conmutador del compilador al que hace referencia probablemente funciona con el enlazador y marca esa sección de flash que el código de tiempo de ejecución del compilador que se ejecuta desde el reinicio copiará en la RAM. Las diferentes implementaciones variarán en los detalles.
fuente
Cuando desea ejecutar en RAM porque es más rápido, generalmente es porque esa RAM es SRAM en chip. Este es un recurso escaso, que probablemente querrá para los datos que requieren acceso de lectura / escritura.
Usarlo para el código cuando ya tiene el código en ROM / flash significa que necesita X cantidad de flash y X cantidad adicional de RAM.
También requiere una etapa de copia adicional en el arranque o cuando desea ejecutarlo, aunque en su mayoría es insignificante.
Tradicionalmente, esto se resuelve con un caché de instrucciones, pero en un microcontrolador puede tener más sentido mantener el genérico SRAM interno, porque no utiliza un microcontrolador porque desea la velocidad de ejecución más rápida.
También hay un problema de confiabilidad: el código que se ejecuta en la ROM real es difícil de modificar mediante un código defectuoso.
fuente
Además de todas las buenas respuestas:
Porque en un sistema embebido, generalmente no tiene la cantidad de RAM requerida. Por ejemplo, un STM32 que tiene 32kB o RAM y 512kB de EEPROM. Para poder ejecutar todo el programa en RAM, necesitaría un tamaño de RAM mayor que EEPROM.
fuente
Otras respuestas no parecen haber discutido mucho sobre el consumo de energía, sobre lo que usted preguntó específicamente.
La respuesta es que depende algo del microcontrolador, pero a menudo la ejecución desde la RAM puede reducir el consumo de energía porque requiere menos energía para leer las instrucciones desde la RAM que desde la memoria flash.
Un uso típico sería ejecutar una función de "suspensión" de baja potencia desde la RAM, con la memoria flash apagada. No solo se reduce el consumo de energía, sino que si el microcontrolador necesita reactivarse rápidamente (por ejemplo, en respuesta a una interrupción externa) no hay demora mientras la memoria flash se vuelve a encender.
Algunas partes, como algunas de la gama Atmel SAM, tienen una RAM especial de potencia extra baja que se puede utilizar para este propósito. Esto permite que se cargue 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 suspensión profunda.
fuente
Además de los posibles beneficios de velocidad mencionados por otros, el código RAM también es dinámico y puede modificarse sobre la marcha mediante algún código de adaptación en el FLASH según sea necesario.
Esto podría ser tan simple como cambiar algunos parámetros o podrían ser rutinas de controlador completas cargadas de forma remota.
fuente
Ejecutar código desde la RAM es significativamente más rápido que ejecutarlo desde la memoria flash. La mayoría de las CPU están muy optimizadas para el acceso a RAM más rápido posible, e incluso la memoria flash más rápida solo alcanza una fracción de la velocidad de RAM.
Sin embargo, tenga en cuenta que mover el código de flash a RAM también lleva tiempo. Si el código se ejecuta solo una vez, solo necesita leerlo una vez y, por lo tanto, realmente perderá tiempo para copiarlo primero en la RAM en lugar de ejecutarlo directamente. Si el código se ejecuta ocasionalmente (por lo que copiarlo en la RAM aumentaría la ejecución la segunda vez que se llama), pero el sistema generalmente está inactivo, entonces ejecutaría ese código más rápido copiándolo en la RAM, pero a nadie le importa, porque al sistema Tiene suficiente tiempo para gastar.
Por lo tanto, estas optimizaciones solo valen la pena si el código se ejecuta con frecuencia y usted lo ha medido como un punto de estrangulamiento del sistema.
Por otro lado, la RAM necesita mantener activamente los datos almacenados, mientras que la memoria flash no lo hace, por lo que el consumo de energía total aumenta, si la RAM necesita mantenerse activa. Sin embargo, esto solo es relevante si la RAM no se usa de otra manera, pero la mayoría de los sistemas modernos, de una forma u otra, ya usarán la RAM disponible y, por lo tanto, ya la mantendrán activa.
fuente
Hay dos razones muy comunes para ejecutar código desde la RAM:
Algunos microprocesadores no pueden ejecutarse desde flash durante la programación flash, aunque muchos pueden hacerlo siempre que el código esté en un bloque diferente del flash que se está escribiendo. Las escrituras de Flash pueden estar reprogramando la aplicación (caso del cargador de arranque), o cuando se usa flash para almacenar información de programa no volátil (configuración, calibración, etc.)
En muchos microprocesadores, la RAM es mucho más rápida que la memoria flash. Para estos dispositivos, se pueden ejecutar pequeñas rutinas de velocidad crítica desde la RAM, aunque generalmente la RAM es mucho más corta que la memoria flash.
fuente
Otro caso de uso para la seguridad de ejecución de RAM solamente contra bitflips aleatorios. Usamos este modelo en nuestro pequeño cubesat porque la placa de la computadora principal tiene un ram ECC que tolera los bits debido a la radiación. Todo el sistema operativo se carga en el ram cuando un ramdisk en el inicio se ejecuta completamente en un entorno ECC.
El flash no está protegido con ECC (tarjetas micro SD estándar), sin embargo, tenemos otros métodos para verificar si hay corrupción (varias imágenes, sumas de verificación, etc.)
fuente