Есть ли константа препроцессора для размера памяти
Я хотел бы, чтобы мои компиляции исключали некоторый код в зависимости от доступного места во флэш-памяти/программе. Для использования в демонстрационном коде библиотеки, которую я поддерживаю. Принимая во внимание, что мое текущее решение состоит в том, чтобы использовать #ifdef типа процессора. Но я хотел бы быть более общим и не указывать все различные фишки. Скорее было бы неплохо, если бы существовала константа препроцессора, указывающая доступный размер.
Там, где я недостаточно хорошо владею gcc и/или avr-gcc, я могу ожидать найти некоторые константы, подобные тем, которые определяют начало и конец кучи.
На примере случая. Разве что у UNO и Leo 32K Flash. Но основная библиотека Leo использует 4K для поддержки USB, в результате чего доступно только 28K. Демонстрационная версия моей библиотеки почти исчерпана на UNO, и я хотел бы автоматически обрезать ее в зависимости от доступного места для программы.
@mpflaga, 👍15
Обсуждение1 ответ
Лучший ответ:
Найдите файл io__.h
для вашего микроконтроллера, в Linux он находится в /usr/lib/avr/include/avr
, в Windows он будет в несколько похожее место.
Прокрутите вниз до части с надписью /* Constants */
. Там определено несколько интересных макросов, и вам должен быть интересен FLASHEND
. Вы можете использовать его, например, следующим образом:
#if FLASHEND > 0x8000
/* Включите дополнительный код, если доступно достаточно флэш-памяти. */
#endif
- Будет ли .ino-скетч ардуино компилироваться непосредственно на GCC-AVR?
- Установка timer3 в режиме CTC - конфликт с сервобиблиотекой
- Как писать скетчи, совместимые с makefile?
- Использование платы Arduino для программирования AVR
- Компиляция кода через терминал
- неопределенная ссылка на `PPMintIn::PPMintIn(int)'
- Как заставить Arduino IDE использовать определенную версию GCC в Debian?
- UECIDE: ошибка компоновщика с библиотекой U8g2
Я видел программы, которые делают это, но я не могу найти ни одной., @TheDoctor