2015-09-17 77 views
9

我已经在嵌入式C源文件中遇到以下定义:奇怪的定义,用@符号

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

我没有关于@部分想法,你能帮我吗?

编辑: 这是IAR编译器,与TI SoC配合使用。

+2

建议在使用“@”的编译器中添加一个标签是非标准扩展。 – chux

回答

9

这是您可以指定内存地址或您想要放置变量的部分的方式。

  • ".preamble"是一个部分的名称,
  • OAD_Preamble要被放置在那里的变量。

您还可以在@标志指定后的物理地址:

const unsigned char port_bit @ 0x1800 = BIT0; 

的更多信息,this document

注:这是一个非可移植的编译器扩展,不是标准C语法的一部分。

+0

所以这是某些编译器认可的扩展,对吗?据我所知或可以确定,它不是由标准规定的。 –

+0

@JohnBollinger是的,这是一个编译器扩展。我在其他嵌入式编译器中看到了这种语法,但我确定它不是标准的。 – dasblinkenlight

+1

绝对是一个编译器扩展。我用同一个处理器(我怀疑)使用了不同的编译器,并且我们在之前的行上使用了#pragma location = ADDRESS语法。我碰巧找到了更清晰但不那么紧凑的,我认为它更可能是便携式的。 –