Spec-Zone.ru › GCC 10

Next: Blackfin Options, Previous: ARM Options, Up: Options Зависимые от Машины [Содержание][Индекс]

3.19.6 AVR Options ¶

Эти параметры определены для реализаций AVR:

-mmcu=mcu

Укажите архитектуры набора команд Atmel AVR (ISA) или тип микроконтроллера.

По умолчанию для этого параметра установлено значение ‘avr2’.

GCC поддерживает следующие устройства и ISA AVR:

avr2

«Классические» устройства с объемом памяти программ до 8 Кбайт. mcu = attiny22, attiny26, at90s2313, at90s2323, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90c8534, at90s8515, at90s8535.

avr25

«Классические» устройства с объемом памяти программ до 8 Кбайт и с инструкцией MOVW. mcu = attiny13, attiny13a, attiny24, attiny24a, attiny25, attiny261, attiny261a, attiny2313, attiny2313a, attiny43u, attiny44, attiny44a, attiny45, attiny48, attiny441, attiny461, attiny461a, attiny4313, attiny84, attiny84a, attiny85, attiny87, attiny88, attiny828, attiny841, attiny861, attiny861a, ata5272, ata6616c, at86rf401.

avr3

«Классические» устройства с объемом памяти программ от 16 Кбайт до 64 Кбайт. mcu = at76c711, at43usb355.

avr31

«Классические» устройства с объемом памяти программ 128 Кбайт. mcu = atmega103, at43usb320.

avr35

«Классические» устройства с объемом памяти программ от 16 Кбайт до 64 Кбайт и с инструкцией MOVW. mcu = attiny167, attiny1634, atmega8u2, atmega16u2, atmega32u2, ata5505, ata6617c, ata664251, at90usb82, at90usb162.

avr4

«Улучшенные» устройства с объемом памяти программ до 8 Кбайт. mcu = atmega48, atmega48a, atmega48p, atmega48pa, atmega48pb, atmega8, atmega8a, atmega8hva, atmega88, atmega88a, atmega88p, atmega88pa, atmega88pb, atmega8515, atmega8535, ata6285, ata6286, ata6289, ata6612c, at90pwm1, at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81.

avr5

«Улучшенные» устройства с объемом памяти программ от 16 Кбайт до 64 Кбайт. mcu = atmega16, atmega16a, atmega16hva, atmega16hva2, atmega16hvb, atmega16hvbrevb, atmega16m1, atmega16u4, atmega161, atmega162, atmega163, atmega164a, atmega164p, atmega164pa, atmega165, atmega165a, atmega165p, atmega165pa, atmega168, atmega168a, atmega168p, atmega168pa, atmega168pb, atmega169, atmega169a, atmega169p, atmega169pa, atmega32, atmega32a, atmega32c1, atmega32hvb, atmega32hvbrevb, atmega32m1, atmega32u4, atmega32u6, atmega323, atmega324a, atmega324p, atmega324pa, atmega325, atmega325a, atmega325p, atmega325pa, atmega328, atmega328p, atmega328pb, atmega329, atmega329a, atmega329p, atmega329pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa, atmega3290, atmega3290a, atmega3290p, atmega3290pa, atmega406, atmega64, atmega64a, atmega64c1, atmega64hve, atmega64hve2, atmega64m1, atmega64rfr2, atmega640, atmega644, atmega644a, atmega644p, atmega644pa, atmega644rfr2, atmega645, atmega645a, atmega645p, atmega649, atmega649a, atmega649p, atmega6450, atmega6450a, atmega6450p, atmega6490, atmega6490a, atmega6490p, ata5795, ata5790, ata5790n, ata5791, ata6613c, ata6614q, ata5782, ata5831, ata8210, ata8510, ata5702m322, at90pwm161, at90pwm216, at90pwm316, at90can32, at90can64, at90scr100, at90usb646, at90usb647, at94k, m3000.

avr51

«Улучшенные» устройства с объёмом памяти программ 128 Кбайт. mcu = atmega128, atmega128a, atmega128rfa1, atmega128rfr2, atmega1280, atmega1281, atmega1284, atmega1284p, atmega1284rfr2, at90can128, at90usb1286, at90usb1287.

avr6

«Улучшенные» устройства с 3-байтовым PC, т.е. с объемом памяти программ более 128 Кбайт. mcu = atmega256rfr2, atmega2560, atmega2561, atmega2564rfr2.

avrxmega2

