2015-09-17 6 views
9

ich auf folgende Definition in einer eingebetteten C-Quelldatei gekommen bin:merkwürdige Definition in C mit @ -Zeichen

const preamble_t OAD_Preamble @ ".preamble" = 
{ 
    HAL_OAD_RC_MAX,  // Default program length of max if not using post-processing tool. 
    OAD_MANUFACTURER_ID, // Manufacturer ID 
    OAD_TYPE_ID,   // Image Type 
    0x00000001   // Image Version 
}; 

Ich habe keine Ahnung von dem @ Teil, können Sie mir bitte dabei helfen?

Edit: Dies ist in IAR-Compiler, mit TI SoCs verwendet.

+2

Das Hinzufügen eines Tags zu dem von Ihnen verwendeten Compiler als '@' ist eine nicht standardmäßige Erweiterung. – chux

Antwort

9

Auf diese Weise können Sie eine Speicheradresse oder einen Bereich angeben, in dem Sie Ihre Variable platzieren möchten.

  • ".preamble" ist der Name eines Abschnitts,
  • OAD_Preamble die Variable ist dort platziert werden.

können Sie nach der physikalischen Adresse an @ Zeichen geben auch:

const unsigned char port_bit @ 0x1800 = BIT0; 

Weitere Informationen in this document ist.

Hinweis: Dies ist eine nicht-portable Compiler-Erweiterung, nicht ein Teil der Standard-C-Syntax.

+0

Das ist also eine Erweiterung, die von bestimmten Compilern erkannt wird, ja? Soweit ich weiß oder bestimmen kann, ist es im Standard nicht spezifiziert. –

+0

@JohnBollinger Ja, das ist eine Compiler-Erweiterung. Ich habe diese Syntax in anderen eingebetteten Compilern gesehen, aber ich bin mir ziemlich sicher, dass es kein Standard ist. – dasblinkenlight

+1

Definitiv eine Compiler-Erweiterung. Ich benutze den gleichen Prozessor mit (ich nehme an) einen anderen Compiler, und wir verwenden die Syntax #pragma location = ADDRESS in der Zeile davor. Ich finde das klarer, wenn auch weniger kompakt, und ich denke, es ist eher tragbar. –