¿Se copia el código del programa a la SRAM desde flash en el microcontrolador?

1

En la PC, el ejecutable del programa se lee desde el disco duro y se carga en la RAM para ejecutarlo. En el microcontrolador, el programa se almacena en flash.

  1. ¿Está cargado en SRAM cuando se inicia el microcontrolador?
  2. Si es así, entonces el documento STM32F103 dice que el flash es de 64 KB , SRAM es 20KiB. El programa no encaja en la SRAM. (Lo mismo para otros microcontroladores también).
  3. Si dice que no se carga todo el contenido flash en la SRAM, ¿para qué sirve el resto de los datos en flash? Todas las operaciones se realizan en SRAM ya en códigos de programa.
pregunta tcak

4 respuestas

7

La mayoría de los microcontroladores de 8, 16 y 32 bits ejecutan el programa directamente desde flash. Esto es cierto de la gama STM32F103. La mayoría de los microcontroladores son capaces de ejecutar el programa desde la RAM, pero solo los programas relativamente especializados lo hacen. Por esta razón, la mayoría de los microcontroladores tienen mucho más flash que RAM.

Hay algunos microcontroladores que tienen una gran cantidad de RAM y poco o ningún flash. Incluso puede ser posible obtener un STM32 como este. Estas piezas se basan en almacenar el programa fuera del chip en un chip flash serie, físicamente pequeño y barato, como un Micron MT25Q.

Los microprocesadores verdaderos (donde la RAM y la memoria flash están en circuitos integrados separados, como el ARM 7 y partes similares) pueden y, a menudo, copian el programa de la memoria flash a la RAM y lo ejecutan desde la RAM. La razón principal de esto es que la memoria RAM suele ser mucho más rápida en comparación con la memoria flash, por lo que el programa se ejecutará más rápido. Los procesadores rápidos a menudo ejecutan el sistema operativo Linux, que generalmente funciona de esta manera. También le da a Linux la capacidad de almacenar el programa en otros tipos de memoria de almacenamiento, como tarjetas SD y flash de interfaz en serie (flash en serie).

Se puede hacer que Linux ejecute el programa directamente desde flash (se denomina Ejecución en el lugar) pero esto generalmente sufre una penalización de rendimiento.

    
respondido por el Steve G
2

Depende. Algunas memorias FLASH son XIP (eXecute In Place), es decir, las NOR, ya que son direccionables por palabra. Algunos no lo son, como NAND FLASH. Los programas que se ejecutan directamente desde FLASH (o cualquier otra ROM) deben escribirse / compilarse en una imagen llamada "ROMable". La diferencia principal de un programa de este tipo desde el que se ejecuta desde la RAM, es que primero "reubicó" todas sus variables en la RAM y las inicializó, porque no puede cambiarlas en la memoria de solo lectura.

Pero a veces el programa se copia felizmente a la RAM y se ejecuta desde allí. Si no hay suficiente RAM para adaptarse a todo el FLASH, se utilizan cargadores de arranque de varios niveles. Primero, el cargador de arranque L0 se carga en la RAM, ejecuta algunas inicializaciones de bajo nivel y luego carga el cargador de arranque L1, a veces sobreescribiéndose a sí mismo. Puede ser el binario final en lugar de L1, por supuesto. Pero también puede subir de nivel. De esta manera, el código que ya no se necesita simplemente no se guarda en la RAM, lo que reduce su uso.

Por lo tanto, la memoria FLASH adicional se puede usar para almacenar diferentes binarios cargados uno por uno. O simplemente almacene algunos datos adicionales a los que puede acceder el programa en tiempo de ejecución (como en el disco duro de una computadora).

    
respondido por el Eugene Sh.
0

Copiar un programa en la memoria antes de ejecutar es una función del sistema operativo. En las MCU, normalmente ejecutas el programa desde FLASH. Hay excepciones notables, como los cargadores de arranque, pero generalmente se ejecuta desde FLASH. Incluso en una PC o algo con un sistema operativo, puede ejecutar un programa desde un disco y no desde la memoria, pero debe recordar los días de la unidad de cinta cuando IO era lento.

    
respondido por el b degnan
0

La mayoría de los microcontroladores usan la arquitectura de Harvard, que tiene áreas separadas de memoria de datos y programas. Con esta disposición, el procesador no puede ejecutar el código desde la RAM, ya que la RAM es estrictamente memoria de datos. La memoria FLASH contiene el código del programa y el procesador obtiene las instrucciones directamente desde FLASH.

    
respondido por el Peter Bennett

Lea otras preguntas en las etiquetas