RAM_HIGH_ADRS在VxWorks BSP中的真正含义是什么?

时间:2016-01-05 12:55:09

标签: c vxworks bsp

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

这意味着,例如,如果cpu具有64 Mb的RAM,并且RAM_HIGH_ADRS等于0x00A00000(10 Mb),则整个程序有54 Mb可用于存储文本+数据+ bss + heap +叠加。

我质疑这个的原因是我正在进行一个项目,我扩大了数据段的大幅度,导致cpu无法启动。然后我增加 RAM_HIGH_ADRS,此时允许cpu启动。这让我感到困惑,因为根据我的理解,RAM_LOW_ADRS和RAM_HIGH_ADRS之间唯一写的是VxWorks图像,因此增加RAM_HIGH_ADRS应该只会降低数据段的可用大小。

2 个答案:

答案 0 :(得分: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之间。

答案 1 :(得分:0)

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

  

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