Chciałbym, aby moje kompilacje wykluczały część kodu w zależności od dostępnej przestrzeni pamięci flash / programu. Do użycia w kodzie demonstracyjnym obsługiwanej przeze mnie biblioteki. Natomiast moim obecnym rozwiązaniem jest użycie #ifdef typu procesora. Ale chciałbym być bardziej ogólny i nie musiałem określać wszystkich różnych układów. Byłoby raczej miło, gdyby istniała stała preprocesora, która określała dostępny rozmiar.
Tam, gdzie nie jestem wystarczająco biegły w gcc i lub avr-gcc, mogę spodziewać się znalezienia stałych podobnych do tych, które definiują początek i koniec stosu.
Na przykładzie przypadku. Czy zarówno UNO, jak i Leo mają 32 kB Flasha. Ale podstawowa biblioteka Leo wykorzystuje 4K do obsługi USB, co daje tylko 28 KB. Wersja demonstracyjna mojej biblioteki jest prawie maksymalna w UNO i chciałbym automatycznie ją wyciąć na podstawie dostępnej przestrzeni programowej.
źródło
Odpowiedzi:
Znajdź
io__.h
plik dla swojego mikrokontrolera, w systemie Linux, w którym się znajduje/usr/lib/avr/include/avr
, w systemie Windows będzie w nieco podobnej lokalizacji.Przewiń w dół do części, która mówi
/* Constants */
. Zdefiniowano tam kilka interesujących makr,FLASHEND
które powinny Cię zainteresować. Możesz go użyć na przykład w następujący sposób:źródło