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.
fonte
Respostas:
Encontre o
io__.h
arquivo 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,FLASHEND
sendo essa a que você deveria se interessar. Você pode usá-lo, por exemplo, da seguinte maneira:fonte