2015-09-17 4 views
9

Je suis venu à travers la définition suivante dans un fichier source C intégré:définition étrange en C avec le signe @

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

Je n'ai aucune idée sur la partie @, pouvez-vous s'il vous plaît me aider?

Éditer: Ceci est dans le compilateur IAR, utilisé avec les SoC TI.

+2

Suggérer d'ajouter une balise au compilateur que vous utilisez comme '@' est une extension non standard. – chux

Répondre

9

C'est la manière dont vous pouvez spécifier une adresse mémoire ou une section dans laquelle vous souhaitez placer votre variable.

  • ".preamble" est le nom d'une section,
  • OAD_Preamble est la variable pour y être placé.

Vous pouvez également spécifier l'adresse physique après le signe à @:

const unsigned char port_bit @ 0x1800 = BIT0; 

Plus d'informations sont en this document.

Remarque: il s'agit d'une extension de compilateur non portable ne faisant pas partie de la syntaxe C standard.

+0

Donc, c'est une extension reconnue par certains compilateurs, oui? Pour autant que je sache ou que je puisse déterminer, il n'est pas spécifié par la norme. –

+0

@JohnBollinger Oui, il s'agit d'une extension de compilateur. J'ai vu cette syntaxe dans d'autres compilateurs embarqués, mais je suis assez sûr que ce n'est pas standard. – dasblinkenlight

+1

Définitivement une extension de compilateur. J'utilise le même processeur avec (je suppose) un compilateur différent, et nous utilisons la syntaxe #pragma location = ADDRESS sur la ligne précédente. Je trouve cela plus clair, mais moins compact, et je pense qu'il est plus susceptible d'être portable. –