C中带有@符号的奇怪定义

dou*_*leE 9 c embedded iar

我在嵌入式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
};
Run Code Online (Sandbox Code Playgroud)

我不知道@部分,你能帮我解决这个问题吗?

编辑:这是在IAR编译器中,与TI SoC一起使用.

das*_*ght 9

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

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

您还可以在at @符号后指定物理地址:

const unsigned char port_bit @ 0x1800 = BIT0;
Run Code Online (Sandbox Code Playgroud)

更多信息在本文档中.

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

  • @ErikJohnson:虽然`#pragma`是标准编译器指令,但编译指示本身是编译器特定的.只有在需要忽略编译器无法识别的指令的情况下,它们才是可移植的.因此代码将在另一个编译器上编译,但可能无法根据需要定位数据.将信息传递给链接器的指令始终是特定于工具链的. (2认同)