gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:21:52 24 4
gpt4 key购买 nike

我不明白为什么 extern symbol 等于链接器中定义的 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。

为什么?

最佳答案

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

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

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

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

关于c - 外部符号值自动分配到 RAM 的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37224609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com