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.

[参考译文] CCS/TMS320F28377D:外部存储器中的堆(malloc)

Guru**** 2562700 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/640151/ccs-tms320f28377d-heap-malloc-in-external-memory

器件型号:TMS320F28377D

工具/软件:Code Composer Studio

我的硬件使用连接到外部 SDRAM 的 F28377D。  SDRAM 的一切工作正常。  我可以复制并处理大量数据。

代码还会为某些任务在堆上动态分配内存。  当堆在内部存储器的链接器中定义时、这可以正常工作:

RAMGS5:origin = 0x011000,length = 0x001000

.esysmem:>RAMGS5 PAGE = 1.

现在的问题是、我需要分配比0x1000字大得多的存储空间。  内部 RAM 中没有更多资源、因此我需要使用外部 SDRAM 来存储堆。  我更改了链接器文件以包含以下行:

EMIF1_CS0nA:origin = 0x8000000,length = 0x200000 //连接到 EMIF1 CS0的8MB SDRAM 芯片(低4MB)
EMIF1_CS0nB:origin = 0x80200000、length = 0x200000 //连接到 EMIF1 CS0的8MB SDRAM 芯片(高4 MB)

.esysmem:> EMIF1_CS0nB PAGE = 1//用于分配

即使我在链接器设置中将堆大小保留在0x1000、每次我调用 malloc 时、它都会返回 NULL。   请注意、我没有使用任何 RTOS。   

是否缺少其他一些链接器设置?

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

    Trevor、

    我怀疑这可能与 C28x 访问 SDRAM 地址空间有关。

    我不是这方面的专家、但我认为您可能需要在 RTS 库中修改和重建 memory.c、以将堆空间变量"_sys_memory"声明为_attribute__((far)) volatile int、以便编译器知道将32位用于堆地址。   也可能会有其他更改。

    有关 访问 SDRAM 空间中的变量的更多信息、请参阅此应用报告。

    Tommy