12.3.1.2 Const-qualified Variables in Secure Flash

const-qualified variables with initializers can be supported in secure Flash segments using PSV constant sections managed by the compiler. For example:

const int __attribute__((boot)) time_delay = 55;

If the const qualifier was omitted from the definition of time_delay, this statement would be rejected with an error message. (Initialized variables in secure RAM are not supported).

Since the const qualifier has been specified, variable time_delay can be allocated in a PSV constant section that is owned by the boot segment. It is also possible to specify the PSV constant section explicitly with the space(auto_psv) attribute:

int __attribute__((boot,space(auto_psv))) bebop = 20;

Pointer variables initialized with string literals require special processing. For example:

char * const foo __attribute__((boot)) = "eek";

The compiler will recognize that string literal "eek" must be allocated in the same PSV constant section as pointer variable foo.

Regardless of whether you have selected the constants-in-code or constants-in-data memory model, the compiler will create and manage PSV constant sections as needed for secure segments. Support for user-managed PSV sections is maintained through an object compatibility model explained below.

Upon entrance to a boot or secure function, PSVPAG will be set to the correct value. This value will be restored after any external function call.