Устройства «XMEGA» с объемом памяти программ более 8 Кбайт и до 64 Кбайт. mcu = atxmega8e5, atxmega16a4, atxmega16a4u, atxmega16c4, atxmega16d4, atxmega16e5, atxmega32a4, atxmega32a4u, atxmega32c3, atxmega32c4, atxmega32d3, atxmega32d4, atxmega32e5.

avrxmega3

Устройства «XMEGA» с объемом объединённой памяти программ и ОЗУ до 64 Кбайт и с памятью программы, видимой в адресном пространстве ОЗУ. mcu = attiny202, attiny204, attiny212, attiny214, attiny402, attiny404, attiny406, attiny412, attiny414, attiny416, attiny417, attiny804, attiny806, attiny807, attiny814, attiny816, attiny817, attiny1604, attiny1606, attiny1607, attiny1614, attiny1616, attiny1617, attiny3214, attiny3216, attiny3217, atmega808, atmega809, atmega1608, atmega1609, atmega3208, atmega3209, atmega4808, atmega4809.

avrxmega4

Устройства «XMEGA» с объемом памяти программ более 64 Кбайт и до 128 Кбайт. mcu = atxmega64a3, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3, atxmega64c3, atxmega64d3, atxmega64d4.

avrxmega5

Устройства «XMEGA» с объемом памяти программ более 64 Кбайт и до 128 Кбайт и ОЗУ более 64 Кбайт. mcu = atxmega64a1, atxmega64a1u.

avrxmega6

Устройства «XMEGA» с объёмом памяти программ более 128 Кбайт. mcu = atxmega128a3, atxmega128a3u, atxmega128b1, atxmega128b3, atxmega128c3, atxmega128d3, atxmega128d4, atxmega192a3, atxmega192a3u, atxmega192c3, atxmega192d3, atxmega256a3, atxmega256a3b, atxmega256a3bu, atxmega256a3u, atxmega256c3, atxmega256d3, atxmega384c3, atxmega384d3.

avrxmega7

Устройства «XMEGA» с объемом памяти программ более 128 Кбайт и ОЗУ более 64 Кбайт. mcu = atxmega128a1, atxmega128a1u, atxmega128a4u.

avrtiny

Устройства «TINY» ядра Tiny с объемом памяти программ от 512 байт до 4 Кбайт. mcu = attiny4, attiny5, attiny9, attiny10, attiny20, attiny40.

avr1

Эта ISA реализуется минимальным ядром AVR и поддерживается только для ассемблера. mcu = attiny11, attiny12, attiny15, attiny28, at90s1200.

-mabsdata

Предполагается, что к данным в статическом хранилище можно получить доступ с помощью инструкций LDS / STS. Этот параметр действует только на уменьшенные устройства Tiny, такие как ATtiny40. См. также absdata атрибут переменной.

-maccumulate-args

Накапливать аргументы исходящих функций и получать/освобождать необходимое пространство стека для исходящих аргументов функций один раз в предложении/эпилоге функции. Без этого параметра исходящие аргументы помещаются в стек перед вызовом функции и извлекаются из стека после этого.

Извлечение аргументов после вызова функции может быть дорогостоящим на AVR, поэтому накопление пространства стека может привести к уменьшению исполняемых файлов, поскольку аргументы не нужно удалять из стека после такого вызова функции.

Этот параметр может привести к сокращению размера кода для функций, которые выполняют несколько вызовов функций, получающих свои аргументы в стеке, таких как вызовы функций, подобных printf.

-mbranch-cost=cost

Установите стоимость ветвления для инструкций условного ветвления в cost. Разумные значения для cost — это небольшие неотрицательные целые числа. Стоимость ветвления по умолчанию — 0.

-mcall-prologues

Предложения/эпилоги функций расширяются как вызовы соответствующих подпрограмм. Размер кода меньше.

-mdouble=bits
-mlong-double=bits

Установите размер (в битах) типа double или long double соответственно. Возможные значения для bits — 32 и 64. Разрешение конкретного значения для bits зависит от --with-double= и --with-long-double= параметров конфигурации, и то же самое относится к значениям параметров по умолчанию.

-mgas-isr-prologues

Подпрограммы обработки прерываний (ISR) могут использовать псевдоинструкцию __gcc_isr, поддерживаемую GNU Binutils. Если этот параметр включен, функция по-прежнему может быть отключена для отдельных ISR с помощью атрибута функции no_gccisr. Эта функция активируется по умолчанию, если оптимизация включена (но не с -Og, см. Параметры, управляющие оптимизацией), и если GNU Binutils поддерживает PR21683.

