Czy istnieje stała preprocesora dla wielkości pamięci

13

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.

mpflaga
źródło
Widziałem programy, które to robią, ale nie mogę ich znaleźć
TheDoctor

Odpowiedzi:

10

Znajdź io__.hplik 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, FLASHENDktóre powinny Cię zainteresować. Możesz go użyć na przykład w następujący sposób:

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

#endif
jippie
źródło