4.13.2 Predefined Macros
The compiler drivers define certain symbols to the preprocessor, allowing conditional compilation based on chip type, etc. The symbols tabulated below show the more common symbols defined by the drivers. Each symbol, if defined, is equated to 1 (unless otherwise stated).
Symbol | Description |
---|---|
__AVR_Device__ | Set when the -mcpu option specifies a device rather than an architecture. It indicates the device, for example when compiling for an atmega8, the macro __AVR_ATmega8__ will be set. |
__AVR_DEVICE_NAME__ | Set when the -mcpu option specifies a device rather than an architecture. It indicates the device, for example when compiling for an atmega8 the macro is defined to atmega8. |
__AVR_ARCH__ | Indicates the device architecture. Possible values are: 2, 25, 3, 31, 35, 4, 5, 51, 6 for the avr2, avr25, avr3, avr31, avr35, avr4, avr5, avr51, avr6, architectures respectively and 100, 102, 103, 104, 105, 106, 107 for the avrtiny, avrxmega2, avrxmega3, avrxmega4, avrxmega5, avrxmega6, avrxmega7, architectures respectively. |
__AVR_ASM_ONLY__ | Indicates that the selected device can only be programmed in assembly. |
__AVR_COMPACT_VECTOR_TABLE__ | Indicates that the compiler will configure the program to use compact interrupt vector tables. |
__AVR_CONST_DATA_IN_CONFIG_MAPPED_PROGMEM__ | Indicates that const -qualified objects will be placed in a 32 KB program section that will be mapped into data memory. |
__AVR_CONST_DATA_IN_PROGMEM__ | Indicates that const -qualified objects will be placed in program memory. |
__AVR_ERRATA_SKIP__
| Indicates the selected device (AT90S8515, ATmega103) must not skip (SBRS, SBRC, SBIS, SBIC, and CPSE instructions) 32-bit instructions because of a hardware erratum. The second macro is only defined if __AVR_HAVE_JMP_CALL__ is also set. |
__AVR_HAVE_DIVA__ | Indicates that the device being targeted has the DIVA module and it is enabled. |
__AVR_HAVE_EIJMP_EICALL__ | Indicates the selected device has more then 128 KB of program memory, a 3-byte wide program counter, and the eijmp and eicall instructions. |
__AVR_HAVE_ELPM__ | Indicates the selected device has the elpm instruction. |
__AVR_HAVE_ELPMX__ | Indicates the device has the elpm Rn,Z and elpm Rn,Z+ instructions. |
__AVR_HAVE_JMP_CALL__ | Indicates the selected device has the jmp and call instructions and has more than 8 KB of program memory. |
__AVR_HAVE_LPMX__ | Indicates the selected device has the lpm Rn,Z and lpm Rn,Z+ instructions. |
__AVR_HAVE_MOVW__ | Indicates the selected device has the movw instruction, to perform 16-bit register-register moves. |
__AVR_HAVE_MUL__
| Indicates the selected device has a hardware multiplier. |
__AVR_HAVE_RAMPD__
| Indicates the device has the RAMPD, RAMPX, RAMPY, or RAMPZ special function register, respectively. |
__AVR_HAVE_SPH__
| Indicates the device has a 16- or 8-bit stack pointer, respectively. The definition of these macros is affected by the selected device, and for avr2 and avr25 architectures. |
__AVR_HAVE_8BIT_SP__
| Indicates the whether 8- or 16-bits of the stack pointer is used, respectively, by the compiler. The -mtiny-stack option will affect which macros are defined |
__AVR_ISA_RMW__ | Indicates the selected device has Read-Modify-Write instructions (xch , lac , las and lat ). |
__AVR_MEGA__ | Indicates the selected devices jmp and call instructions. |
__AVR_PM_BASE_ADDRESS__=addr | Indicates the address space is linear and program memory is mapped into data memory. The value assigned to this macro is the starting address of the mapped memory. |
__AVR_SFR_OFFSET__=offset | Indicates the offset to subtract from the data memory address for those instructions (e.g. in , out , and sbi ) that can access SFRs directly. |
__AVR_SHORT_CALLS__ | Indicates the use of the -mshort-calls option, which affects the call instruction used and which can be set automatically. |
__AVR_TINY__ | Indicates that the selected device or architecture implements the avrtiny core. Note that some ATtiny devices do not use the avrtiny core. |
__AVR_TINY_PM_BASE_ADDRESS__=addr | Deprecated; use __AVR_PM_BASE_ADDRESS__ . Indicates the avrtiny core device address space is linear and program memory is mapped into data memory. |
__AVR_XMEGA__ | Indicates that the selected device or architecture belongs to the XMEGA family. |
__AVR_2_BYTE_PC__ | Indicates the selected device has up to 128 KB of program memory and the program counter is 2 bytes wide. |
__AVR_3_BYTE_PC__ | Indicates the selected device has at least 128 KB of program memory and the program counter is 3 bytes wide. |
__BUILTIN_AVR_name | Indicates the names built-in feature is available for the selected device |
__CODECOV | When code coverage is enabled, with value __CC_RAM (1). |
__DEBUG | When performing a debug build and you are using the MPLAB X IDE. |
__FLASHn | Defines __FLASH , __FLASH1 , __FLASH2 etc, based on the number of flash segments on the selected device. |
__LINE__ | Indicates the source line number. |
__MEMX | Indicates the __memx specifier is available for the selected device. |
__NO_INTERRUPTS__ | Indicates the use of the -mno-interrupts option, which affects how the stack pointer is changed. |
__DATE__ | Indicates the current date, e.g., May 21 2004. |
__FILE__ | Indicates this source file being preprocessed. |
__TIME__ | Indicates the current time, e.g., 08:06:31. |
__XC | Indicates MPLAB XC compiler for Microchip is in use. |
__XC8 | Indicates MPLAB XC compiler for Microchip 8-bit devices is in use |
__XC8_VERSION | Indicates the compiler’s version number multiplied by 1000, e.g., v1.00 will be represented by 1000. |