12.11.1 Accessing EEData via User Managed PSV
The compiler normally manages the PSV window to access constants stored in program memory. If this is not the case, the PSV window can be used to access EEData memory.
To use the PSV window:
- The
psv
page register must be set to the appropriate address for the program memory to be accessed. For EEData this will be 0xFF, but it is best to use the__builtin_psvpage()
function. - In some devices, the PSV window should also be enabled by setting the PSV bit in the CORCON register. If this bit is not set, uses of the PSV window will always read 0x0000.
EEData Access Via PSV
#include <xc.h>
int main(void) {
PSVPAG = __builtin_psvpage(&user_data);
CORCONbits.PSV = 1;
/* ... */
if (user_data[2]) ;/* do something */
}
These steps need only be done once. Unless psv
page is
changed, variables in EEData space may be read by referring to them as normal C
variables, as shown in the example.
Note: This access model is not compatible with the
compiler-managed PSV (
-mconst-in-code
) model. You should be careful to
prevent conflict.