Есть ли константа препроцессора для размера памяти

Я хотел бы, чтобы мои компиляции исключали некоторый код в зависимости от доступного места во флэш-памяти/программе. Для использования в демонстрационном коде библиотеки, которую я поддерживаю. Принимая во внимание, что мое текущее решение состоит в том, чтобы использовать #ifdef типа процессора. Но я хотел бы быть более общим и не указывать все различные фишки. Скорее было бы неплохо, если бы существовала константа препроцессора, указывающая доступный размер.

Там, где я недостаточно хорошо владею gcc и/или avr-gcc, я могу ожидать найти некоторые константы, подобные тем, которые определяют начало и конец кучи.

На примере случая. Разве что у UNO и Leo 32K Flash. Но основная библиотека Leo использует 4K для поддержки USB, в результате чего доступно только 28K. Демонстрационная версия моей библиотеки почти исчерпана на UNO, и я хотел бы автоматически обрезать ее в зависимости от доступного места для программы.

, 👍15

Обсуждение

Я видел программы, которые делают это, но я не могу найти ни одной., @TheDoctor


1 ответ


Лучший ответ:

11

Найдите файл io__.h для вашего микроконтроллера, в Linux он находится в /usr/lib/avr/include/avr, в Windows он будет в несколько похожее место.

Прокрутите вниз до части с надписью /* Constants */. Там определено несколько интересных макросов, и вам должен быть интересен FLASHEND. Вы можете использовать его, например, следующим образом:

#if FLASHEND > 0x8000
/* Включите дополнительный код, если доступно достаточно флэш-памяти. */

#endif
,