【问题标题】:Variables .BSS section变量 .BSS 部分
【发布时间】:2013-03-21 13:47:10
【问题描述】:

未初始化的变量包含在 BSS 部分中。

第一个问题:分配后他们会留在那里吗?

第二个问题/问题:我想将此部分加载到外部 SDRAM 中。变量正确地位于内存映射中,但充满了奇怪的值,我无法存储任何其他数字。你对这个问题有什么想法吗?

/* Memory Map                                                                 */
MEMORY{
    VECTORS (X)  : origin=0x00000000 length=0x00000020
    FLASH0  (RX) : origin=0x00000020 length=0x0017FFE0
    FLASH1  (RX) : origin=0x00180000 length=0x00180000
    STACKS  (RW) : origin=0x08000000 length=0x00001500
    RAM     (RW) : origin=0x08001500 length=0x0003EB00
    SDRAM   (RW) : origin=0x80000000 length=0x00800000
}

/*----------------------------------------------------------------------------*/
/* Section Configuration                                                      */
SECTIONS{
    .intvecs : {} > VECTORS
    .text    : {} > FLASH0 | FLASH1
    .const   : {} > FLASH0 | FLASH1
    .cinit   : {} > FLASH0 | FLASH1
    .pinit   : {} > FLASH0 | FLASH1
    .bss     : {} > SDRAM
    .data    : {} > RAM
    .sysmem  : {} > RAM
}

【问题讨论】:

  • 约阿希姆:错了...仔细阅读数字:)
  • 另外,请向我们提供有关该系统的更多详细信息。即使您将.bss 正确移动到SDRAM 地址空间,在执行crt0 时SDRAM 可能尚未配置等。所以,请给我们更多信息!
  • @Anonymous 是的,在我看到你的评论之前就注意到了。 :)
  • 根据 CPU 的不同,您可能需要在特殊寄存器中设置有效的可寻址范围。
  • 您的系统使用 MMU 吗?如果是这样,可能那些奇怪的值是因为您正在查看的虚拟地址不是已经初始化的物理地址?

标签: c embedded


【解决方案1】:

关于 Q2,您必须确保您的 SDRAM 内存控制器使用正确的时序和映射为您的内存设备正确初始化之前 .bss 段由运行时启动初始化为零-上代码。您还必须确保运行时启动代码在位于 SDRAM 中时显式初始化 .bss 段。

【讨论】:

    【解决方案2】:

    Q1:是的,他们就在那儿。他们为什么要搬家(你为什么要他们搬家?)

    http://en.wikipedia.org/wiki/.bss

    Q2:我不完全理解这个问题,但你确定你的 SDRAM 真的可以工作吗?您的平台是否有一个监视器可以让您读取和写入内存?

    【讨论】:

      【解决方案3】:

      Q1:是的,变量将在.bss 部分。

      Q2:你可以尝试将.sysmem 移动到 SDRAM 中并检查是否可以读取和写入这些值吗?我怀疑您没有必要的访问权限。

      【讨论】:

        【解决方案4】:

        Q2:必须如何完成此操作的详细信息取决于您使用的系统(您使用的是 Linux 吗?)

        要获得所需的 .bss 部分,您必须修改链接描述文件。例如对于 Linux 内核,它将是 vmlinux.lds。

        同样在 Linux 中,.bss 部分被引导加载程序清除为全零,例如Uboot,根据elf-file中的信息。您的 .bss 似乎没有被清零。开始调试的一个好地方是引导加载程序。在引导加载程序清除它时,您的 SDRAM 可能没有正确映射到内存中(您可以在系统运行时进行成功的读写测试吗?)。或者你的 CPU 的内存保护可能会阻止访问。

        【讨论】:

        • 不是 OP 实际上在修改链接描述文件吗?问题中的代码看起来像 LD 脚本 :)
        猜你喜欢
        • 2015-03-10
        • 2021-05-29
        • 1970-01-01
        • 2015-12-01
        • 2013-09-03
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多