12.4 Using More than 32K of Constants [DD]

By default, the compiler collects const-qualified variables and string literals into a compiler managed section named .const. This section is allocated in program memory. On dsPIC33C/E/F architectures this section is mapped into data memory by means of the Program Space Visibility (PSV) window, or the Extended Data Space (EDS) window. Variables may be explicitly assigned to this section with the space(auto_psv) attribute. On dsPIC33A devices, a section name based on the source file name would be used, with no implied limit on constant sizes.

Because .const is a PSV-type section, it is limited to 32K of total constants. To use more constants, variables may be assigned to other sections with the space(psv) attribute. This attribute causes the variable to be allocated in a program memory section that is designated for use with the PSV or EDS window.

For example:

const int __attribute__((space(psv))) table1[] =
   { 1, 2, 3, /* and so on */ };

space(psv) specifies the allocation of the variable, but it does not describe how the variable will be accessed. In order to access variables in space(psv), the PSV or EDS page register must be managed so that the correct range of program memory is visible. Two options for managing the page register are available: compiler-managed access, or user-managed access.