我不明白为什么extern符号等于链接器中定义的ram的结尾。
特别是,我在下面的rtems代码中看到了这种情况:
extern symbol "rdb_start" definition - start.S - line 155 -157
extern symbol "rdb_start" usage - bspgetworkarea.c - line 23-41
例如,当您在链接器中定义RAM大小0x800000并将输入地址设置为0x40000000时,则rdb_start值会自动对应于0x407FFFF0。如果您定义类似于rdb_start的任何其他符号并将其全局化为rdb_start,则会看到相同的结果。它的值自动分配给407FFFF0。
为什么?
答案 0 :(得分:2)
在尝试让RTEMS在LEON3处理器上运行时,我遇到了类似的问题。
在询问Gaisler(制造LEON3的人)之后,我了解到rdb_start
start代表“远程调试器启动”并且是外部设置的符号。当程序通过远程调试器(即GRMON)直接加载到RAM或通过引导加载程序(即mkprom)从PROM解压缩时,它用于设置堆栈指针。
堆栈指针通常应设置为内存的结尾 - 1个字。例如,具有8 MB RAM的LEON3处理器的存储空间通常在0x40000000-0x407FFFFF之间,堆栈指针设置为0x407FFFF0。
我可以通过将-stack选项传递给mkprom2并使用GRMON中的stack命令来设置新堆栈指针的值来更改rdb_start
的值。
我希望这有助于下一个试图找出RTEMS背景下rdb_start
的人!