¿Hay un preprocesador constante para el tamaño de la memoria?

13

Me gustaría que mis compilaciones excluyan algún código dependiendo del espacio disponible para flash / programa. Para ser utilizado en el código de demostración de una biblioteca que apoyo. Mientras que mi solución actual es usar un #ifdef de tipo de procesador. Pero me gustaría ser más general y no tener que especificar todos los chips. Más bien sería bueno si hubiera una constante de preprocesador que indicara el tamaño disponible.

Donde no soy lo suficientemente fluido en gcc y / o avr-gcc, podría esperar encontrar algunas constantes similares a las que definen el principio y el final del montón.

En caso de ejemplo. Es que tanto UNO como Leo tienen 32K de Flash. Pero la biblioteca principal de Leo usa 4K para soporte USB, lo que resulta en solo 28K disponibles. La demostración de My Library está casi al máximo en la UNO y me gustaría recortar automáticamente según el espacio disponible del programa.

mpflaga
fuente
He visto programas que hacen esto, pero no puedo encontrar ninguno
TheDoctor

Respuestas:

10

Encuentre el io__.harchivo para su microcontrolador, en Linux se encuentra en /usr/lib/avr/include/avr, en Windows estará en una ubicación algo similar.

Desplácese hacia abajo a la parte que dice /* Constants */. Hay un par de macros interesantes definidas allí, FLASHENDsiendo la que debería interesarle. Puede usarla, por ejemplo, de la siguiente manera:

#if FLASHEND > 0x8000
/* Include some extra code when sufficient flash is available. */

#endif
jippie
fuente