-mint8

Предполагается, что int является 8-битным целым числом. Это влияет на размеры всех типов: char составляет 1 байт, int составляет 1 байт, long составляет 2 байта, а long long составляет 4 байта. Обратите внимание, что этот параметр не соответствует стандартам C, но приводит к меньшему размеру кода.

-mmain-is-OS_task

Не сохранять регистры в main. Эффект аналогичен добавлению атрибута OS_task к main. Он активируется по умолчанию, если включена оптимизация.

-mn-flash=num

Предполагается, что объем памяти Flash составляет num умноженное на 64 КБ.

-mno-interrupts

Сгенерированный код несовместим с аппаратными прерываниями. Размер кода меньше.

-mrelax

По возможности, заменить CALL соответственно JMP инструкцией более короткой RCALL соответственно RJMP инструкцией. Установка -mrelax просто добавляет параметр --mlink-relax в командную строку ассемблера и параметр --relax в командную строку компоновщика.

Расслабление переходов выполняется компоновщиком, поскольку смещения переходов неизвестны до размещения кода. Поэтому, код ассемблера, сгенерированный компилятором, остается неизменным, но инструкции в исполняемом файле могут отличаться от инструкций в коде ассемблера.

Расслабление необходимо включать, если нужны отладочные участки компоновщика, см. раздел о EIND и отладочных участках компоновщика ниже.

-mrmw

Предполагается, что устройство поддерживает инструкции «Чтение-Модификация-Запись» XCH, LAC, LAS и LAT.

-mshort-calls

Предполагается, что RJMP и RCALL могут охватывать всю память программы.

Этот параметр используется внутренне для выбора многокомпиляционных библиотек. Это не параметр оптимизации, и вам не нужно его устанавливать вручную.

-msp8

Обрабатывать регистр указателя стека как 8-битный регистр, т.е. предполагать, что старший байт указателя стека равен нулю. В целом, вам не нужно устанавливать этот параметр вручную.

Этот параметр используется компилятором для выбора и сборки многокомпиляционных библиотек для архитектур avr2 и avr25. Эти архитектуры смешивают устройства с поддержкой и без поддержки SPH. Для любого значения, кроме -mmcu=avr2 или -mmcu=avr25, драйвер компилятора добавляет или удаляет этот параметр в командной строке собственно компилятора, потому что компилятор знает, имеет ли устройство или архитектура 8-битный указатель стека и, следовательно, регистр SPH или нет.

-mstrict-X

Использовать регистр адреса X таким образом, как это предложено аппаратным обеспечением. Это означает, что X используется только в косвенной, пост-инкрементной или пре-декрементной адресации.

Без этого параметра регистр X может использоваться так же, как Y или Z, которые затем эмулируются дополнительными инструкциями. Например, загрузка значения с помощью адресации X+const с небольшим неотрицательным const < 64 в регистр Rn выполняется как

adiw r26, const   ; X += const
ld   Rn, X        ; Rn = *X
sbiw r26, const   ; X -= const
-mtiny-stack

Изменить только младшие 8 битов указателя стека.

-mfract-convert-truncate

Разрешить использовать усечение вместо округления к нулю для дробных типов с фиксированной точкой.

-nodevicelib

Не связывать с устройственно-специфической библиотекой AVR-LibC lib<mcu>.a.

-nodevicespecs

Не добавлять -specs=device-specs/specs-mcu в командную строку драйвера компилятора. Пользователь несет ответственность за предоставление подпроцессам (например, собственному компилятору, ассемблеру и компоновщику) соответствующих параметров командной строки. Это означает, что пользователь должен предоставить свой собственный файл спецификаций устройства с помощью -specs=путь-к-файлу-спецификаций. Больше нет необходимости в параметре -mmcu=mcu.

Этот параметр также может служить заменой старому способу указания пользовательских файлов спецификаций устройства, который требовал -B некоторый-путь для указания каталога, содержащего папку device-specs, которая содержит файл спецификаций specs-mcu, где mcu указывался параметром -mmcu=mcu.

-Waddr-space-convert

Выводить предупреждение о преобразованиях между адресными пространствами в случае, если результирующее адресное пространство не содержится в исходном адресном пространстве.

-Wmisspelled-isr

Выводить предупреждение, если ISR имеет ошибку написания, т. е. без префикса __vector. Включено по умолчанию.

  • EIND и устройства с более чем 128 КБ Flash
  • Обработка RAMPD, RAMPX, RAMPY и RAMPZ специальных регистров функций
  • Встроенные макросы AVR

