This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM263P4:在多个 OCRAM 组上定义的链接器存储器区域

Guru**** 2788275 points

Other Parts Discussed in Thread: SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1611521/am263p4-linker-memory-region-defined-over-multiple-ocram-banks

器件型号: AM263P4
主题中讨论的其他部件: sysconfig、、、

您好、

我最近不得不增加分配给我的程序.text 段的 RAM 容量。 因此、最初我进入了 SysConfig、将以前存在的 OCRAM 存储器区域从 0x40000 字节增加到 0x50000 字节。

OCRAMChanged.png

但是、这会在 OSPI_LLD_phyBasicConfig (..) 中的第一次寄存器写入期间导致预取中止故障。 在 Board_flashOpen () 中,我在程序开始时调用。

我还意识到 OCRAM 组按以下间隔分离:

L2OCRAM_BANK0 --开始:0x7000 0000 --结束:0x7007 FFFF --大小:512KB  

L2OCRAM_BANK1 --开始:0x7008 0000 --结束:0x700F FFFF --大小:512KB  

L2OCRAM_Bank2 --开始:0x7010 0000 --结束:0x7017 FFFF --大小:512KB

L2OCRAM_BANK3 --开始:0x7018 0000 --结束:0x701F FFFF --大小:512KB

...

因此、我当前的 OCRAM 存储器区域从 0x70040000 开始、到 0x7008FFFF 结束、该区域在 SysConfig 中定义、在 L2OCRAM_BANK0 和 L2OCRAM_BANK1 之间重叠。

我认为这可能是一个问题、我为链接器创建了一个新的存储器区域、称为 OCRAM1 、仅在 L2OCRAM_BANK3 内部设置。 我还将我的第一个 OCRAM 存储器区域大小设置回仅 0x40000 字节、因此仅在 L2OCRAM_BANK1 中。 然后、我添加了  OCRAM1 作为用于需要更多空间的段的存储器区域。

NewOCRAMMemoryRegion.png

进行这些更改后、我不再收到预取 中止故障、我的应用程序会按预期运行。

我的问题是:为链接器定义的存储器区域是否只允许位于单个 OCRAM 组内、即单个存储器区域不能与两个 OCRAM 组重叠?

谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能否检查映射文件以查看在拆分 OCRAM 组的地址之间是否放置了一些东西? 通常、如果启用了对齐访问和填充、则情况不应如此、如果访问未对齐、则可能会导致故障。

    在实践中、我建议您可以按照此拆分定义链接器的各段、以避免出现任何问题(您已经正确地完成了)

    [报价 userid=“652067" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1611521/am263p4-linker-memory-region-defined-over-multiple-ocram-banks

    L2OCRAM_BANK0 --开始:0x7000 0000 --结束:0x7007 FFFF --大小:512KB  

    L2OCRAM_BANK1 --开始:0x7008 0000 --结束:0x700F FFFF --大小:512KB  

    L2OCRAM_Bank2 --开始:0x7010 0000 --结束:0x7017 FFFF --大小:512KB

    L2OCRAM_BANK3 --开始:0x7018 0000 --结束:0x701F FFFF --大小:512KB

    [/报价]

    此致、
    Shaunak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我不相信有任何东西跨越边界。 当我恢复为只有一个 0x50000 大小的 OCRAM 区域导致程序崩溃时、我看到存储在边界边缘的内容如下:

    地址:         尺寸:
    7007fff4.      0000000c     -孔-[填充= 0]
    70080000    00000044    drivers.am263px.r5f.ti-arm-clang.nortos.debug.lib:soc_rcm.obj (.text.SOC_rcmExtract8)

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Olivier、

    您能否与我共享您的链接器和 syscfg 文件?

    此致、
    Shaunak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    感谢您的信息、

    您是否可以共享您的应用程序以便我可以对其进行调试?或者、您是否可以分享:

    1.映射文件

    2.发生中止时、在反汇编中、转至反汇编文件中的 LR-8 指令。 并查看已执行的指令、和

    在 CCS 中打开寄存器窗口、从 R5F CPU 内核寄存器中获取 IFAR、IFSR、SPSR、PRC、SP 和 (LR-8) 寄存器的值

    基于此、我们可以准确查看导致中止的原因。

    此致、
    Shaunak