在我的项目中,我定义了:(这不是真正的代码 - 用于抽象目的)
typedef struct {
...
} my_struct;
在某些C文件中我声明:
my_struct my_struct_inst;
在其他2个C文件中,我通过声明来使用该结构:
extern my_struct my_struct_inst;
并使用它的内容。
我使用RVCT2.2将该代码编译到ARM并尝试查找该结构的地址:
1)何时将内存分配给my_struct_inst?在编译时间?在运行时间?
2)在反汇编中我可以看到.FLASH_RAM
部分(可能是这种数据所属的部分),有一些参考如下:
my_struct_inst%0x190
我用IDA得到了它。这是什么意思? (结构实例将从.FLASH_RAM
部分的开头偏移0x190开始?)
3)当我写my_struct_inst.some_member
时,我是如何准确地访问实际地址(结构实际位于内存中的位置)(我应该阅读一些ABI文档吗?)
答案 0 :(得分:2)
您的结构的内存将在编译时分配。
地址将由链接描述文件定义。要查看结构的地址(假设它是一个全局变量),您将需要生成的ELF文件(对于此示例,我们将其称为a.elf)。然后运行:
arm-eabi-objdump -t a.elf | grep my_struct_inst
Objdump“-t”将列出所有全局符号及其地址及其所属的部分。您可以用任何交叉编译的objdump替换“objdump”。