3.19.6.1 EIND и устройства с более чем 128 КБ Flash памяти ¶

Указатели в реализации имеют ширину 16 бит. Адрес функции или метки представлен как адрес слова, чтобы косвенные переходы и вызовы могли обращаться к любому адресу кода в диапазоне 64 К слов.

Для облегчения косвенных переходов на устройствах с более чем 128 КБ адресного пространства программы существует специальный регистр функции EIND, который служит старшей частью целевого адреса при использовании инструкций EICALL или EIJMP.

Косвенные переходы и вызовы на этих устройствах обрабатываются компилятором следующим образом и подчиняются некоторым ограничениям:

  • Компилятор никогда не устанавливает EIND.
  • Компилятор использует EIND неявно в инструкциях EICALL/EIJMP или может напрямую считывать EIND для эмуляции косвенного вызова/перехода посредством инструкции RET.
  • Компилятор предполагает, что EIND никогда не изменяется во время кода загрузки или во время приложения. В частности, EIND не сохраняется/восстанавливается в преамбуле/эпилоге функции или обработчика прерываний.
  • Для косвенных вызовов функций и вычисления переходов компоновщик генерирует заглушки. Заглушки иногда также называются трамплинами. Таким образом, косвенный вызов/переход переходит к такой заглушке. Заглушка содержит прямой переход по нужному адресу.
  • Необходимо включить расслабление компоновщика, чтобы компоновщик правильно генерировал заглушки во всех ситуациях. См. параметр компилятора -mrelax и параметр компоновщика --relax. В некоторых особых случаях компоновщик должен генерировать заглушки, но прерывается без расслабления и без полезного сообщения об ошибке.
  • Файл скрипта компоновщика по умолчанию организован для кода с EIND = 0. Если код должен работать с настройками EIND != 0, необходимо использовать пользовательский файл скрипта компоновщика для размещения секций, имена которых начинаются с .trampolines, в сегменте, к которому указывает EIND.
  • Код загрузки из libgcc никогда не устанавливает EIND. Обратите внимание, что код загрузки представляет собой комбинацию кода из libgcc и AVR-LibC. Для влияния AVR-LibC на EIND, см. справочник по AVR-LibC.
  • Пользовательский код загрузки может законно установить EIND на ранней стадии, например, с помощью кода инициализации, расположенного в секции .init3. Такой код выполняется до общего кода загрузки, который инициализирует ОЗУ и вызывает конструкторы, но после фрагмента кода загрузки из AVR-LibC, который устанавливает EIND в сегмент, где находится таблица векторов.
    #include <avr/io.h>
    
    static void
    __attribute__((section(".init3"),naked,used,no_instrument_function))
    init3_set_eind (void)
    {
      __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
                      "out %i0,r24" :: "n" (&EIND) : "r24","memory");
    }

    Символ __trampolines_start определен в файле скрипта компоновщика.

  • Заглушки генерируются автоматически компоновщиком, если выполнены следующие два условия:
    • Адрес метки берется с помощью модификатора gs (сокращенно от сгенерировать заглушки), например:
      LDI r24, lo8(gs(func))
      LDI r25, hi8(gs(func))
    • Конечное расположение этой метки находится в сегменте кода вне сегмента, где находятся заглушки.
  • Компилятор генерирует такие модификаторы gs для меток кода в следующих ситуациях:
    • Получение адреса функции или метки кода.
    • Вычисление переходов.
    • Если используется функция предварительного сохранения, см. параметр командной строки -mcall-prologues.
    • Таблицы переходов switch/case. Если вы не хотите такие таблицы переходов, вы можете указать параметр командной строки -fno-jump-tables.
    • Конструкторы/деструкторы C и C++, вызываемые во время загрузки/выгрузки.
    • Если инструменты столкнутся с модификатором gs() (описанном выше).
  • Переход к несимвольному адресу, например,
    int main (void)
    {
        /* Call function at word address 0x2 */
        return ((int(*)(void)) 0x2)();
    }

    Вместо этого должна быть создана заглушка, т. е. функция должна вызываться через символ (func_4 в примере):

    int main (void)
    {
        extern int func_4 (void);
    
        /* Call function at byte address 0x4 */
        return func_4();
    }

    и приложение должно быть скомпоновано с -Wl,--defsym,func_4=0x4. В качестве альтернативы, func_4 может быть определено в файле скрипта компоновщика.

