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.

对 c6678,ccs能不能在cmd文件中把堆内存放置到外部sram或ddr中



我开发c6678程序,程序中用malloc分配很多动态内存,内部存储不够用,能不能在cmd文件中设置把堆内存分配到外部sram中或ddr中?我试过,.sysmem分配到外部后,malloc返回的地址是0,不能分配,不知道怎么回事?还有堆内存分配大小有限制吗?

  • 可以看一下map文件看是否有把.sysmem分配到片外? 另外,看一下是否定义的heap size超过了分配的外部memory的大小?
  • 这是cmd文件

    -stack 0x4000

    -heap 0x400000

    MEMORY

    {

           BOOT:       o=0x00800000   l=0x00000200//中断向量表

       INITIAL:    o=0x00800200   l=0x00000200//初始化寄存器,搬移4KB以外的程序

    //    CONFIG:     o=0x00800400   l=0x00001000//关闭L1D cache(MSMC的ram默认可被L1 cache);配置外存等,主要是ddr

       DATA:       o=0x00800400   l=0x00000400//原始数据,作为程序数据搬移、测试的源

       L2:         o=0x00800800   l=0x0007f800//主程序

       MSMC0:    o=0x0c000000   l=0x00400000

    //    MSMC1:    o=0x0c300000   l=0x00100000

       /*MSMC0: o=0x80000000   l=0x00100000

       MSMC1:    o=0x80100000   l=0x00100000*/

    //    MSMC2:    o=0x0c200000   l=0x00100000

    //    MSMC3:    o=0x0c300000   l=0x00100000

       EMIFCE0:    o=0x70000000   l=0x00400000

           DDR3:       o=0x80000000   l=0x80000000

    }

    SECTIONS

    {

      vecs        >   BOOT

      initial     >   INITIAL

    config    >   L2

    data        >   DATA

    .test       >   L2

    .fardata > L2

    .stack > L2

    .text > L2

    .cinit > L2

    .bss > L2

    .cio     > L2

    .const   > L2

    .far     > L2

    .sysmem   > DDR3

    .switch > L2

      .neardata > L2

    //   .MSMC0 > MSMC0

    //   .MSMC1 > MSMC1

    //   .MSMC2 > MSMC2

      .MSMC3 > EMIFCE0

    }

    下面是map文件节选

     70000000    70000000    0010ddc3   00000000    rw- .MSMC3

    80000000    80000000    00400000   00000000    rw-

     80000000    80000000    00400000   00000000    rw- .sysmem

    我主程序一运行ddr初始化函数是,程序就崩溃了,

    如果.sysmem   > DDR3改成 .sysmem   > MSMC0,就可以

  • 麻烦帮我看看cmd文件有没有问题,多谢
  • 在load程序前,在gel文件里有对DDR初始化吗?
  • load program 之前是这样的,不太懂gel文件,应该没有初始化ddr吧
  • GEL文件在target configuration file文件中设置,请参考下面wiki网址。
    processors.wiki.ti.com/.../Connecting_To_An_LCEVM_with_CCS
  • 你好,我看你的CMD文件里面,有这段代码,BOOT: o=0x00800000 l=0x00000200//中断向量表 这个就是6678的中断向量表在存储器里面的映射地址吗,可是我看了6678的文档,在存储器映射章节,发现这个地址是属于CPU0的LOCAL L2 SRAM,我现在正在学习6678的中断控制这块,没有中断向量表,不知道各个外设模块在中断向量表中的具体地址,感觉无从下手
  • 那我应该是没有初始化,选择文件那里是空的,另外我还有个问题,想您请教,我用load memory当数据量比较少时,能够成功load进来,比如150000个字节,但是如果数据量大了,比如1000000个byte就不行了,ccs软件就没有响应,然后死机了。不知道为什么,我2G DDR很大,内存够用,
  • 请问仿真器用的是哪款型号?xds100仿真器速度比较慢。CCS是哪个版本的?电脑主机配置是什么?
  • 不好意思,前段时间有点别的事耽误了。现在load memory没问题了。但是开始那个问题我还是想问问,如果把.sysmem > DDR3中,必须加载gel文件是吗? 现在是这样,我程序代码里有ddr初始化,初始化后可以用。那这样想把.sysmem > DDR3中,也必须加载gel文件吗?谢谢!
  • 是的,GEL文件是在代码运行前给板子一个初始化设置。如果要把代码load到片外DDR3,就需要先初始化DDR3,否则会报错。
  • gel文件有公用的吗,还是自己写?
  • CCS里有自带的EVM板的GEL文件,路径是C:\ti\ccs901\ccs\ccs_base\emulation\boards,可以根据自己的板子硬件做相应的修改。