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应该只会降低数据段的可用大小。
答案 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。