3.19.6.2 Обработка специальных регистров функций RAMPD, RAMPX, RAMPY и RAMPZ ¶

Некоторые устройства AVR поддерживают память, превышающую диапазон 64 Кбайт, к которой можно получить доступ с помощью 16-битных указателей. Для доступа к ячейкам памяти за пределами этого диапазона 64 Кбайт используется содержимое регистра RAMP: Регистр адресации X, Y, Z соответственно конкатенируется с регистром специальной функции RAMPX, RAMPY, RAMPZ, чтобы получить расширенный адрес. Аналогично, RAMPD используется совместно с прямой адресацией.

  • Код запуска инициализирует регистры специальных функций RAMP нулём.
  • Если используется пространство имён, отличное от общего или __flash, то RAMPZ устанавливается в соответствии с необходимостью перед операцией.
  • Если устройство поддерживает ОЗУ размером более 64 Кбайт, и компилятору нужно изменить RAMPZ для выполнения операции, то RAMPZ сбрасывается в ноль после операции.
  • Если устройство имеет специфический регистр RAMP, то преамбула/эпилог ISR сохраняет/восстанавливает этот SFR и инициализирует его нулём, в случае если код ISR может (неявным образом) его использовать.
  • ОЗУ размером более 64 Кбайт не поддерживается GCC для целевых платформ AVR. Если вы используете встроенный ассемблер для чтения из расположений вне 16-битного диапазона адресов и изменяете один из регистров RAMP, вы должны сбросить его в ноль после доступа.

3.19.6.3 Встроенные макросы AVR ¶

GCC определяет несколько встроенных макросов, чтобы код пользователя мог проверить наличие или отсутствие функций. Почти все следующие встроенные макросы выводятся из возможностей устройства и, таким образом, вызываются опцией командной строки -mmcu=.

Для ещё большего числа встроенных макросов, специфичных для AVR, см. Пространства имён AVR и Встроенные функции AVR.

__AVR_ARCH__

Встроенный макрос, который отображается в виде десятичного числа, определяющего архитектуру и зависящего от опции -mmcu=mcu. Возможные значения:

2, 25, 3, 31, 35, 4, 5, 51, 6

для mcu=avr2, avr25, avr3, avr31, avr35, avr4, avr5, avr51, avr6,

соответственно и

100, 102, 103, 104, 105, 106, 107

для mcu=avrtiny, avrxmega2, avrxmega3, avrxmega4, avrxmega5, avrxmega6, avrxmega7, соответственно. Если mcu указывает на устройство, этот встроенный макрос устанавливается соответствующим образом. Например, с -mmcu=atmega8 макрос определяется как 4.

__AVR_Device__

Установка -mmcu=device определяет этот встроенный макрос, который отражает имя устройства. Например, -mmcu=atmega8 определяет встроенный макрос __AVR_ATmega8__, -mmcu=attiny261a определяет __AVR_ATtiny261A__, и т.д.

Имена встроенных макросов следуют схеме __AVR_Device__, где Device — имя устройства из руководства пользователя AVR. Разница между Device во встроенном макросе и device в -mmcu=device заключается в том, что последнее всегда в нижнем регистре.

Если device не является устройством, а только ядром архитектуры, например «avr51», этот макрос не определяется.

__AVR_DEVICE_NAME__

Установка -mmcu=device определяет этот встроенный макрос именем устройства. Например, при -mmcu=atmega8 макрос определяется как atmega8.

Если device не является устройством, а только ядром архитектуры, например ‘avr51’, этот макрос не определяется.

__AVR_XMEGA__

Устройство / архитектура принадлежит семейству устройств XMEGA.

__AVR_HAVE_ELPM__

Устройство имеет инструкцию ELPM.

__AVR_HAVE_ELPMX__

Устройство имеет инструкции ELPM Rn,Z и ELPM Rn,Z+.

__AVR_HAVE_MOVW__

Устройство имеет инструкцию MOVW для выполнения перемещений регистр-регистр по 16 бит.

__AVR_HAVE_LPMX__

Устройство имеет инструкции LPM Rn,Z и LPM Rn,Z+.

__AVR_HAVE_MUL__

Устройство имеет аппаратный умножитель.

__AVR_HAVE_JMP_CALL__

Устройство имеет инструкции JMP и CALL. Это относится к устройствам с более чем 8 Кбайт программной памяти.

__AVR_HAVE_EIJMP_EICALL__
__AVR_3_BYTE_PC__

