Messages 2000 Thru 2499

(2000) * attribute/specifier has a misplaced keyword (*) (Parser)

An attribute token has been used in a context where it was not expected.
// oops -- ’base’ is a token which has specific meaning
void __interrupt(irq(base)) isr(void)

(2001) * attribute/specifier has a misplaced parenthesis (Parser)

The parentheses used in this attribute construct are not correctly formed. Check to ensure that you do not have extra brackets and that they are in the correct position.
void __interrupt(irq((TMR0)) isr(void) // oops -- one too many ’(’s

(2002) __interrupt attribute/specifier has conflicting priority-levels (Parser)

More than one priority has been assigned to an interrupt function definition.
//oops -- is it meant to be low or high priority?

void __interrupt(irq(TMR0), high_priority, low_priority) tc0Int(void)

(2003) * attribute/specifier has a duplicate keyword (*) (Parser)

The same token has been used more than once in this attribute. Check to ensure that one of these was not meant to be something else.
//oops -- using high_priority twice has no special meaning

void __interrupt(irq(TMR0), high_priority, high_priority) tc0Int(void)

(2004) __interrupt attribute/specifier has an empty “irq” list (Parser)

The irq() argument to the __interrupt() specifier takes a comma-separated list of interrupt vector numbers or symbols. At least one value or symbol must be present to link this function to the interrupt source.
//oops -- irq() does not indicate the interrupt source

void __interrupt(irq(),high_priority) tc0Int(void)

(2005) __interrupt attribute/specifier has an empty “base” list (Parser)

The base() argument to the __interrupt() specifier is optional, but when used it must take a comma-separated list of interrupt vector table addresses. At least one address must be present to position the vector table. If you do not specify the base address with an ISR, its vector will be located in an interrupt vector table located at an address equal to the reset value of the IVTBASE register.
//oops -- base() was used but did not indicate a vector table address

void __interrupt(irq(TMR0), base()) tc0Int(void)

(2006) __interrupt attribute/specifier has a duplicate “irq” (*) (Parser)

An irq() argument to the __interrupt() specifier has been used more than once.
//oops -- is one of those sources wrong?

void __interrupt(irq(TMR0,TMR0)) tc0Int(void)

(2007) __interrupt attribute/specifier has a duplicate “base” (*) (Parser)

The same base() argument to the __interrupt() specifier has been used more than once.
//oops -- is one of those base addresses wrong?

void __interrupt(irq(TMR0), base(0x100,0x100)) tc0Int(void)

(2008) unknown “irq” (*) in __interrupt attribute/specifier (Parser)

The interrupt symbol or number used with the irq() argument to the __interrupt() specifier does not correspond with an interrupt source on this device.
//oops -- what interrupt source is TODO?

void __interrupt(irq(TODO),high_priority) tc0Int(void)

(2009) * attribute/specifier has a misplaced number (*) (Parser)

A numerical value appears in an attribute where it is not expected.
//oops -- this specifier requires specific argument, not a number
void __interrupt(0) isr(void)

(2010) __interrupt attribute/specifier contains a misplaced interrupt source name (*)
 (Parser)

An interrupt source name can only be used as an argument to irq().
//oops -- base() needs a vector table address

void __interrupt(irq(TMR0), base(TMR0)) tc0Int(void)

(2011) __interrupt attribute/specifier has a base (*) not supported by this device (Parser)

The address specified with the base() argument to the __interrupt() specifier is not valid for the target device. It cannot, for example, be lower than the reset value of the IVTBASE register.
//oops -- the base() address is too low

void __interrupt(irq(TMR0), base(0x00)) tc0Int(void)

(2012) * attribute/specifier is only applicable to functions (Parser)

The __interrupt() specifier has been used with something that is not a function.
// oops -- foobar is an int, not an ISR

__interrupt(irq(TMR0)) int foobar;

(2013) argument “*” used by “*” attribute/specifier not supported by this device (Parser)

The argument of the indicated specifier is not valid for the target device.
// oops -- base() can’t be used with a device that does not

// support vectored interrupts

void __interrupt(base(0x100)) myMidrangeISR(void)

(2014) interrupt vector table @ 0x* already has a default ISR “*” (Code Generator)

You can indicate only one default interrupt function for any vector location not specified in a vector table. If you have specified this twice, check to make sure that you have specified the correct base() address for each default.
void __interrupt(irq(default), base(0x100)) tc0Int(void) { ...

void __interrupt(irq(default), base(0x100)) tc1Int(void) { ...
// oops -- did you mean to use different different base() addresses?

(2015) interrupt vector table @ 0x* already has an ISR (*) to service IRQ * (*)
 (Parser or Code Generator)

You have specified more than one interrupt function to handle a particular interrupt source in the same vector table.
void __interrupt(irq(TMR0), base(0x100)) tc0Int(void) { ...

void __interrupt(irq(TMR0), base(0x100)) tc1Int(void) { ...
// oops -- did you mean to use different different base() addresses?

(2016) interrupt function “*” does not service any interrupt sources (Code Generator)

You have defined an interrupt function but did not indicate which interrupt source this function should service. Use the irq() argument to indicate the source or sources.
//oops -- what interrupt does this service?

void __interrupt(low_priority, base(0x100)) tc0Int(void)

(2017) config programming has disabled multi-vectors, “irq” in __interrupt attribute/specifier is ignored (Code Generator)

An interrupt function has used the irq() argument to specify an interrupt source, but the vector table has been disabled via the configuration bits. Either re-enable vectored interrupts or use the priority keyword in the __interrupt() specifier to indicate the interrupt source.
#pragma config MVECEN=0

void __interrupt(irq(TMR0), base(0x100)) tc0Int(void)

// oops -- you cannot disable the vector table then allocate interrupt

// functions a vector source using irq()

(2018) interrupt vector table @ 0x* has multiple functions (* and *) defined at interrupt level * (Code Generator)

The program for a device operating in legacy mode has specified a vector table that contains more than one function at the same interrupt priority-level in the same table. In this mode, there can be at most one interrupt function for each priority level in each vector table.
#pragma config MVECEN=0

void __interrupt(high_priority) tc0Int(void) {...

void __interrupt(high_priority) tc1Int(void) {...

(2019) * interrupt vector in table @ 0x* is unassigned, will be programmed with a *
 (Code Generator)

In a program for a device operating in legacy mode, an interrupt vector in the indicated vector table has not been programmed with an address. The compiler will program this vector with an address as specified by the -mundefints option.

(2020) IRQ * (*) in vector table @ 0x* is unassigned, will be programmed with the address of a * (Code Generator)

The interrupt vector in the indicated vector table has not been programmed with an address. The compiler will program this vector with an address as specified by the -mundefints option.

(2021) invalid runtime “*” sub-option argument (*) (Driver)

The argument to a sub-option specified with the --RUNTIME option is not valid.
--RUNTIME=default,+ivt:reset

Oops, the ivt suboption requires a numeric address as its argument.

(2022) runtime sub-option “ivt” specifies a base address (0x*) not supported by this device (Driver)

The address specified with the ivt sub-option is not valid for the selected target device. It cannot, for example, be lower than the reset value of the IVTBASE register.

(2023) IVT @ 0x* will be selected at startup (Code Generator)

The source code defines more than one IVT and no address was specified with the ivt sub-option to the --RUNTIME option to indicate which table should be selected at startup. The IVT with the lowest address will be selected by the compiler. It is recommended that you always specify the table address when using this option.

(2024) runtime sub-option “ivt” specifies an interrupt table (@ 0x*) that has not been defined (Driver)

The ivt sub-option to the --RUNTIME option was used to specify a IVT address, but this address has not been specified in the source code with any ISR. Check that the address in the option is correct, or check that the base() arguments to the __interrupt() specifier are specified and are correct.
--RUNTIME=+ivt:0x100

Oops -- is this the right address? Nothing in the source code uses this base address.

(2025) qualifier * on local variable “*” is not allowed and has been ignored (Parser)

Some qualifiers are not permitted with auto or local static variables. This message indicates that the indicated qualifier has been ignored with the named variable.
near int foobar; // oops -- auto variables cannot use near

(2026) variables qualified “*” are not supported for this device (Parser)

Some variable qualifiers are not permitted with some devices.
eeprom int serialNo; // oops -- can’t use eeprom with PIC18 devices

(2027) initialization of absolute variable “*” in * is not supported (Code Generator)

The variable indicated cannot be specified as absolute in the memory space.
eeprom char foobar __at(0x40) = 99; // oops - absolute can’t be eeprom

(2028) external declaration for identifier “*” doesn't indicate storage location
 (Code Generator)

The declaration for an external object (e.g., one defined in assembly code) has no storage specifiers to indicate the memory space in which it might reside. Code produced by the compiler which accesses it might fail. Use const or a bank specifier as required.
extern int tapCounter;  // oops - how does the compiler access this?

(2029) a function pointer cannot be used to hold the address of data (Parser)

A function pointer must only hold the addresses of function, not variables or objects.
int (*fp)(int);
int foobar;
fp = &foobar;  // oops - a variable’s address cannot be assigned

(2030) a data pointer cannot be used to hold the address of a function (Parser)

A data pointer (even a generic void * pointer) cannot be used to hold the address of a function.
void *gp;
int myFunc(int);
gp = foobar;  // oops - a function’s address cannot be assigned

(2033) recursively called function might clobber a static register it has allocated in expression (Code Generator)

The compiler has encountered a situation where a register is used by an expression that is defined in a function that is called recursively and that expression is part of a larger expression that requires this same function to be called. The register might be overwritten and the code may fail.
unsigned long fib_rec(unsigned long n)
{
    // the temporary result of the LHS call to fib_rec() might
    // store the result in a temp that is clobbered during the RHS
    // call to the same function
    return ((n > 1) ? (fib_rec(n-1) + fib_rec(n-2)) : n);
}

(2034) 24-bit floating-point types are not CCI compliant; use 32-bit setting for compliance
 (Parser)

The CCI does not permit the use of 24-bit floating point types. If you require compliance, use the -no-short-float and -no-short-double options, which will ensure the IEEE standard 32-bit floating-point type is used for float and double types.

(2035) use of sizeof() in preprocessor expressions is deprecated; use __SIZEOF_*__ macro to avoid this warning (Preprocessor)

The use of sizeof() in expressions that must be evaluated by the preprocess are no longer supported. Preprocessor macros defined by the compiler, such as __SIZEOF_INT__, can be used instead. This does not affect the C operator sizeof() which can be used in the usual way.
#if (sizeof(int) > 2)   // oops -- use (__SIZEOF_INT__ > 2) instead

(2036) use of @ is not compliant with CCI, use __at() instead (Parser)

The CCI does not permit the definition of absolute functions and objects that use the @ address construct. Instead, place __at(address) after the identifier in the definition.
int foobar @ 0x100;  // oops -- use __at(0x100) instead

(2037) short long integer types are not compliant with CCI (Parser)

The CCI does not permit use of the 3-byte short long type. Instead consider an equivalent long int type.
short long input;  // oops -- consider input to be long when using CCI

(2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning (Parser)

The short long type specifiers has been replaced with the more portable __int24 (replacing short long) and __uint24 (replacing unsigned short long) types.
short long input; // oops -- use __int24 as the type for input

(2039) __int24 integer type is not compliant with CCI (Parser)

The CCI does not permit use of the 3-byte __int24 type. Instead the long int type.
__int24 input;  // oops -- use a long type when using CCI

(2040) __uint24 integer type is not compliant with CCI (Parser)

The CCI does not permit use of the 3-byte __uint24 type. Instead unsigned long int type.
__uint24 input;  // oops -- use an unsigned long type when using CCI

(2041) missing argument after “*” (Driver)

The specified option requires an argument, but none was detected on the command line.
xc8-cc -mcpu=18f4520 -Wl,-Map main.c

Oops, the -Map option requires a map filename, e.g. -Wl,-Map=proj.map.

(2042) no target device specified; use the -mcpu option to specify a target device
 (Driver)

The driver was invoked without selecting what chip to build for. Running the driver with the -mprint-devices option will display a list of all chips that could be selected to build for.
xc8 -cc main.c

Oops, use the -mcpu option to specify the device to build for.

(2043) target device was not recognized (Driver)

The top-level driver was not able to identify the family of device specified with the -mcpu option.
xc8-cc -mcpu=pic io.c

Oops, the device name must be exactly one of those shown by -mprint-devices.

(2044) unrecognized option “*” (Driver)

The option specified was not recognized by the top-level driver. The option in question will be passed further down the compiler tool chain, but this may cause errors or unexpected behavior.

(2045) could not find executable “*” (Driver)

The top-level driver was unable to locate the specified compiler tool in the usual locations. Ensure you have not moved files or directories inside the compiler install directory.

(2046) identifier length must be between * and *; using default length * (Driver)

The number of characters specified as the largest significant identifier length is illegal and the default length of 255 has been used.
-N=16

Oops, the identifier length must be between 32 and 255.

(2047) 24-bit floating point types are not supported when compiling in C99 (Driver)

The float and double types must be 32-bits wide when compiling for the C99 Standard. If you need 24-bit floating-point types, then you might be able to select the C90 compliant libraries (using the -mc90lib option) or you must compile for C90.
xc8-cc -mcpu=18f4520 -fshort-double main.c

Oops, you cannot use 24-bit double types with C99.

(2048) C language extension “*” is not supported and will be ignored (Driver)

The indicated language extension is not supported.
xc8-cc -mcpu=16f1937 -mext=iar main.c

Oops, that language extension is not supported.

(2049) C99 compliant libraries are currently not available for baseline or mid-range devices, or for enhanced mid-range devices using a reentrant stack; using C90 libraries (Driver)

At present, C99-compliant libraries are not available for all devices. The C90-compliant libraries can be used with these device while still building your source code to the C99 standard. Alternatively, you may choose to build to the C90 standard.

(2050) use of the -mcci option is deprecated; use -mext=cci to avoid this warning (Driver)

Always use the -mext=cci option to select the Common C Interface.

(2051) The current license does not permit the selected optimization level* (Driver)

This compiler’s license does not allow the requested compiler operating mode.
xc8-cc -mcpu=18f4520 -Os main.c

Oops, you cannot select level 's' optimizations if this compiler is unlicensed.

(2052) The current license does not permit the selected optimization level and other levels are not permitted by the NOFALLBACK option (Driver)

This compiler’s license does not allow the requested compiler operating mode. Since the --nofallback option is enabled, the compiler has produced this error and will not fall back to a lower optimization level. If you believe that you are entitled to use the requested optimizations, this error might indicate that your compiler is not be activated correctly.

(2053) function “*” is never called (Code Generator)

The specified inline function has never been called and will not generate code. This message differs to (520) in that the function specified is marked as inline. You may choose to disable this message for all inline functions, but allow message (520) to be issued for all other unused functions.

(2054) the language standard “*” is not supported; using C99 (Driver)

The language standard specified by the -std option is not supported by the compiler. The compiler will use the C99 standard instead.
xc8-cc -mcpu=12f510 -std=c11 main.c

Oops, you cannot select the C11 standard.

(2056) use of the -fmode option is deprecated; use -O to control optimizations and avoid this warning (Driver)

The compiler no longer uses both the mode and optimization selection to fully specify which optimizations are performed. All optimizations are now controllable via the optimization level, which is selectable using the compiler’s -O option. Unlicensed compilers, however, cannot use all levels.

(2057) The XC8 compiler installation appears to be corrupted. Please reinstall and try again (Driver)

The compiler has detected that something about the installation is not valid. This is most like due to compiler applications being deleted or moved.

(2058) function "*" cannot be inlined with code coverage enabled (Code Generator)

With the code coverage feature enabled, functions cannot be inlined. This advisary is just reminding you that the indicated function will not be inlined while code coverage is still in effect.

(2059) conflicting * register values found in Start Segment Address record (3) (Hexmate)

Hexmate will pass through any type 3 records in the Hex files being processed, but if there is any conflict in the values specified for the CS or IP registers in these records, it will flag this error.

(2060) CRC polynomial unspecified or set to 0 (Hexmate)

If you are calculating a CRC hash value using Hexmate and the polynomial value is zero, this warning will be triggered to indicate that you will be getting a trivial hash result. Typically this will occur if you have forgotten to set the polynomial value in the checksum option.

(2061) word width required when specifying reserve byte order hash (Hexmate)

If you are calculating a CRC reading data words in the Hex file in reverse order, you must specify a word width in bytes with Hexmate's r suboption to -CK. If you are using the compiler driver, this is specified using the revword suboption to -mchecksum.

(2062) word width must be * when specifying reserve byte order hash (Hexmate)

If you are calculating a CRC reading data words in the Hex file in reverse order, the word width can only be one of the values indicated in the message. This value is specified with Hexmate's r suboption to -CK. If you are using the compiler driver, this is specified using the revword suboption to -mchecksum.

(2063) * address must be a multiple of the word width when performing a reverse byte order hash (Hexmate)

If you are calculating a CRC reading data words in the Hex file in reverse order, the starting and ending addresses must be multiples of the word width specified in Hexmate's -CK option or the compiler's -mchecksum option.

(2064) PIC18 extended instruction cannot be used when the standard instruction set is selected (Assembler)

PIC18 assembly projects must be set up to use one of the standard or extended instructions sets. This message will be displayed if you have used an extended instruction without having enabled the extended instruction set using the -misa option.

(2065) offset out of range (Assembler)

The file register address for this extended PIC18 instruction is out of range.


clrf [200]  ; oops
; for extended instructions, the file operand must be less than, for example, 0x60

(2066) MESSG directive: * (Assembler)

This is the output message of the MESSG assembler directive.

(2067) ERROR directive: * (Assembler)

This is the output of the ERROR assembler directive.

(2068) use of the opt control "*" is deprecated; use the corresponding directive (Assembler)

The assembler controls of the form OPT CONTROL should no longer be used. Equivalent directives are available and can be formed by removing the OPT token from the control. Instead of using OPT TITLE "My great project", for example, use TITLE "My great project".

(2069) use of the radix option of the list control is deprecated; use the radix directive (Assembler)

The LIST assembler control previously allows the input source to be specified using the r LIST option. This should no longer be used. Use the RADIX directive instead. Instead of using OPT LIST r=hex, for example, use RADIX hex.

(2070) device specified by the PROCESSOR directive conflicts with that set by the -mcpu option (Assembler)

The -mcpu driver option sets the target device being built for. The PROCESSOR directive may be used, if required, to ensure that an assembly source file is only ever built for the specified device. If there is a mismatch in the device specified by the option and the directive, this message will be displayed.