1

RAM_HIGH_ADRS 是在 config.h 和 makefile 中定义的参数。据我了解,它定义了程序的数据+文本+bss段将写入RAM的地址。

这意味着,例如,如果 cpu 有 64 Mb 的 RAM,并且 RAM_HIGH_ADRS 等于 0x00A00000 (10 Mb),则整个程序有 54 Mb 可用于存储 text+data+bss+heap+stack。

我对此提出质疑的原因是我正在开展一个项目,在该项目中我大幅扩展了数据段,导致 cpu 无法启动。然后我增加了 RAM_HIGH_ADRS,此时允许 cpu 启动。这让我感到困惑,因为据我所知,在 RAM_LOW_ADRS 和 RAM_HIGH_ADRS 之间写入的唯一内容是 VxWorks 映像,因此增加 RAM_HIGH_ADRS 只会降低数据段的可用大小。

4

2 回答 2

2

如果您使用 Vxworks bootrom 来引导板,那么它是如何工作的。

Bootrom 被放置在 RAM_HIGH_ADRS。Bootrom 然后从网络加载 VxWorks 内核映像(或基于您获取 vxWorks 内核映像的任何其他地方),并将其放置在从 RAM_LOW_ADRS 开始的 RAM 中。

首先它放置 .text 段,然后放置 .rodata、.data 和 .bss。因此 RAM_LOW_ADRS 和 RAM_HIGH_ADRS 之间有足够的空间可以容纳 .text+.rodata_.data+.bss。如果空间不够,那么用户将看到您所看到的症状。在这种情况下,将 RAM_HIGH_ADRS 设置为更高的值,以便 .text+.rodata_.data+.bss 可以介于 RAM_LOW_ADRS 和 RAM_HIGH_ADRS 之间。

于 2016-01-24T04:26:15.753 回答
0

来自vxworks-bsps-6.7.pdf第 6 页:

高位 RAM 地址。当使用 bootrom 时,引导加载程序将小型 VxWorks 内核(bootrom)放在高 RAM 中。RAM_LOW_ADRS..RAM_HIGH_ADRS 被 bootrom 内核用来存储启动前从网络获取的 VxWorks 内核。通常设置为一半主内存 + 0x3000,例如在具有 4Mb RAM 的系统上设置为 0x40203000。

于 2016-01-05T13:22:39.683 回答