¿Cuánta memoria FLASH es gratuita para un programa?

1

Estoy programando para un STM32F103C8T6 (también conocido como píldora azul), con la hoja de datos aquí.

En la página 14 dice:

  

2.3.2 Memoria Flash incorporada 64 o 128 Kbytes de Flash incorporado está disponible para almacenar programas y datos.

Ahora el mío tiene 64 KB, sin embargo, ¿significa esto que tengo 100% disponible, o hay una parte reducida? Y si es así, ¿cuánto? ¿O hay una manera de averiguar cuándo no "encaja" (como si se mostrara un error?).

Utilizo un STM32 ST-LINK V2, y afaik no estoy usando ningún gestor de arranque especial, el entorno de desarrollo es Workbench 4 STM / Eclipse, y uso HAL / STMCube.

Actualmente estoy usando solo unos 19 KB, pero no he terminado (y ejecutando mis pruebas de unidad también dentro de este código, aunque puedo desactivarlo, lo que ahorra la mitad).

    
pregunta Michel Keijzers

4 respuestas

3

En un microcontrolador típico, puede programar todo el flash con su código. Puede verificar el TRM para asegurarse: si se trata de un cargador de arranque en el primer sector o le dice que hay partes del flash que no puede borrar, entonces esas partes están reservadas. Pero normalmente lo tienes todo.

¡Tenga en cuenta que eso no significa que el 100% del flash se usará para el código! Tendrá que interrumpir las direcciones de vectores al inicio del flash. Las constantes y los valores de inicialización para las variables estáticas también se almacenarán en la memoria flash. Su vinculador debería encargarse de esto, probablemente utilizando un script de vinculación proporcionado por el fabricante (ST). El enlazador debe dar un error si su programa es demasiado grande para caber en flash.

Los programadores avanzados pueden escribir sus propios scripts de vinculador y asignar manualmente el código y los datos a las partes del flash que deseen. Por ejemplo, un script de vinculador predeterminado de un fabricante normalmente pondrá los vectores de interrupción al inicio de flash (o RAM, si se está quedando sin RAM).

    
respondido por el Adam Haun
2

La hoja de datos describe una familia de partes, no solo una. Tenga en cuenta que la primera página enumera los nombres de las partes como:

  

STM32F103x8
  STM32F103xB

El STM32F103C8T6 es una variante específica con un paquete LQFP de 48 patillas y 64 KB de flash, clasificada para un rango de temperatura industrial. Un ejemplo de otra parte cubierta por esta hoja de datos podría ser el STM32F103VBH6, que tiene un paquete BGA de 100 pines y 128 KB de flash.

Consulte la página 108 de la hoja de datos ("Esquema de información para pedidos") para obtener más información sobre cómo descodificar los números de pieza.

Ahora, una nota práctica: muchas partes marcadas como "STM32F103C8T6" en realidad tienen 128 KB de flash disponibles. (En efecto, son ... partes de CBT6 comentadas como ... C8T6 por razones de inventario). No debe confiar en la disponibilidad de este flash adicional para un producto, pero es una ventaja conveniente para el desarrollo. :)

    
respondido por el duskwuff
2

Esa hoja de datos es para STM32F103x8 y STM32F103xB.

Puede ver en la "Tabla 63. Esquema de información para pedidos" en la página 108, que STM32F103x8 tiene 64 kbytes de flash y STM32F103xB tiene 128 Kbytes de flash.

La 'x' en el número de pieza identifica el paquete.

Entonces, el STM32F103C8T6 es STM32F103 más:

  • C = 48 pins
  • 8 = 64 Kbytes flash
  • T = paquete LQFP
  • 6 = Rango de temperatura industrial, –40 a 85 ° C

Así que el tuyo solo tiene 64 Kbytes, pero puedes usar todo eso. No es una parte con flash de 128 Kbytes.

Sin embargo, hay historias (por ejemplo, en stm32duino.com ) de STMicro que a veces envía piezas con flash de 128 Kbytes pero con STM32F103x8. impreso en el paquete, por lo que podría tener suerte.

    
respondido por el gbulmer
2
  

¿hay alguna manera de averiguar cuándo no "encaja"?

El IDE o el compilador pueden mostrarle una advertencia de desbordamiento de memoria (flash o RAM). He probado con mi placa F3. Una vez que declaré una gran matriz para propósitos de prueba, cuando construí la fuente, Eclipse me lanzó un error de desbordamiento de RAM.

    
respondido por el Long Pham

Lea otras preguntas en las etiquetas