#define _FUID1(x) __attribute__((section("__FUID1.sec"),space(prog))) int _FUID1 = (x);
我试图理解上述定义。_FUID(x) 宏。这与程序存储器有关,并且具有在代码段存储区中定义的段的属性吗?以上试图完成什么?
#define _FUID1(x) __attribute__((section("__FUID1.sec"),space(prog))) int _FUID1 = (x);
我试图理解上述定义。_FUID(x) 宏。这与程序存储器有关,并且具有在代码段存储区中定义的段的属性吗?以上试图完成什么?
宏根本没有做任何有趣或复杂的事情;它只是输出 的声明int _FUID1
,其参数作为初始化程序,并在其前面有一个属性列表。
至于属性列表的含义,请查看GCC 中变量属性的文档。section
将变量放在命名部分中,这允许链接器将其重新定位到特殊地址或对其执行一些其他有趣的事情,并且space
没有记录,但space(prog)
听起来像是将值放入程序地址空间而不是的指令哈佛架构机器上的数据地址空间。
我认为这是特定于硬件的(某些 Microchip 单元),它设置了一个值,例如:
__attribute__((section("__FUID1.sec"),space(prog))) int _FUID1 = (0xf1);
进入单元 id 寄存器 1 ( __FUID1.sec
),在程序 flash 中配置硬件。请参见pic 文档(有关 FUID 的参考)和MPLAB C30 手册(有关存储空间的描述)。