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/TMS320C5515:TMSC5515的内存块配置

Guru**** 2576195 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/597460/ccs-tms320c5515-memory-block-configuration-for-tmsc5515

部件号:TMS320C5515

工具/软件:Code Composer Studio

大家好,我正在处理一个使用带Code Composer Studio的TMSC5515的项目。 根据数据表,C5515具有320K字节的片上RAM。 但是,当我尝试初始化大小为9.6万的Int16阵列(对于48kHz采样率下的2秒延迟线足够)时,我收到一个错误:

说明资源路径位置类型
gmake:***[main.obj]错误1 audioTests C/C++问题

这不是很好的描述,但我发现问题是基于数组大小。

9.6万*2字节(16位整数)=182K字节,芯片应具有足够的RAM来处理。 起初我认为这是因为SARAM由32个4K X 16位块组成,但我能够实例化大小为2.4万的数组,没有任何问题,所以很显然,创建一个大于此块大小的数组是可能的。  

如何配置片上内存以允许较大的阵列大小?

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Emmett,您好!
    是的,这当然不是一个非常描述性的错误。 我猜您会遇到链接器放置错误,如果您使用evm5515.gel文件,这是有意义的,因为链接器命令文件已将SARAM分解为32个块。 您可以尝试调整链接程序命令文件,以重新配置链接程序映射,以便适合该大数组。 有关如何调整链接程序命令文件的详细信息,请参阅以下文章:
    processors.wiki.ti.com/.../Linker_Command_File_Primer

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

    感谢您的快速回复。 我有下面的标准lnkx.cmd文件,似乎.data (已初始化的变量)和.sysmem (动态内存)都已分配给DARAM0|SARAM0|SARAM1。 这似乎会使阵列能够访问足够的内存。 我需要做出哪些改变?

    /************************************************************************ /*
    LNKX.CMD -用于链接大/大内存模型*/
    /*中C程序的命令文件 *//*
    用法: */
    /* cl55 <src files>-z -o<out file>-m<map file> lnkx.cmd -l<RTS library>*/
    * */
    /*说明:此文件是可用于的示例命令文件 */*
    链接使用C编译器构建的程序。 将其用作 */*
    指南;您可能需要更改分配方案 */*
    根据程序的大小和内存布局*/*
    目标系统。 */*
    */*
    注:(1)您必须指定<RTS库>所在的目录 */*
    已找到。 请在此文件中添加"-I<directory>"行 */*
    文件,或使用系统环境变量C55x_C_DIR来*/*
    指定库的搜索路径。 */*
    ///............ /
    
    -stack 0x2000 /*主堆栈大小*/
    -sysstack 0x1000 /*次堆栈大小*/
    -heap 0x2000 /*堆区域大小 */
    
    -c /*使用C链接约定:运行时自动初始化vars */
    -u _Reset /*强制加载重置中断处理程序 */
    
    /*指定系统内存映射*/
    
    内存
    {
     第0:/*---统一程序/数据地址空间--*/
    
      MMR (RWIX):原始=0x0万,长度=0x0000c0 /* MMRs */
      DARAM0 (RWIX):原始=0x0000c0,长度=0x00ff40 /* 64 KB - MMR (RAMXIX)
      : 原点= 0x1万,长度= 0x1万 /* 64 KB */
      SARAM1 (RWIX):原点= 0x2万,长度= 0x2万 /* 128 KB */
      SARAM2 (RWIX):原点= 0x4万,长度= 0x00FE00 /* 64 KB */
      V512ECS (RWIX):原点= 0x04FE00,长度= 0x0.02万 /ROM (RDIX)
      :RB) 原点= 0xFF8000,长度= 0x0.8万 /* 32 KB */
    
     第2页:/*------- 64K字I/O地址空间------- */
    
      IOPORT (RWI):Origin = 0x0万,length = 0x2万
    }/*
    
    指定分配到内存*/
    
    {
       .text >> SARAM1|SARAM2|SARAM0 /*代码 */*
    
       两个堆栈必须位于同一物理内存页上 */
       .stack > DARAM0 /*主系统堆栈 */
       .sysstack > DARAM0 /*辅助系统堆栈 */
    
       .data >> DARAM0|SARAM0|SARAM1 /*已初始化的vars */
       .BSS >> DARAM0|SARAM0|SARAM1 /*全局和静态广域网 */
       .const >> DARAM0|SARAM0|SARAM1 /*常量数据 */
       .sysmem > DARAM0|SARAM0|SARAM1 /*动态内存(malloc) */
       .switch > SARAM2 /* Switch语句表 */
       .cinit > SARAM2 /*自动初始化表*/
       .Pinit > SARAM2 /*初始化fn表*/
       .cio > SARAM2 /* C I/O缓冲区 */
       .args > SARAM2 main()的/*参数 */
    
        引导程序> VECS /*中断向量 */
    
       .ioport > IOPORT第2页 /*全局和静态ioport vars */
    }