¿Por qué ejecutar código desde la RAM?

25

Acabo de encontrar algunas macros para mi compilador de microcontroladores para forzar (o sugerir) que una función se ejecute desde la RAM.

teléfono

enlace

enlace

enlace

¿En qué casos es esto valioso? ¿Por qué no siempre ejecutaría desde la RAM si el beneficio es solo una mayor velocidad? ¿Esto generalmente causa un mayor consumo de corriente?

    
pregunta tarabyte

9 respuestas

33

Además de la velocidad & otras funciones que otros ya han mencionado, la ejecución de código desde la RAM puede ser útil en los cargadores de arranque en los que necesita reprogramar los flashes de su micro - no puede ejecutar el código de flash que está en medio de borrar & reprogramacion

    
respondido por el brhans
19

No miré la hoja de datos de ese micro. Sin embargo, a menudo es el caso en esta situación que la captura de RAM es más rápida que la captura de memoria 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 ponen mucho flash en un chip y luego proporcionan un espacio de 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 modificador de compilación al que te refieres probablemente funcione con el enlazador y marca la sección de flash que se copiará en la RAM mediante el código de tiempo de ejecución del compilador que se ejecuta desde el reinicio. Diferentes implementaciones variarán en los detalles.

    
respondido por el Olin Lathrop
15

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 deseará para los datos que requieren acceso de lectura / escritura.

Usándolo para el código cuando ya tienes tienes el código en ROM / flash significa que necesitas 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 es en su mayoría insignificante.

Tradicionalmente, esto se resuelve con un caché de instrucciones, pero en un microcontrolador puede tener más sentido mantener el SRAM genérico interno, porque no usas un microcontrolador porque quieres 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.

    
respondido por el pipe
13

Además de todas las buenas respuestas:

  

¿Por qué no ejecutaría siempre desde RAM si el beneficio es solo   ¿Mayor velocidad?

Debido a que en un sistema integrado, generalmente no tiene la cantidad de RAM necesaria. Por ejemplo, un STM32 con 32kB o RAM y 512kB de EEPROM. Para poder ejecutar todo el programa en la RAM, necesitaría un tamaño de RAM más grande que la EEPROM.

    
respondido por el Marko Buršič
12

Otras respuestas no parecen haber discutido mucho sobre el consumo de energía, lo que usted preguntó 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 para leer las instrucciones de la RAM que de 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 despertarse rápidamente (por ejemplo, en respuesta a una interrupción externa), no hay demora mientras la memoria flash se enciende nuevamente.

Algunas partes, como algunas de la gama Atmel SAM, tienen una RAM especial de potencia extra baja que puede utilizarse para este propósito. 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 ingresa en un modo de suspensión profunda.

    
respondido por el user
7

Además de los beneficios de velocidad potenciales 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 FLASH según sea necesario.

Esto podría ser tan simple como cambiar algunos parámetros o podrían ser rutinas completas del controlador cargadas de forma remota.

    
respondido por el Trevor_G
3

Ejecutar código desde RAM es significativamente más rápido que ejecutarlo desde 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 la RAM.

Sin embargo, tenga en cuenta que mover el código de flash a RAM también requiere tiempo. Si el código se ejecuta solo una vez, solo necesita leerlo una vez y, por lo tanto, perdería tiempo para copiarlo primero en la RAM en lugar de ejecutarlo directamente. Si el código se ejecuta ocasionalmente (por lo tanto, copiarlo en la RAM aumentaría la ejecución la segunda vez que se lo llama), pero el sistema generalmente está inactivo, entonces usted ejecutará ese código más rápido al copiarlo en la RAM, pero a nadie le importa, porque el sistema tiene suficiente tiempo para gastar.

Por lo tanto, tales 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 memoria RAM debe mantener activamente los datos almacenados, mientras que la memoria flash no, por lo que el consumo total de energía aumenta, si la memoria RAM debe mantenerse activa. Sin embargo, esto solo es relevante si, de lo contrario, la RAM no se utiliza en absoluto, pero la mayoría de los sistemas modernos, de una forma u otra, ya utilizarán la RAM disponible y, por lo tanto, la mantendrán activa.

    
respondido por el TwoThe
3

Hay dos razones muy comunes para ejecutar código desde la RAM:

  1. Algunos microprocesadores no pueden ejecutarse desde el flash durante la programación del flash, aunque muchos pueden hacerlo siempre que el código esté en un bloque diferente del que se escribe el flash. Las escrituras en Flash pueden ser reprogramar la aplicación (caso del cargador de arranque), o cuando se usa flash para almacenar información de programas no volátiles (configuración, calibración, etc.)

  2. En muchos microprocesadores, la memoria 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.

respondido por el Dave Nadler
2

Otro caso de uso para RAM solo ejecuta seguridad contra bitflips aleatorios. Utilizamos este modelo en nuestros cubos pequeños porque la placa de la computadora principal tiene un pistón ECC que tolera bitflips debido a la radiación. Todo el sistema operativo se carga en el ram como un ramdisk en el inicio se ejecuta completamente en un entorno ECC.

El flash no está protegido con ECC (tarjetas micro SD estándar disponibles) sin embargo, tenemos otros métodos para verificar la corrupción (varias imágenes, sumas de comprobación, etc.)

    
respondido por el Tejas Kale

Lea otras preguntas en las etiquetas