Existe-t-il une constante de préprocesseur pour la taille de la mémoire


13

Je voudrais que mes compilations excluent du code en fonction de l'espace flash / programme disponible. A utiliser dans le code démo d'une bibliothèque que je supporte. Alors que ma solution actuelle consiste à utiliser un #ifdef de type processeur. Mais je voudrais être plus général et ne pas avoir à spécifier toutes les différentes puces. Ce serait plutôt bien s'il y avait une constante de pré-processeur qui indiquait la taille disponible.

Là où je ne maîtrise pas assez bien gcc et ou avr-gcc, je pourrais m'attendre à trouver des constantes similaires à celles qui définissent le début et la fin du tas.

Sur l'exemple de cas. Est-ce que l'UNO et Leo ont 32K de Flash. Mais la bibliothèque principale de Leo utilise 4K pour la prise en charge USB, ce qui ne donne que 28K disponibles. La démo de ma bibliothèque est presque au maximum sur l'UNO et je voudrais couper automatiquement en fonction de l'espace de programme disponible.


J'ai vu des programmes qui font cela, mais je n'en trouve aucun
TheDoctor

Réponses:


10

Trouvez le io__.hfichier de votre microcontrôleur, sous Linux, il se trouve /usr/lib/avr/include/avr, sous Windows, il sera dans un emplacement quelque peu similaire.

Faites défiler jusqu'à la partie qui dit /* Constants */. Il y a quelques macros intéressantes définies ici, FLASHENDétant celle qui devrait vous intéresser. Vous pouvez l'utiliser par exemple comme suit:

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

#endif
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.