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


13

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

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

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


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

Ответы:


10

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

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

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

#endif
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.