C中复杂定义的一个例子

时间:2013-06-24 00:31:52

标签: c

#define _FUID1(x) __attribute__((section("__FUID1.sec"),space(prog))) int _FUID1 = (x);

我试图理解上面的定义。 _FUID(x)宏。这涉及程序存储器,并且具有在代码段存储区中定义的段的属性? 以上是什么尝试完成的?

2 个答案:

答案 0 :(得分:4)

宏根本没有做任何有趣或复杂的事情;它只输出int _FUID1的声明,其参数作为初始值,并且前面有一个属性列表。

至于属性列表的含义,请查看the documentation for variable attributes in GCCsection将变量放在一个命名部分中,该部分允许链接器将其重定位到特殊地址或对其执行一些其他有趣的操作,space未记录,但space(prog)听起来像是一个将值放入程序地址空间而不是哈佛架构机器上的数据地址空间的指令。

答案 1 :(得分:2)

我认为这是特定于硬件的(一些Microchip单元),它会放置一个值,例如:

 __attribute__((section("__FUID1.sec"),space(prog))) int _FUID1 = (0xf1);

进入单元id寄存器1(__FUID1.sec),在程序闪存中配置硬件。请参阅pic documentation(有关FUID的参考)和MPLAB C30 manual(有关存储空间的说明)。