2015-09-17 17 views
9

mam natknąć następującej definicji w osadzonym pliku źródłowego C:Strange definicja w C ze znakiem @

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

nie mam pojęcia o @ części, czy możesz mi pomóc z tym?

Edytuj: To jest w kompilatorze IAR, używane z TI SoCs.

+2

Zalecamy dodanie tagu do kompilatora, którego używasz, ponieważ '@ 'jest rozszerzeniem niestandardowym. – chux

Odpowiedz

9

W ten sposób można określić adres pamięci lub sekcję, w której ma zostać umieszczona zmienna.

  • ".preamble" to nazwa sekcji,
  • OAD_Preamble jest zmienna być tam umieszczone.

Można również podać adres fizyczny po co @ znak:

const unsigned char port_bit @ 0x1800 = BIT0; 

Więcej informacji znajduje się w this document.

Jest to nieprzenośne rozszerzenie kompilatora, nie będące częścią standardowej składni języka C.

+0

To jest rozszerzenie rozpoznawane przez niektóre kompilatory, tak? O ile wiem lub mogę określić, nie jest to określone przez normę. –

+0

@JohnBollinger Tak, jest to rozszerzenie kompilatora. Widziałem tę składnię w innych wbudowanych kompilatorach, ale jestem pewien, że to nie jest standard. – dasblinkenlight

+1

Zdecydowanie rozszerzenie kompilatora. Używam tego samego procesora z (podejrzewam) innym kompilatorem i używamy składni #pragma location = ADDRESS w wierszu wcześniej. Zdaję sobie sprawę, że jest jaśniejszy, choć mniej zwarty i wydaje mi się, że jest bardziej przenośny. –

Powiązane problemy