Microchip Technology XC8 Standard Compiler (Workstation) SW006021-1 SW006021-1 User Manual

Product codes
SW006021-1
Page of 518
MPLAB
®
 XC8 C Compiler User’s Guide
DS52053A-page 26
 2012 Microchip Technology Inc.
2.5.2.3
MIGRATION TO THE CCI
Avoid making objects and functions absolute if possible.
In XC8, change absolute object definitions such as the following example:
int scanMode @ 0x200;
to:
int scanMode __at(0x200);
In XC16/32, change code such as:
int scanMode __attribute__(address(0x200)));
to:
int scanMode __at(0x200);
2.5.2.4
CAVEATS
If the __at() and __section() specifiers are both applied to an object when using 
XC8, the __section() specifier is currently ignored.
2.5.3
Far Objects and Functions
The __far qualifier may be used to indicate that variables or functions may be located 
in ‘far memory’. Exactly what constitutes far memory is dependent on the target device, 
but it is typically memory that requires more complex code to access. Expressions 
involving far-qualified objects may generate slower and larger code.
Use the native keywords discussed in the Differences section to look up information on 
the semantics of this qualifier.
Some devices may not have such memory implemented, in which case, use of this 
qualifier will be ignored. Stack-based (auto and parameter) variables cannot use the 
__far
 specifier.
2.5.3.1
EXAMPLE
The following shows a variable and function qualified using __far.
__far int serialNo;
__far int ext_getCond(int selector);
2.5.3.2
DIFFERENCES
The 8-bit compilers have used the qualifier far to indicate this meaning. Functions 
could not be qualified as far.
The 16-bit compilers have used the far attribute with both variables and functions.
The 32-bit compilers have used the far attribute with functions, only.