2015-09-17 37 views
9

ho incontrato seguente definizione in un file sorgente C incorporato:Strano definizione in C con @ segno

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 
}; 

Non ho idea circa la parte @, potete per favore aiutarmi con questo?

Modifica: Questo è nel compilatore IAR, utilizzato con SoC TI.

+2

Suggerisci di aggiungere un tag al compilatore che stai usando come '@' è un'estensione non standard. – chux

risposta

9

Questo è il modo in cui è possibile specificare un indirizzo di memoria o una sezione in cui si desidera posizionare la variabile.

  • ".preamble" è il nome di una sezione,
  • OAD_Preamble è la variabile da posizionare lì.

è anche possibile specificare l'indirizzo fisico dopo l'a @ segno:

const unsigned char port_bit @ 0x1800 = BIT0; 

Ulteriori informazioni sono in this document.

Nota: questa è un'estensione del compilatore non portatile, non una parte della sintassi C standard.

+0

Quindi questa è un'estensione riconosciuta da alcuni compilatori, sì? Per quanto ne so o posso determinare, non è specificato dallo standard. –

+0

@JohnBollinger Sì, questa è un'estensione del compilatore. Ho visto questa sintassi in altri compilatori incorporati, ma sono abbastanza sicuro che non sia standard. – dasblinkenlight

+1

Definitivamente un'estensione del compilatore. Io uso lo stesso processore con (ho il sospetto) un compilatore diverso, e usiamo la sintassi #pragma location = ADDRESS sulla riga precedente. Mi sembra che sia più chiaro, anche se meno compatto, e penso che sia più probabile che sia portatile. –