c-自动分配给RAM末尾的外部符号值



我不明白为什么extern符号等于链接器中定义的ram的末尾。

特别是,我在下面的rtems代码中看到了这种情况:

extern符号"rdb_start"定义-start。S线155-157

外部符号"rdb_start"用法-bspgetworkarea.c-第23-41行

例如,当您在链接器中定义RAM大小0x800000并将条目地址设为0x40000000时,rdb_start值将自动对应于0x407FFFF0。如果定义任何其他类似于rdb_start的符号,并将其全局化为rdb_start,则会看到相同的结果。它的值被自动分配给407FFFF0。

为什么?

我在尝试让RTEMS在LEON3处理器上运行时遇到了类似的问题。在询问Gaisler(LEON3的制造者)后,我了解到rdb_start start代表"远程调试器启动",是一个外部设置的符号。当程序通过远程调试器(即GRMON)直接加载到RAM或通过引导程序(即mkprom)从PROM解包时,它用于设置堆栈指针。

堆栈指针通常应该设置到内存的末尾-1个字。例如,具有8MB RAM的LEON3处理器的内存空间通常在0x40000000-0x407FFFFF之间,堆栈指针设置为0x407FFFF0。

通过将-stack选项传递给mkprom2,并使用GRMON中的stack命令设置新堆栈指针的值,我可以更改rdb_start的值。

我希望这能帮助下一个试图弄清楚RTEMS上下文中rdb_start是什么的人!

最新更新