8.7.2 Optimizations
Using the EDS/PSV address space qualifiers may be expensive. If your
application footprint does not need to access these variables often, then it may be more
efficient to use the const-in-data memory model and manually place the less often
accessed data into a Flash space (using the named address attributes and qualifiers).
This can reduce the overhead by allowing the compiler to not force the EDS access to
return to a single page. This model does not preclude the use of an automatically
managed PSV space; using space(auto_psv)
allows the programmer to
nominate which const
variables go into this area.
By default the compiler will arrange to assert the const-in-code page at
the start of an interrupt service routine. If an ISR does not need to access const data,
then specifying __attribute__((no_auto_psv))
will let the compiler know
that the ISR, or any function it calls, does not use any auto PSV data.
The compiler also has an optimization setting that attempts to reduce
the number of page swaps; not as a cache, but modifications of the DSR/DSW/PSV Page SFR
register. This is a separate switch, -moptimize-page-setting
, which can
be applied at any optimization level. Like many optimizations, it generally reduces the
number page setting operations which may reduce code-size and improve application
performance.