A list of symbols follows that were undefined at link time. These errors could be due to spelling error, or failure to link an appropriate module.
END
directive. The
runtime startup code defines the entry point, for example:
powerup:
goto start
END powerup ; end of file and define entry point
; other files that use END should not define another entry point
An object file contained a record with an illegal size. This probably means the file is truncated or not an object file. Contact Microchip Technical Support with details.
The object files passed to the linker do not have matching
ident
records. This means they are for different device
types.
The object code version of an object module is higher than the highest version the linker is known to work with. Check that you are using the correct linker. Contact Microchip Technical Support if you have not patched the linker.
An object file did not contain an end record. This probably means the file is corrupted or not an object file. Contact Microchip Technical Support if the object file was generated by the compiler.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
There is an error in the object code format read by the linker. This either means you are using a linker that is out of date, or that there is an internal error in the assembler or linker. Contact Microchip Technical Support with details if the object file was created by the compiler.
The linker was given a -R
or -L
option
with file that contain complex relocation.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
The linker has been asked to perform complex relocation that is not syntactically correct. Probably means an object file is corrupted.
An object file contained a relocation record with an illegal relocation type. This probably means the file is corrupted or not an object file. Contact Microchip Technical Support with details if the object file was created by the compiler.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This function is never called. This cannot represent a problem, but space could be saved by removing it. If you believe this function should be called, check your source code. Some assembler library routines are never called, although they are actually execute. In this case, the routines are linked in a special sequence so that program execution falls through from one routine to the next.
The call graph shows that functions are nested to a depth greater than specified.
This library is badly ordered. It will still link correctly, but it will link faster if better ordered.
The argument to the linker option -w
is out of range.
This option controls two features. For warning levels, the range is -9 to 9. For the
map file width, the range is greater than or equal to 10.
The named list file could not be opened. The linker would be trying to fixup the list file so that it will contain absolute addresses. Ensure that an assembler list file was generated during the compilation stage. Alternatively, remove the assembler list file generation option from the link step.
The limit to the number of address spaces (specified with the
PSECT
assembler directive) is currently 16.
This psect was not specified in a -P
or
-A
option to the linker. It has been linked at the end of the
program, which is probably not where you wanted it.
None of the object files passed to the linker contained a start record.
The start address of the program has been set to zero. This can be harmless, but it
is recommended that you define a start address in your startup module by using the
END
directive.
Improper usage of the command-line tool objtohex
. If
you are not invoking this tool directly, this is an internal compiler error, and you
should contact Microchip Technical Support with details.
See message (491).
The symbol following is undefined at link time. This could be due to spelling error, or failure to link an appropriate module.
A list of symbols follows that were undefined at link time. These errors could be due to spelling error, or failure to link an appropriate module.
The named segments have overlapping code or data. Check the addresses
being assigned by the -P
linker option.
CROMWELL requires that the program memory psect classes be specified to
produce a COFF file. Ensure that you are using the -N
option.
CROMWELL requires that the chip architecture be specified to produce a
COFF file. Ensure that you are using the -P
option.
The chip architecture specified for producing a COFF file isn’t
recognized by
CROMWELL. Ensure that you are using the -P
option,
and that the architecture is correctly specified.
The -I
or -O
option to CROMWELL must
specify a file format.
The input or output format specified to CROMWELL is ambiguous. These
formats are specified with the -i
key and -o
key
options respectively.
cromwell -m -P16F877 main.HEX main.sym -ocot
There is no output file type of cot. Did you mean cof?
The input file to CROMWELL is required to have a Cromwell map file (CMF), COD, Intel HEX, Motorola HEX, COFF, OMF51, ELF, UBROF or HI-TECH format.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
The -p
option to CROMWELL must specify a device
name.
CROMWELL requires that the -N
option be given a list of
the names of psect classes.
To many input files have been specified to be converted by CROMWELL.
To many output file formats have been specified to CROMWELL.
The output format must be specified to CROMWELL.
CROMWELL must have an input file to convert.
The linker option -Cbaseaddr
cannot be used in
conjunction with either the -R
or -L
linker
options.
An error occurred reading the input COD file. Confirm the spelling and path of the file specified on the command line.
The COD file has an invalid format in the specified record.
The COD file has an invalid value in the specified record.
An error occurred writing the indicated section to the given file. Confirm the spelling and path of the file specified on the command line.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
CROMWELL has encountered a symbol class in the symbol table of a COFF, Microchip COFF, or ICOFF file which it cannot identify.
Either the input file to CROMWELL is of an unsupported type or that file cannot be dumped to the screen.
The specified HEX file contains an invalid line. Contact Microchip Technical Support if the HEX file was generated by the compiler.
An error was found at the specified line in the specified Intel HEX file. The HEX file may be corrupt.
This is an internal compiler warning. Contact Microchip Technical Support with details.
The input Microchip COFF file wasn’t produced using CROMWELL.
The optional header in the input Microchip COFF file indicates that the program or data memory spaces are zero bits wide.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
The argument to the -T
option to specify tab size was
not present or correctly formed. The option expects a decimal integer argument.
The argument to the -T
option to specify tab size was
not in the expected range. The option expects a decimal integer argument ranging
from 1 to 64 inclusive.
The indicated option requires a valid file name. Ensure that the filename argument supplied to this option exists and is spelled correctly.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
The 12-bit (Baseline) range of PIC MCU processors do not support interrupts.
interrupt_level
pragma has been used
with the function specified. This pragma can be used more than once on main-line
functions that are called from interrupt functions. For example:
#pragma interrupt_level 0
#pragma interrupt_level 1 /* oops -- which is it to be: 0 or 1? */
void interrupt isr(void)
{
interrupt_level
pragmas use these levels.
#pragma interrupt_level 2 /* oops -- only 0 or 1 */
void interrupt isr(void)
{
/* isr code goes here */
}
The device does not support saving and subsequent restoring of registers during an interrupt service routine.
case
labels with the same value in this
switch
statement, for example:
switch(in) {
case ’0’: /* if this is case ’0’... */
b++;
break;
case ’0’: /* then what is this case? */
b--;
break;
}
This case label is not a value that the controlling expression can yield, thus this label will never be selected.
A case
label in this switch statement has a value which
is not a constant.
__bit
variable cannot be of type auto. If you require
a bit variable with scope local to a block of code or function, qualify it static,
for example:
bit proc(int a)
{
bit bb; /* oops -- this should be: static bit bb; */
bb = (a > 66);
return bb;
}
case
labels in this
switch
statement, for example:
switch(input) {
} /* there is nothing to match the value of input */
enum { ZERO, ONE, BIG=0x99999999 } test_case;
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This error indicates that a C expression is too difficult for the code generator to actually compile. For successful code generation, the code generator must know how to compile an expression and there must be enough resources (i.e., registers or temporary memory locations) available. Simplifying the expression, i.e., using a temporary variable to hold an intermediate result, can often bypass this situation.
This error can also be issued if the code being compiled is unusual.
For example, code which writes to a const
-qualified object is
illegal and will result in warning messages, but the code generator can
unsuccessfully try to produce code to perform the write.
This error can also result from an attempt to redefine a function
that uses the intrinsic
pragma.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
The code generator has been passed a pragma
directive
that it does not understand. This implies that the pragma
you have
used is not implemented for the target device.
The code generator has been passed a -M
option that it
does not understand. This should not happen if it is being invoked by a standard
compiler driver.
The intermediate code file produced by P1 is not the correct version for
use with this code generator. This is either that incompatible versions of one or
more compilers have been installed in the same directory, or a temporary file error
has occurred leading to corruption of a temporary file. Check the setting of the
TEMP
environment variable. If it refers to a long path name,
change it to something shorter. Contact Microchip Technical Support with details if
required.
This is an internal compiler error. Contact Microchip Technical Support with details.
const
do not form
such an expression.
const unsigned char mCount = 5;
int mDeadtimeArr[mCount]; // oops -- the size cannot be a variable
This is an internal compiler error. Contact Microchip Technical Support with details.
This error is unlikely to happen with C code, because C cannot have nested functions! Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal code generator error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
__bit
cannot be initialized, for
example:
__bit b1 = 1; /* oops! b1 must be assigned after its definition */
#pragma psect
directive that has a badly formed string, for example:
#pragma psect text /* redirect text psect into what? */
Possibly, you meant something like:
#pragma psect text=special_text
Too many #pragma psect
directives have been used.
The argument to the stack_size
pragma is malformed.
This pragma must be followed by a number representing the maximum allowed stack
size.
The #pragma
switch directive has been used with an
invalid switch
code generation method. Possible arguments are:
auto
, simple
and direct
.
The compiler detected an error when closing a file. Contact Microchip Technical Support with details.
The code generator has been passed a declaration that results in an array having a zero dimension.
struct {
unsigned flag : 1;
unsigned value : 12; /* oops -- that’s larger than 8 bits wide */
unsigned cont : 6;
} object;
void fn1(void)
{
fn3( 7, fn2(3), fn2(9)); /* Offending call */
}
char fn2(char fred)
{
return fred + fn3(5,1,0);
}
char fn3(char one, char two, char three)
{
return one+two+three;
}
where fn1
is calling fn3
, and two
arguments are evaluated by calling fn2
, which in turn calls
fn3
. The program structure should be modified to prevent this
type of call sequence.
An expression involving a division by zero has been detected in your code.
A static
object has been declared, but has a size of
zero.
This is an internal compiler error. Contact Microchip Technical Support with details.
An object has been qualified as const
, but there is no
initial value supplied at the definition. As this object cannot be written by the C
program, this can imply the initial value was accidentally omitted.
This is an internal compiler error. Contact Microchip Technical Support with details.
int main(void)
{
int a;
if(a) /* oops -- ’a’ has never been assigned a value */
process();
}
This is an internal compiler error. Contact Microchip Technical Support with details.
||
or
&&
is a constant. Check the expression for missing or
badly placed parentheses. This message can also occur if the global optimizer is
enabled and one of the operands is an auto or static local variable whose value has
been tracked by the code generator, for example:
{
int a;
a = 6;
if(a || b) /* a is 6, therefore this is always true */
b++;
signed char c;
c = 0xFF;
As a signed 8-bit quantity, c
can only be assigned
values -128 to 127. The constant is equal to 255 and is outside this range. If you
mean to set all bits in this variable, then use either of:
c = ~0x0;
c = -1;
which sets all the bits in the variable, regardless of variable size and without warning.
This warning can also be triggered by intermediate values overflowing. For example:
unsigned int i; /* assume ints are 16 bits wide */
i = 240 * 137; /* this should be okay, right? */
A quick check with your calculator reveals that 240 * 137 is 32880
which can easily be stored in an unsigned int
, but a warning is
produced. Why? Because 240 and 137 and both signed int
values.
Therefore the result of the multiplication must also be a signed
int
value, but a signed int
cannot hold the value
32880. Both operands are constant values so the code generator can evaluate this
expression at compile time, but it must do so following all the ANSI C rules. The
following code forces the multiplication to be performed with an unsigned result:
i = 240u * 137; /* force at least one operand
to be unsigned */
char a;
int b, c;
a = b + c; /* int to char conversion can result in truncation */
int input;
input <<= 33; /* oops -- that shifts the entire value out */
struct {
unsigned mask : 2; /* mask can hold values 0 to 3 */
} value;
int compare(void)
{
return (value.mask == 6); /* test can
}
a /= 0; /* divide by 0: was this what you were intending */
A conditional branch (generated by an if
,
for
, while
statement etc.) always follows the
same path. This will be some sort of comparison involving a variable and a constant
expression. For the code generator to issue this message, the variable must have
local scope (either auto or static local) and the global optimizer must be enabled,
possibly at higher level than 1, and the warning level threshold can need to be
lower than the default level of 0.
The global optimizer keeps track of the contents of local variables for as long as is possible during a function. For C code that compares these variables to constants, the result of the comparison can be deduced at compile time and the output code hard coded to avoid the comparison, for example:
{
int a, b;
a = 5;
/* this can never be false; always perform the true statement */
if(a == 5)
b = 6;
will produce code that sets a to 5, then immediately sets b to 6.
No code will be produced for the comparison if(a ==
5)
. If a was a global variable, it can be that other functions
(particularly interrupt functions) can modify it and so tracking the variable cannot
be performed.
This warning can indicate more than an optimization made by the compiler. It can indicate an expression with missing or badly placed parentheses, causing the evaluation to yield a value different to what you expected.
This warning can also be issued because you have written something
like while(1)
. To produce an infinite loop, use
for(;;)
.
A similar situation arises with for loops, for example:
{
int a, b;
/* this loop must iterate at least once */
for(a=0; a!=10; a++)
b = func(a);
In this case the code generator can again pick up that a is assigned the value 0, then immediately checked to see if it is equal to 10. Because a is modified during the for loop, the comparison code cannot be removed, but the code generator will adjust the code so that the comparison is not performed on the first pass of the loop; only on the subsequent passes. This cannot reduce code size, but it will speed program execution.
if
or other
conditional construct, where a constant is being assigned to a variable. This can
mean you have inadvertently used an assignment =
instead of a
compare ==
, for example:
int a, b;
/* this can never be false; always perform the true statement */
if(a = 4)
b = 6;
will assign the value 4 to a
, then , as the value
of the assignment is always true, the comparison can be omitted and the assignment
to b always made. Did you mean:
/* this can never be false;
always perform the true statement */
if(a == 4)
b = 6;
which checks to see if a is equal to 4.
int fred;
fred; /* this is valid, but has no effect at all */
Some devices require that special function register need to be read to clear hardware flags. To accommodate this, in some instances the code generator does produce code for a statement which only consists of a variable ID. This can happen for variables which are qualified as volatile. Typically the output code will read the variable, but not do anything with the value read.
int a, b, c;
a = b,c; /* "b" has no effect, was that meant to be a comma? */
The code generator has taken the size of an object and found it to be zero. This almost certainly indicates an error in your declaration of a pointer; i.e., you can have declared a pointer to a zero length array. In general, pointers to arrays are of little use. If you require a pointer to an array of objects of unknown length, you only need a pointer to a single object that can then be indexed or incremented.
struct INPUT {
unsigned a : 3;
unsigned b : 5;
} input_grp;
input_grp.a = 0x12; /* oops -- 0x12 cannot fit into a 3-bit wide object */
?
is
constant, thus the result of the tertiary operator ? :
will always
be the same, for example:
a = 8 ? b : c; /* this is the same as saying a = b; */
unsigned char c;
if(c > 300) /* oops -- how can this be true? */
close();
unsigned char c;
if(c >= 0)
...
will always be true, because an unsigned value can never be less than zero.
char c;
if(c >= -128)
...
will always be true, because an 8 bit signed char has a maximum negative value of -128.
struct INPUT {
unsigned a : 3;
unsigned b : 5;
} input_grp;
input_grp.a |= 0x13; /* oops -- 0x13 to large for 3-bit wide object */
unsigned int a;
if(a == -10) /* if a is unsigned, how can it be -10? */
b = 9;
The assembler has run out of memory.
Macro expansions and include file handling have filled up the assembler’s internal stack. The maximum number of open macros and include files is 30.
Macro expansions in the assembler are nested too deep. The limit is 30 macros and include files nested at one time.
There are too many macro parameters on this macro definition.
The assembler has run out of memory.
The assembler has run out of memory.
There are too many psects defined! Boy, what a program!
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
If Psect A is to be placed “with” Psect B, and Psect B is to be placed
“with” Psect A, there is no hierarchy. The with
flag is an
attribute of a psect and indicates that this psect must be placed in the same memory
page as the specified psect.
Remove a with flag from one of the psect declarations. Such an assembler declaration can look like:
psect my_text,local,class=CODE,with=basecode
which will define a psect called my_text
and place
this in the same page as the psect basecode.
This is an internal compiler error. Contact Microchip Technical Support with details.
There are too many temporary labels in this assembler file. The assembler allows a maximum of 2000 temporary labels.
This is an internal compiler error. Contact Microchip Technical Support with details.
A number contained a character that was not part of the range 0-9 or 0-F.
END-of-FILE was encountered while scanning for an endif
to match a previous if
.
An argument to a macro is not terminated. Note that angle brackets,
< >
, are used to quote macro arguments.
The syntax of a number is invalid. This, for example, can be use of 8 or 9 in an octal number, or other malformed numbers.
The LOCAL
directive is only legal inside macros. It
defines local labels that will be unique for each invocation of the macro.
A symbol defined using the LOCAL
assembler directive in
an assembler macro is syntactically incorrect. Ensure that all symbols and all other
assembler identifiers conform with the assembly language of the target device.
LOCAL
cannot
include any of the formal parameters to an enclosing macro, for example:
mmm MACRO a1
MOVE r0, #a1
LOCAL a1 ; oops -- the parameter cannot be used with LOCAL
ENDM
REPT
directive must be greater than
zero, for example:
REPT -2 ; -2 copies of this code? */
MOVE r0, [r1]++
ENDM
The named symbol is not defined in this module and has not been
specified GLOBAL
.
This is an internal compiler error. Contact Microchip Technical Support with details.
The start address of the program which is specified after the assembler
END
directive must be a label in the current file.
A temporary label has been referenced that is not defined. Note that a temporary label must have a number >= 0.
The assembler failed to write to an object file. This can be an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
An unknown addressing mode was used in the assembly file.
This is an internal compiler error. Contact Microchip Technical Support with details.
The device must be defined either from the command line (e.g.,
-16c84
), via the device assembler directive, or via the
LIST
assembler directive.
The chipinfo file contains non-standard syntax at the specified line.
The chipinfo file has a device section with multiple
ARCH
values. Only one ARCH
value is allowed.
If you have not manually edited the chip info file, contact Microchip Technical
Support with details.
An chip architecture (family) that is unknown was encountered when reading the chip INI file.
The chipinfo file has a device section with multiple
BANKS
values. Only one BANKS
value is allowed.
If you have not manually edited the chip info file, contact Microchip Technical
Support with details.
The chipinfo file has a device section with multiple
ZEROREG
values. Only one ZEROREG
value is
allowed. If you have not manually edited the chip info file, contact Microchip
Technical Support with details.
The chipinfo file has a device section with multiple
SPAREBIT
values. Only one SPAREBIT
value is
allowed. If you have not manually edited the chip info file, contact Microchip
Technical Support with details.
The chipinfo file has a device section with multiple
INTSAVE
values. Only one INTSAVE
value is
allowed. If you have not manually edited the chip info file, contact Microchip
Technical Support with details.
The chipinfo file has a device section with multiple
ROMSIZE
values. Only one ROMSIZE
value is
allowed. If you have not manually edited the chip info file, contact Microchip
Technical Support with details.
The chipinfo file has a device section with multiple
START
values. Only one START
value is allowed.
If you have not manually edited the chip info file, contact Microchip Technical
Support with details.
The chipinfo file has a device section with multiple
LIB
values. Only one LIB
value is allowed. If
you have not manually edited the chip info file, contact Microchip Technical Support
with details.
The chipinfo file contains a device section with too many
RAMBANK
fields. Reduce the number of values.
The second HEX number specified in the RAM
field in the
chipinfo file must be greater in value than the first.
There are too many lines specifying common (access bank) memory in the chip configuration file.
The second HEX number specified in the COMMON
field in
the chipinfo file must be greater in value than the first. Contact Microchip
Technical Support if you have not modified the chipinfo INI file.
The chipinfo file contains a device section with an unrecognized line. Contact Microchip Technical Support if the INI has not been edited.
The chipinfo file has a device section without an ARCH
values. The architecture of the device must be specified. Contact Microchip
Technical Support if the chipinfo file has not been modified.
The chipinfo file contains no data. If you have not manually edited the chip info file, contact Microchip Technical Support with details.
The chipinfo file contains no valid device descriptions.
LIST C=10 ; the page width will need to be wider than this
The form length specified using the -F
length option
must be at least 15 lines. Setting this length to zero is allowed and turns off
paging altogether. The default value is zero (pageless).
The assembler has been invoked without any file arguments. It cannot assemble anything.
The complex relocation in this expression is too big to be inserted into the object file.
The assembler has calculated a different value for a symbol on two different passes. This is commonly due to the redefinition of a psect with conflicting delta values.
The absolute address specified with the
movfp
/movpf
instruction is too large.
A bit number must be an absolute expression in the range 0-7.
EQU
or SET
symbol has been found
with the same name as a macro. This is not allowed. For example:
getval MACRO
MOV r0, r1
ENDM
getval EQU 55h ; oops -- choose a different name to the macro
An unrecognized character or token has been seen in the input.
_next:
MOVE r0, #55
MOVE [r1], r0
_next: ; oops -- choose a different name
The linker will issue this warning if the symbol (C or assembler) was defined multiple times in different modules. The names of the modules are given in the error message. Note that C identifiers often have an underscore prepended to their name after compilation.
It is not possible to add together two relocatable quantities. A constant can be added to a relocatable value and two relocatable addresses in the same psect can be subtracted. An absolute value must be used in various places where the assembler must know a value at assembly time.
The operand to this opcode is invalid. Check your assembler reference manual for the proper form of operands for this instruction.
The definition for an assembly label and an EXTRN
declaration for the same symbol, appear in the same module. Use
GLOBAL
instead of EXTRN
if you want this
symbol to be accessible from other modules.
The instruction is not supported by this device.
The PAGESEL
pseudo-instruction is not usable with the
device selected.
The destination (either ,f
or ,w
) is
not correct for this instruction.
The radix specified using the RADIX
assembler directive
must be in the range from 2 (binary) to 16 (hexadecimal).
The assembler FNSIZE
assembler directive arguments must
be positive constants.
ORG
assembler directive must be a
positive constant or a symbol which has been equated to a positive constant, for
example:
ORG -10 /* this must a positive offset to the current psect */
The ALIGN
assembler directive requires a non-zero
positive integer argument.
local
psect cannot have the same name as a
global
psect, for example:
psect text,class=CODE ; the text psect is implicitly global
MOVE r0, r1
; elsewhere:
psect text,local,class=CODE
MOVE r2, r4
The global
flag is the default for a psect if its
scope is not explicitly stated.
LIST
assembler control’s
C=
option (which sets the column width of the listing output)
must be a positive decimal constant number, for example:
LIST C=a0h ; constant must be decimal and positive,
try: LIST C=80
The page width suboption to the LIST
assembler
directive must specify a width of at least 49.
LIST
assembler control’s
N
option (which sets the page length for the listing output)
must be a positive constant number, for example:
LIST N=-3 ; page length must be positive
A symbol has been declared as EXTRN
but is also defined
in the current module.
If the symbol is declared as extern
, it is to be
imported. If it is declared as public
, it is to be exported from
the current module. It is not possible for a symbol to be both.
PSECT
assembler directive’s
size
flag must be a positive constant number, for example:
PSECT text,class=CODE,size=-200 ; a negative size?
size
flag to the PSECT
assembler
directive is different from a previous PSECT
directive, for
example:
psect spdata,class=RAM,size=400
; elsewhere:
psect spdata,class=RAM,size=500
PSECT
assembler directive’s
reloc
flag must be a positive constant number, for example:
psect test,class=CODE,reloc=-4 ; the reloc must be positive
reloc
flag to the PSECT
assembler
directive is different from a previous PSECT
directive, for
example:
psect spdata,class=RAM,reloc=4
; elsewhere:
psect spdata,class=RAM,reloc=8
PSECT
assembler directive’s
DELTA
flag must be a positive constant number, for example:
PSECT text,class=CODE,delta=-2 ; negative delta value doesn’t make sense
The DELTA
option of a psect has been redefined more than
once in the same module.
The parameter to the PSECT
assembler directive’s
PAD
flag must be a non-zero positive integer.
PSECT
assembler directive’s
space
flag must be a positive constant number, for example:
PSECT text,class=CODE,space=-1 ; space values start at zero
space
flag to the PSECT
assembler
directive is different from a previous PSECT
directive, for
example:
psect spdata,class=RAM,space=0
; elsewhere:
psect spdata,class=RAM,space=1
psect text,class=CODE
Look for other psect definitions that specify a different class name.
psect bss,with=data
; elsewhere
psect bss,with=lktab ; oops -- bss is to be linked with two psects
MOV r0, #’12’ ; ’12’ specifies two characters
A syntax error has been detected. This could be caused a number of things.
This is an internal compiler error. Contact Microchip Technical Support with details.
The indicated assembly file has been supplied to the driver in
conjunction with the -S
option. The driver really has nothing to do
because the file is already an assembly file.
Improper command-line usage of the of the compiler’s driver.
The compiler has been successfully setup using the
--setup
driver option.
The compiler was not successfully setup using the
--setup
driver option. Ensure that the directory argument to
this option is spelled correctly, is syntactically correct for your host operating
system and it exists.
--setup
driver option because the driver was unable to access
the XML configuration file. Ensure that you have write permission to this file. The
driver will search the following configuration files in order: If none of the files can be located, then the above error will occur.
The demo period for this compiler has concluded.
The evaluation period of this demo installation of the compiler has expired. You will need to purchase the compiler to re-activate it. If you sincerely believe the evaluation period has ended prematurely, contact Microchip technical support.
The driver was unable to open the indicated file. The psect usage map
file is generated by the driver when the driver option
--summary=file
is used. Ensure that the file is not open
in another application.
The driver was unable to open the indicated file. The memory usage map
file is generated by the driver when the driver option
--summary=file
is used. Ensure that the file is not open
in another application.
The driver was unable to open the indicated file. The HEX usage map file
is generated by the driver when the driver option
--summary=file
is used. Ensure that the file is not open
in another application.
The extension of the indicated input file could not be determined. Only files with the extensions .as, .c, .obj, .usb, .p1, .lib or .hex are identified by the driver.
The usage of the driver options --getoption
and
--setoption
is mutually exclusive.
No on-chip or external memory ranges have been specified for the data space memory for the device specified.
No on-chip or external memory ranges have been specified for the program space memory for the device specified.
An option file specified by a --getoption
or
--setoption
driver option could not be opened. If you are using
the --setoption
option, ensure that the name of the file is spelled
correctly and that it exists. If you are using the --getoption
option ensure that this file can be created at the given location or that it is not
in use by any other application.
The subcomponent listed failed to execute. Does the file exist? Try re-installing the compiler.
The driver was invoked without selecting what chip to build for. Running
the driver with the –CHIPINFO
option will display a list of all
chips that could be selected to build for.
The usage of this option was incorrect. Confirm correct usage with
--help
or refer to the part of the manual that discusses this
option.
The application given to this option is not understood or does not belong to the compiler.
A parameter to this memory option was a string but did not match any valid tags. Refer to the section of this manual that describes this option to see what tags (if any) are valid for this device.
One of the subcomponents being executed encountered a problem and returned an error code. Other messages should have been reported by the subcomponent to explain the problem that was encountered.
Using this option will invalidate some of the qualifiers used in the standard header files, resulting in errors. This issue and its solution are detailed in the section of this manual that specifically discusses this option.
The code generator could not allocate any more memory.
This is an internal compiler error. Contact Microchip Technical Support with details.
This is an internal compiler error. Contact Microchip Technical Support with details.
The specified parameter in the chip configuration file is illegal.
The chip configuration file was able to be opened but it was empty. Try re-installing the compiler.
The chip selected does not appear in the compiler’s chip configuration file. Contact Microchip to see whether support for this device is available or it is necessary to upgrade the version of your compiler.
This option can take suboptions, but this suboption is not understood.
This can just be a simple spelling error. If not,--help
to look up
what suboptions are permitted here.
This option expects more data but none was given. Check the usage of this option.
This option does not accept additional data, yet additional data was given. Check the usage of this option.
This option can only appear once, but appeared more than once.
The indicated option was expecting a valid hexadecimal integer argument.
This option was expecting a parameter in a range format
(start_of_range-end_of_range
), but the
parameter did not conform to this syntax.
The parameters to this option were not specified correctly. Run the
driver with --help
or refer to the driver’s chapter in this manual
to verify the correct usage of this option.
Command file to this application, expected to be found after
’@
’ or ’<
’ on the command line was not
found.
The driver has been invoked with no input files listed on its command line. If you are getting this message while building through a third party IDE, perhaps the IDE could not verify the source files to compile or object files to link and withheld them from the command line.
Presenting the result of the requested calculation.
An option to Hexmate was incorrectly used or incomplete. Follow the usage supplied by the message and ensure that the option has been formed correctly and completely.
File contains a character that was not valid for this type of file, the
file can be corrupt. For example, an Intel HEX file is expected to contain only
ASCII representations of hexadecimal digits, colons (:
) and line
formatting. The presence of any other characters will result in this error.
Sources to Hexmate request differing data to be stored to the same
address. To force one data source to override the other, use the
‘+
’ specifier. If the two named sources of conflict are the same
source, then the source can contain an error.
The range for this calculation contained a value that could not be resolved. This can happen if the result was to be stored within the address range of the calculation.
The requested byte size is illegal. Checksum results must be within 1 to
4 bytes wide. Check the parameters to the -CKSUM
option.
The -CKSUM
option has been given a range where the
start is greater than the end. The parameters can be incomplete or entered in the
wrong order.
The -FILL
option has been given a range where the start
is greater than the end. The parameters can be incomplete or entered in the wrong
order.
Invalid sub-option passed to -HELP
. Check the spelling
of the sub-option or use -HELP
with no sub-option to list all
options.
The serial number being stored was out of range. Ensure that the serial number can be stored in the number of bytes permissible by this option.
Too many file arguments have been used. Try merging these files in several stages rather than in one command.
Intel HEX file contained an invalid record type. Consult the Intel HEX format specification for valid record types.
Sources to Hexmate force differing data to be stored
to the same address. More than one source using the ‘+
’ specifier
store data at the same address. The actual data stored there cannot be what you
expect.
The hash (checksum) range had gaps in data content. The runtime hash calculated is likely to differ from the compile-time hash due to gaps/unused byes within the address range that the hash is calculated over. Filling unused locations with a known value will correct this.
The hexadecimal code given to the -FILL
option contained
an incomplete byte. The incomplete byte (nibble) will be disregarded.
This option currently is not available and will be ignored.
Intel HEX file did not contain a record of type END
. The
HEX file can be incomplete.
The indicated static
function was never called in the
module being compiled. Being static
, the function cannot be called
from other modules so this warning implies the function is never used. Either the
function is redundant, or the code that was meant to call it was excluded from
compilation or misspelled the name of the function.
A string constant appears not to have a closing quote.
The format specifier for the printf()
style function is
malformed.
The printf()
style format specifier has an illegal
character.
Type modifiers cannot be used with this format.
Only modifiers h
(short
) and
l
(long
) are legal with this printf format
specifier.
The only modifier that is legal with this format is l
(for long
).
This type modifier has already be specified in this type.
The format specifier or modifier in the printf-style string is illegal for this particular format.
A field width cannot appear at this point in a printf()
type format specifier.
struct
or
union
keyword is already the tag for an enumerated type, and
thus should only follow the keyword enum
, for example:
enum IN {ONE=1, TWO};
struct IN { /* oops -- IN is already defined */
int a, b;
};
union
or
enum
keyword is already the tag for a structure and should only
follow the keyword struct
, for example:
struct IN {
int a, b;
};
enum IN {ONE=1, TWO}; /* oops -- IN is already defined */
struct
or
enum
keyword is already the tag for a union
and should only follow the keyword union
, for example:
union IN {
int a, b;
};
enum IN {ONE=1, TWO}; /* oops -- IN is already defined */
struct DATA data;
data->a = 9; /* data is a structure, not a pointer to a structure */
This is an internal compiler error. Contact Microchip Technical Support with details.
A variable previously declared as being static
, has
now be redeclared as extern
.
int a;
char a; /* oops -- what is the correct type? */
This function or variable has different qualifiers in different declarations.
A member of an enumeration is defined twice or more with differing values. Does the member appear twice in the same list or does the name of the member appear in more than one enum list?
The data types of the parameters passed to this function do not match its prototype.
The number of arguments in this function declaration does not agree with a previous declaration of the same function.
This module has code below the address given, but the -C
option has been used to specify that a binary output file is to be created that is
mapped to this address. This would mean code from this module would have to be
placed before the beginning of the file! Check for missing psect
directives in assembler files.
#if
expression has a zero
divisor. The result has been assumed to be zero, for example:
#define ZERO 0
#if FOO%ZERO /* this will have an assumed result of 0 */
#define INTERESTING
#endif
enum
declaration, values can be assigned to the
members, but the expression must evaluate to a constant of type
int
, for example:
enum {one = 1, two, about_three = 3.12};
/* no non-int values allowed */
This is an internal compiler error. Contact Microchip Technical Support with details.
The compiler is operating in demo mode. Some command-line options are disabled.
The compiler is operating in demo mode. Some command-line options are disabled, the compilation speed will be slower.
The compiler is operating in demo mode. Some command-line options are disabled; the compilation speed will be slower, and the maximum allowed code size is limited to 16 KB.