Existe uma constante de pré-processador para o tamanho da memória

13

Gostaria que minhas compilações excluíssem algum código, dependendo do espaço disponível no flash / programa. Para ser usado no código de demonstração de uma biblioteca que eu suporte. Considerando que minha solução atual é usar um #ifdef do tipo de processador. Mas gostaria de ser mais geral e não precisar especificar todos os vários chips. Em vez disso, seria bom se houvesse uma constante de pré-processador que declarasse o tamanho disponível.

Onde eu não sou fluente o suficiente no gcc e no avr-gcc, espero encontrar algumas constantes semelhantes às que definem o início e o fim do heap.

No exemplo do caso. É que tanto a ONU como o Leo têm 32K de Flash. Mas a biblioteca principal do Leo usa 4K para suporte a USB, resultando em apenas 28 mil disponíveis. A demonstração da Minha biblioteca está quase no máximo na UNO e eu gostaria de cortar automaticamente com base no espaço disponível do programa.

mpflaga
fonte
Já vi programas que fazem isso, mas eu não consigo encontrar nenhuma
TheDoctor

Respostas:

10

Encontre o io__.harquivo para o seu microcontrolador, no Linux em que está localizado /usr/lib/avr/include/avr, no Windows, ele estará em um local semelhante.

Role para baixo até a parte que diz /* Constants */. Existem algumas macros interessantes definidas, FLASHENDsendo essa a que você deveria se interessar. Você pode usá-lo, por exemplo, da seguinte maneira:

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

#endif
jippie
fonte