9.2.2 Static Variables
All static variables have permanent storage duration,
even those defined inside a function which are “local static” variables. Local
static variables only have scope in the function or block in which they
are defined, but unlike auto variables, their memory is reserved for the
entire duration of the program. Thus, they are allocated memory like other
non-auto variables. Static variables may be accessed by other functions
via pointers, since they have permanent duration.
Variables which are static are guaranteed to retain their
value between calls to a function, unless explicitly modified via a pointer.
Variables which are static and initialized have their
initial value assigned only once during the program's execution. Thus, they may be
preferable over initialized auto objects which are assigned a value every
time the block they are defined in begins execution. Any initialized static variables are
initialized in the same way as other non-auto initialized objects by the
runtime start-up code, see 5.4.2 Peripheral Library Functions. Static variables are located in the same sections as their
non-static counterparts.
