大家好,我正在读一个C源代码,我发现了一个这样的符号:
__no_init __root extern volatile unsigned char var[10] @ 0x4000000;但是我不知道__no_init __root是什么意思,它是标准C语言吗?
谢谢。
发布于 2011-12-21 01:43:53
这些是一些针对嵌入式系统的编译器(例如IAR的AVR compiler)中使用的C语言扩展。
__no_init意味着编译器不应该初始化变量,当变量被放在硬件寄存器位置,并且您不希望程序启动时将寄存器设置为0时,将使用该变量。
__root用于告诉编译器/链接器,变量或函数应该保留在二进制映像中,即使它实际上并不在程序中使用。这可能有助于调试目的,并在开发过程中调整程序的大小。
发布于 2011-12-21 01:39:55
这些宏可能是在您的编译器工具链中定义的。根据我的经验,__no_init通常意味着告诉链接器此变量的内存不应由crt0启动代码初始化,该启动代码通常在调用main之前将零写入全局变量。__root通常意味着链接器不应该丢弃变量,即使它认为没有代码正在使用它。
https://stackoverflow.com/questions/8579403
复制相似问题