No puedo entender cómo funciona la memoria Arduino para el código del programa

2

Estoy usando Arduino Lilypad y Uno. Al principio, desarrollé mi código y lo ejecuté en UNO porque es más fácil de usar, pero luego lo subí a Lilypad y también funcionó. El punto de intersección es que el código es de aproximadamente 19-20 KB y la memoria Flash de Lilypad es de solo 14-16 KB. ¿Cómo es esto posible?

El IDE de arduino también permite un máximo de aproximadamente 30 KB para Lilypad y aproximadamente 32 KB para UNO. ¿De dónde vienen esos números? La UNO tiene esta capacidad en su Flash, ¡la Lilypad no la tiene!

    
pregunta himura

1 respuesta

5

Supuesto : el código desarrollado mencionado en la pregunta no es una aplicación muy avanzada y sofisticada, y no contiene grandes cantidades (10s de kilobytes) de datos / arrays.

Las limitaciones de tamaño del código de Arduino se aplican al binario final compilado de la aplicación, no al tamaño del código fuente , y no al tamaño del archivo HEX generado desde la fuente código. Como @DaveTweed ha señalado, los archivos hexadecimales tendrán más del doble del tamaño de los bytes binarios reales que deben escribirse en la memoria Flash de la MCU. Los archivos de código fuente serán, además, muchas veces el tamaño del archivo hexadecimal, dependiendo de las características del código, los comentarios y el estilo de codificación.

Una salida binaria de 20 kilobytes representaría típicamente una aplicación bastante sofisticada y compleja en un Arduino / LilyPad, o una aplicación que incorpora una gran cantidad de arreglos de datos o buffers de datos. ¡El código fuente para una aplicación de este tipo podría estar en los cientos de kilobytes!

Incluso las aplicaciones de muestra más complejas que vienen con el IDE de Arduino, por ejemplo, se compilan a aproximadamente 2-5 kilobytes de salida binaria.

  • UNO has this capacity in its Flash, the Lilypad doesn't!

Acerca de LilyPads de Arduino : se basan en una potencia inferior pero no en versiones de especificación de memoria inferior de la > los mismos microcontroladores utilizados en Arduino Uno: el ATmega168V o el ATmega328 ( # 1 ) . Por lo tanto, la memoria flash disponible en el LilyPad es la misma que en el correspondiente tablero de Uno.

  • Where did those numbers come from?

El soporte de Arduino IDE para ~ 30 kilobytes de aplicaciones binarias se deriva del soporte para la ATmega328 de microcontroladores En los dos tableros mencionados. El ATmega328 tiene 32 kilobytes de memoria Flash, de los cuales el gestor de arranque Arduino ocupa entre la mitad y un par de kilobytes , según la variante que se cargue.

Los restantes 30 kilobytes (ATmega328) de Flash están, por lo tanto, disponibles para las aplicaciones Arduino creadas por el usuario, sus datos, buffers, etc.

Además de esto, 1 - 2 kilobytes de SRAM y 0.5 - 1 kilobytes de EEPROM también están disponibles en los controladores ATmega168 y ATmega328 respectivamente.

(#1) Si bien la página oficial de Arduino Lilypad menciona un microcontrolador ATmega328V, el sitio web de Atmel no cede (para mí, de todos modos) Variante del ATmega328, en una búsqueda. Por lo tanto, tampoco se ha encontrado ninguna hoja de datos.

    
respondido por el Anindo Ghosh

Lea otras preguntas en las etiquetas