【问题标题】:What does RAM_HIGH_ADRS really means in a VxWorks BSP?RAM_HIGH_ADRS 在 VxWorks BSP 中的真正含义是什么?
【发布时间】:2016-01-24 12:26:15
【问题描述】:

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

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

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

【问题讨论】:

标签: c vxworks bsp


【解决方案1】:

如果您使用 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 之间。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 存储在 RAM_LOW_ADRS..RAM_HIGH_ADRS 的“VxWorks 内核”是否包含我程序的大扩展数据段?如果是这样,这就解释了为什么增加 RAM_HIGH_ADRS 允许 cpu 启动。
    猜你喜欢
    • 2013-02-02
    • 2017-05-06
    • 2012-03-30
    • 2011-10-10
    • 2012-08-03
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多