Чи є константа препроцесора для розміру пам'яті


13

Я хотів би, щоб мої компіляції виключали якийсь код залежно від наявного флеш / програмного простору. Для використання в демо-коді бібліотеки, яку я підтримую. Тоді як моє поточне рішення - використовувати #ifdef типу процесора. Але я хотів би бути більш загальним і не потрібно вказувати всі різні фішки. Швидше було б добре, якби була константа попереднього процесора, яка визначала б наявний розмір.

Там, де я недостатньо вільний в gcc або avr-gcc, я можу очікувати, що я знайду деякі константи, подібні до тих, що визначають початок і кінець купи.

На прикладі випадку Хіба що у ООН та Лео є 32K Flash. Але основна бібліотека Лео використовує 4K для підтримки USB, в результаті чого доступно лише 28 Кб. Демонстрація моєї бібліотеки майже вимкнута в ООН, і я хотів би автоматично обрізати на основі наявного програмного простору.


Я бачив програми, які це роблять, але не можу знайти жодної
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.