07.04.2013 Views

MPLAB C Compiler for PIC24 MCUs and dsPIC DSCs ... - Microchip

MPLAB C Compiler for PIC24 MCUs and dsPIC DSCs ... - Microchip

MPLAB C Compiler for PIC24 MCUs and dsPIC DSCs ... - Microchip

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

16-Bit C <strong>Compiler</strong> User’s Guide<br />

The reverse attribute conflicts with the aligned <strong>and</strong> section attributes. An attempt<br />

to name a section <strong>for</strong> a reverse-aligned variable will be ignored with a warning. It is an<br />

error condition to specify both reverse <strong>and</strong> aligned <strong>for</strong> the same variable. A variable<br />

with the reverse attribute cannot be placed into the auto_psv space (see the<br />

space() attribute or the -mconst-in-code option); attempts to do so will cause a<br />

warning <strong>and</strong> the compiler will place the variable into the PSV space.<br />

section ("section-name")<br />

By default, the compiler places the objects it generates in sections such as .data <strong>and</strong><br />

.bss. The section attribute allows you to override this behavior by specifying that a<br />

variable (or function) lives in a particular section.<br />

struct array {int i[32];}<br />

struct array buf __attribute__ ((section("userdata"))) = {0};<br />

The section attribute conflicts with the address <strong>and</strong> reverse attributes. In both<br />

cases, the section name will be ignored with a warning. This attribute may also conflict<br />

with the space attribute. See the space attribute description <strong>for</strong> more in<strong>for</strong>mation.<br />

secure<br />

This attribute can be used to define protected variables in Secure Segment (SS) RAM:<br />

int __attribute__((secure)) secure_dat[16];<br />

Variables defined in SS RAM will not be initialized on startup. There<strong>for</strong>e all variables in<br />

SS RAM must be initialized using inline code. A diagnostic will be reported if initial<br />

values are specified on a secure variable.<br />

String literals can be assigned to secure variables using inline code, but they require<br />

extra processing by the compiler. For example:<br />

char *msg __attribute__((secure)) = "Hello!\n"; /* not supported */<br />

char *msg2 __attribute__((secure));<br />

void __attribute__((secure)) foo2()<br />

{<br />

*msg2 = "Goodbye..\n"; /* value assigned explicitly */<br />

}<br />

In this case, storage must be allocated <strong>for</strong> the string literal in a memory space which is<br />

accessible to the enclosing secure function. The compiler will allocate the string in a<br />

psv constant section designated <strong>for</strong> the secure segment.<br />

sfr (address)<br />

The sfr attribute tells the compiler that the variable is an SFR <strong>and</strong> also specifies the<br />

run-time address of the variable, using the address parameter.<br />

extern volatile int __attribute__ ((sfr(0x200)))u1mod;<br />

The use of the extern specifier is required in order to not produce an error.<br />

Note: By convention, the sfr attribute is used only in processor header files. To<br />

define a general user variable at a specific address use the address<br />

attribute in conjunction with near or far to specify the correct addressing<br />

mode.<br />

DS51284H-page 16 © 2008 <strong>Microchip</strong> Technology Inc.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!