3.19.6 AVR Options
These options are defined for AVR implementations:
-mmcu=mcu-
Specify Atmel AVR instruction set architectures (ISA) or MCU type.
The default for this option is ‘avr2’.
GCC supports the following AVR devices and ISAs:
avr2-
“Classic” devices with up to 8 KiB of program memory. mcu =
attiny22,attiny26,at90s2313,at90s2323,at90s2333,at90s2343,at90s4414,at90s4433,at90s4434,at90c8534,at90s8515,at90s8535. avr25-
“Classic” devices with up to 8 KiB of program memory and with the
MOVWinstruction. 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-
“Classic” devices with 16 KiB up to 64 KiB of program memory. mcu =
at76c711,at43usb355. avr31-
“Classic” devices with 128 KiB of program memory. mcu =
atmega103,at43usb320. avr35-
“Classic” devices with 16 KiB up to 64 KiB of program memory and with the
MOVWinstruction. mcu =attiny167,attiny1634,atmega8u2,atmega16u2,atmega32u2,ata5505,ata6617c,ata664251,at90usb82,at90usb162. avr4-
“Enhanced” devices with up to 8 KiB of program memory. 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-
“Enhanced” devices with 16 KiB up to 64 KiB of program memory. 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,atmega324pb,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-
“Enhanced” devices with 128 KiB of program memory. mcu =
atmega128,atmega128a,atmega128rfa1,atmega128rfr2,atmega1280,atmega1281,atmega1284,atmega1284p,atmega1284rfr2,at90can128,at90usb1286,at90usb1287. avr6-
“Enhanced” devices with 3-byte PC, i.e. with more than 128 KiB of program memory. mcu =
atmega256rfr2,atmega2560,atmega2561,atmega2564rfr2. avrxmega2-
“XMEGA” devices with more than 8 KiB and up to 64 KiB of program memory. mcu =
atxmega8e5,atxmega16a4,atxmega16a4u,atxmega16c4,atxmega16d4,atxmega16e5,atxmega32a4,atxmega32a4u,atxmega32c3,atxmega32c4,atxmega32d3,atxmega32d4,atxmega32e5. avrxmega3-
“XMEGA” devices with up to 64 KiB of combined program memory and RAM, and with program memory visible in the RAM address space. 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” devices with more than 64 KiB and up to 128 KiB of program memory. mcu =
atxmega64a3,atxmega64a3u,atxmega64a4u,atxmega64b1,atxmega64b3,atxmega64c3,atxmega64d3,atxmega64d4. avrxmega5-
“XMEGA” devices with more than 64 KiB and up to 128 KiB of program memory and more than 64 KiB of RAM. mcu =
atxmega64a1,atxmega64a1u. avrxmega6-
“XMEGA” devices with more than 128 KiB of program memory. mcu =
atxmega128a3,atxmega128a3u,atxmega128b1,atxmega128b3,atxmega128c3,atxmega128d3,atxmega128d4,atxmega192a3,atxmega192a3u,atxmega192c3,atxmega192d3,atxmega256a3,atxmega256a3b,atxmega256a3bu,atxmega256a3u,atxmega256c3,atxmega256d3,atxmega384c3,atxmega384d3. avrxmega7-
“XMEGA” devices with more than 128 KiB of program memory and more than 64 KiB of RAM. mcu =
atxmega128a1,atxmega128a1u,atxmega128a4u. avrtiny-
“TINY” Tiny core devices with 512 B up to 4 KiB of program memory. mcu =
attiny4,attiny5,attiny9,attiny10,attiny20,attiny40. avr1-
This ISA is implemented by the minimal AVR core and supported for assembler only. mcu =
attiny11,attiny12,attiny15,attiny28,at90s1200.
-mabsdata-
Assume that all data in static storage can be accessed by LDS / STS instructions. This option has only an effect on reduced Tiny devices like ATtiny40. See also the
absdatavariable attribute. -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-
Предполагается, что размер памяти флэш-памяти составляет 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. Включено по умолчанию.
3.19.6.1 EIND и устройства с более чем 128 Кбайт флэш-памяти
Указатели в реализации имеют ширину 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(сокращение от generate stubs), например: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, пролог/эпилог обработки прерывания сохраняет/восстанавливает этот регистр SFR и инициализирует его нулём, если код обработки прерывания может (неявно) использовать его. - ОЗУ больше 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= действует как опция многократной компиляции.
__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-12.2.0/gcc/AVR-Options.html