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.

多核共用工程时的内存分配问题



开发环境CCS5.4+TMS320C6678L

在多核共用一个RTSC工程的时候,我之前把data部分放到local l2sram里,可以正常运行

现在往工程里加入了图像处理模块,堆大小超过了512K,想把该部分移入DDR3

有什么办法能在使用一个工程的情况下将不同核的data部分映射到DDR3的不同地址空间么?

  • 没有太好的办法,BIOS里指定memory的空间可以参考BIOS_USER_GUIDE里的Memory章节;

    回到你的具体问题,你可以考虑在一个工程里的Memory空间指定一个大的数据区,在代码里根据不同的DNUM将不同的数据段赋给同一个指针。

    比如

    开辟0x80000000 - 0x81000000为数据段;

    ...

    pData = 0x80000000 + 0x200000*DNUM;

    ...

  • 你好,

    “将不同的数据段赋给同一个指针”是在c文件里完成的么?怎样才能控制不同的函数在申请内存空间时都从指针指向的内存段申请呢?

    现在给从核分配的heap是这样的

    /*image_processing_evmc6678l_slave.cfg*/

    heapMemParams.size=0x10000000;

    heapMemParams.sectionName="systemHeapslave";

    var heap0 = HeapMem.create(heapMemParams);

    Memory.defaultHeapInstance = heap0;

    //...

    Program.sectMap["systemHeapslave"] = "DDR3_slave"//0x90000000-0xA0000000

  • c66 DSP的XMC具有地址扩展功能,如果你对XMC和MSMC的地址映射很熟悉,可以通过修改编译器rtslib的boot.c文件,在入口函数c_int00中,手动配置xmc和msmc的寄存器,将相同的逻辑地址映射到不同的物理地址。这种修改需要对xmc和msmc的地址映射非常了解,同时需要了解TI的编译器,芯片从上电到开始执行main的流程。