Устройство имеет инструкции EIJMP и EICALL. Это относится к устройствам с более чем 128 Кбайт программной памяти. Это также означает, что программный счётчик (PC) имеет ширину 3 байта.

__AVR_2_BYTE_PC__

Программный счётчик (PC) имеет ширину 2 байта. Это относится к устройствам с объёмом программной памяти до 128 Кбайт.

__AVR_HAVE_8BIT_SP__
__AVR_HAVE_16BIT_SP__

Регистр указателя стека (SP) обрабатывается компилятором как 8-битный, соответственно, 16-битный регистр. Определение этих макросов зависит от опции -mtiny-stack.

__AVR_HAVE_SPH__
__AVR_SP8__

Устройство имеет регистр SPH (старшая часть указателя стека) или имеет 8-битный указатель стека, соответственно. Определение этих макросов зависит от -mmcu=, а в случае -mmcu=avr2 и -mmcu=avr25 также от -msp8.

__AVR_HAVE_RAMPD__
__AVR_HAVE_RAMPX__
__AVR_HAVE_RAMPY__
__AVR_HAVE_RAMPZ__

Устройство имеет регистры RAMPD, RAMPX, RAMPY, RAMPZ соответственно.

__NO_INTERRUPTS__

Этот макрос отражает опцию командной строки -mno-interrupts.

__AVR_ERRATA_SKIP__
__AVR_ERRATA_SKIP_JMP_CALL__

Некоторые устройства AVR (AT90S8515, ATmega103) не должны пропускать 32-битные инструкции из-за аппаратной ошибки. Инструкции пропуска — SBRS, SBRC, SBIS, SBIC и CPSE. Второй макрос определяется только в том случае, если __AVR_HAVE_JMP_CALL__ также установлен.

__AVR_ISA_RMW__

Устройство имеет инструкции чтения-модификации-записи (XCH, LAC, LAS и LAT).

__AVR_SFR_OFFSET__=offset

Инструкции, которые могут напрямую адресовать регистры специальных функций ввода/вывода, такие как IN, OUT, SBI и т.д., могут использовать другой адрес, как если бы они адресовались инструкцией для доступа к ОЗУ, например LD или STS. Этот смещение зависит от архитектуры устройства и должен быть вычтен из адреса ОЗУ, чтобы получить соответствующий адрес ввода/вывода.

__AVR_SHORT_CALLS__

Установлена опция командной строки -mshort-calls.

__AVR_PM_BASE_ADDRESS__=addr

Некоторые устройства поддерживают чтение из флэш-памяти с помощью инструкций LD*. Флэш-память отображается в адресном пространстве данных со смещением __AVR_PM_BASE_ADDRESS__. Если этот макрос не определён, эта функция недоступна. Если определён, адресное пространство линейное, и нет необходимости помещать .rodata в ОЗУ. Это обрабатывается файлом описания линкера по умолчанию и в настоящее время доступно для avrtiny и avrxmega3. Ещё удобнее, нет необходимости использовать адресные пространства, такие как __flash, или функции, такие как атрибут progmem и pgm_read_*.

__WITH_AVRLIBC__

Компилятор настроен для использования с AVR-Libc. См. опцию конфигурации --with-avrlibc.

__HAVE_DOUBLE_MULTILIB__

Определяется, если -mdouble= действует как опция multilib.

__HAVE_DOUBLE32__
__HAVE_DOUBLE64__

Определяется, если компилятор поддерживает 32-битные double соответственно 64-битные double. Фактическое расположение задаётся опцией -mdouble=.

__DEFAULT_DOUBLE__

Размер в битах double, если -mdouble= не установлена. Для проверки расположения double в программе используйте встроенный макрос __SIZEOF_DOUBLE__.

__HAVE_LONG_DOUBLE32__
__HAVE_LONG_DOUBLE64__
__HAVE_LONG_DOUBLE_MULTILIB__
__DEFAULT_LONG_DOUBLE__

То же самое, но для long double вместо double.

__WITH_DOUBLE_COMPARISON__

Отражает опцию конфигурации --with-double-comparison={tristate|bool|libf7} configure option и определяется как 2 или 3.

__WITH_LIBF7_LIBGCC__
__WITH_LIBF7_MATH__
__WITH_LIBF7_MATH_SYMBOLS__

Отражает опцию конфигурации --with-libf7={libgcc|math|math-symbols} configure option.

Далее: Опции Blackfin, Предыдущее: Опции ARM, Вверх: Машинно-зависимые опции [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/AVR-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API