链接器脚本,init C变量

时间:2013-10-09 09:41:30

标签: c gcc assembly linker-scripts

我试着找回答很长时间。对不起,我真的找不到它。

我使用gcc,ld,gcc(用于汇编编译)。

我写了ld脚本:

SECTIONS
{
  .text : *{.text}
}
LS_size = (SIZEOF(.text) + 2048 ) & ( 0xF800 ) >> 9 ;

我尝试使用汇编程序中的LS_size:

_rom_size:
.byte LS_size

它的工作正常,但在C代码中我无法将值设置为变量:

struct my_struct vari = {
  .codesize = LS_size,
}

如果我extern LS_size,我得到了:

error: initializer element is not constant

如何从变量中为常量C变量设置默认值,这些变量是在ld脚本中生成的?

2 个答案:

答案 0 :(得分:1)

用C写:

struct my_st { 
    long the_code_sz;
};

struct my_st vv = {
  .the_code_sz = ((long)(&LS_size))
};

然后你可以使用

vv.the_code_sz

LS_size是一个符号,该符号的地址是您在链接描述文件中给出的值。

答案 1 :(得分:0)

还要记住,linkerskript变量不是数据类型。它们代表地址 - 存储的内容完全是任意的

它的基本功能是你在C中使用& VariableName。