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/TMS320F2.8027万:程序将不适合可用内存位置

Guru**** 2609955 points
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/638554/ccs-tms320f28027-program-will-not-fit-into-available-memory-location

部件号:TMS320F2.8027万
主题中讨论的其他部件:controlSUITEC2000WARE

工具/软件:Code Composer Studio

您好,
我遇到了问题:程序无法插入我的内存位置。我应该怎么做??请帮助我

链接>
"H:/ti/controlSUITE/DEVICE_SUPPORT/F2802x/v230/F2802x_common/Cmd/28027_RAM_lnk.cmd",2802,第2.8027万第114行:错误#1.0099万-D:程序将不适合可用内存。对".text"大小0x15ba部分的定位/阻止失败,第0页。 可用内存范围:
PRAML0大小:0x900未使用:0x900最大孔:0x900

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

    请参阅 此页面 以了解错误说明和可能的解决方案。

    另请参阅 此常见问题 ,了解C28x的特定建议,以解决此错误。

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

    您好,

    实际上,我们必须制作一个连续的内存以避免此错误。任何人都能帮助我制作一个连续的内存吗?我的ram文件如下:

    /*
    //###################################################################
    //
    //文件:2.8027万_RAM_lnk.cmd
    //
    //标题:链接器命令文件,用于2.8027万 RAM不足的示例
    //
    //这仅包括2.8027万器件上的所有SARAM块。
    //这不包括闪存或OTP。
    //
    //请记住,L0受代码保护
    //安全模块。
    //
    //在大多数情况下,这意味着您要移至
    //另一个已定义更多内存的内存映射文件。
    //
    //###################################################################
    //$TI发行版:F2802x支持库v230 $
    //$发布日期:星期五5月8日07:43:05 CDT 2015 $
    //$Copyright:版权所有(C) 2008-2015 Texas2015 Texas Instruments Incorporated -
    // http://www.ti.com/ 保留所有权利$
    //###################################################################
    */

    /*===================================================================================
    //用于Code Composer Studio 2.2 及更高版本
    //----------------
    //除了此内存链接器命令文件外,
    //将头链接器命令文件直接添加到项目中。
    //需要头链接器命令文件来链接
    //外围结构到中的正确位置
    //内存映射。
    //
    //头链接器文件位于<base>\f2802xX_headers\cmd中
    //
    //对于BIOS应用程序,添加:F2802xX_Headers_BIOS.cmd
    //对于非BIOS应用程序,添加:F2802xX_Headers_nonBIOS.cmd
    =================================================================================================================== */

    /*===================================================================================
    //对于2.2 之前的Code Composer Studio
    //----------------
    //1)使用以下-l语句之一来包括
    //项目中的头链接器命令文件。 头链接器
    //文件是将外围结构链接到正确的所需的
    //内存映射中的位置*/

    /*取消注释此行以仅包括非BIOS应用程序的文件*/
    /*-l F2802xX_Headers_nonBIOS.cmd */

    /*取消注释此行以包括仅用于BIOS应用程序的文件*/
    /*-l F2802xX_Headers_BIOS.cmd */

    /* 2)在项目中,将路径添加到<base>\f2802xX_headers\cmd
    项目->生成选项下的库搜索路径,链接器选项卡,
    库搜索路径(-i)。
    /*=========================================================================================================== */

    /*定义F2802xX的内存块开始/长度
    第0页将用于组织程序部分
    第1页将用于组织数据部分

    注:
    F2.8027万上的内存块是一致的(即相同的
    物理内存)。
    这是不应出现的相同内存区域
    为第0页和第1页定义。
    这样做会导致程序损坏
    和/或数据。

    L0内存块被镜像-即
    它可以在高内存或低内存中访问。
    为简单起见,此中仅使用一个实例
    链接程序文件。

    连续的SARAM内存块可以组合使用
    如果需要创建更大的内存块。
    */

    内存

    第0页:
    /*在本例中,L0在第0页和第1页之间拆分*/
    /* BEGIN用于“引导至SARAM”引导加载程序模式*/

    BEGIN:Origin = 0x0万,length = 0x0.0002万
    RAMM0:原点= 0x0.005万,长度= 0x0003B0
    PRAML0:原点= 0x0.8万,长度= 0x0.09万
    重置:原始= 0x3FFFC0,长度= 0x0.0002万

    IQTABLES:ORIGIN = 0x3FE000,LENGTH = 0x000B50 /*引导ROM中的IQ数学表*/
    IQTABLES2:原始= 0x3FEB50,长度= 0x0.0008万C /*引导ROM中的IQ数学表*/
    IQTABLES3:原始= 0x3FEBDC,长度= 0x0000AA /*引导ROM中的IQ数学表*/

    BootROM:Origin = 0x3FF27C,length = 0x000D44


    第1页:

    /*在本例中,L0在第0页和第1页之间拆分*/
    BOOT_RSVD:Origin = 0x0.0002万,length = 0x0.0004万E /* M0的一部分,boot ROM将对stack */使用此选项
    RAMM1:原点= 0x0.04万,长度= 0x0.04万 /*片上RAM块M1 */
    DRAML0:原点= 0x0.89万,长度= 0x0.07万
    }


    章节

    /*“引导至SARAM”模式的设置:
    codegstart部分(可在DSP28_CodeStartBranch.asm中找到)
    将执行重定向到用户代码的开头。 */
    codegstart:> begin,page =0
    ramfuncs:> RAMM0 page =0
    .text:> PRAML0,page =0
    .cinit:> RAMM0,page =0
    .Pinit:> RAMM0,页=0
    .switch:> RAMM0,page =0
    .reset:> reset,page =0,type = DSECT /* not used,*/

    .stack:> RAMM1,页= 1
    .ebss:> DRAML0,页面=1
    econst :> DRAML0,页=1
    esysmem:> RAMM1,页= 1

    IQMath:> PRAML0,页=0
    IQmathTables:> IQTABLES,page =0,type = NoLoad

    /*如果调用IQNexp()或IQexp(),则取消注释以下部分
    从IQMath.lib库中执行函数,以便利用
    引导ROM中的相关IQ Math表(这可节省空间和引导ROM
    为1等待状态)。 如果此部分未取消注释,请使用IQmathTables2.
    将加载到其他存储器(SARAM,闪存等)中并将占用
    打开空间,但0等待状态是可能的。
    */
    /*
    IQmathTables2:> IQTABLES2,page =0,type = NoLoad

    IQMath.lib<IQNexpTable.obj>(IQmathTablesRam)

    }
    */
    /*如果调用IQNasin()或IQasin(),请取消对以下部分的注释
    从IQMath.lib库中执行函数,以便利用
    引导ROM中的相关IQ Math表(这可节省空间和引导ROM
    为1等待状态)。 如果此部分未取消注释,请使用IQmathTables2.
    将加载到其他存储器(SARAM,闪存等)中并将占用
    打开空间,但0等待状态是可能的。
    */
    /*
    IQmathTables3:> IQTABLES3,page =0,type = NoLoad

    IQMath.lib<IQNasinTable.obj>(IQmathTablesRam)

    }
    */

    }

    /*
    //===========================================================================================================================================
    //文件结束。
    //===========================================================================================================================================
    */

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

    要对链接程序命令文件进行任何级别的自定义,需要对其用途和语法有基本的了解。 如果您是TI编译器工具的新用户, C2000汇编语言工具用户指南中的链接器一章 和 本文档 是有关此主题的大量资源。

    话虽如此,对于这种情况,我认为合并连续的RAM区域无法解决错误。 即使合并所有RAM区域,您也只能获得0x17B0总RAM (将所有RAM区域的长度相加)。 您的.text部分(代码)本身是0x15ba,因此,根据分配给RAM的其他部分(ramfuns,.stack,.ebss等)的大小,所有这些部分可能仍不适合此设备的RAM内存。 您可以尝试在项目的“编译器”选项中启用优化,以查看这是否会将代码的大小减小到足以使其适合可用内存的程度。 另请查看项目生成生成的链接映射文件,它将显示其他部分的大小。 使用此信息,您可以定制链接器命令文件,使各部分适合。

    如果代码大小未通过优化充分减少,我建议您考虑将代码编程为闪存而不是RAM。 这将为您提供更多的内存供您使用。 在对闪存进行编程时,需要考虑一些额外的注意事项。 您可以查看controlSUITE和C2000Ware附带的Flash示例,以帮助您入门。

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

     感谢您的快速回复。 我正在尝试使用闪存文件,但没有得到确切的输出。 我正在控制套件中使用ADC SoC程序,但我没有获得正确的值。在ADC结果寄存器中,值为1d,1E,1F,20,21。

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

    很抱歉,我不理解这个问题。 您是否认为您已将ADC_SoC示例转换为从闪存运行,因为我认为默认的RAM运行? 它是开箱即用的示例还是修改的版本,因为开箱即用的示例经过了很好的测试和验证。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我为我的项目修改了控制套件中的ADC SoC程序,我还在带闪存的控制套件中测试了ADC SoC示例。这两种测试都给了我错误的结果。结果在上一篇文章中公布。实际上我给了3.3 电压,我必须得到4095 但我得到的值像1d,1e,1F,20,21。请帮我
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ADDAGUDuru Surya Kiran 说:
    我为我的项目修改了控制套件中的ADC SoC程序,我还在控制套件中测试了带闪存的ADC SoC示例。这两个示例都给了我错误的结果。[/QUOT]

    这将是C2000论坛的一个问题。 C2000小组创建并维护了controlSUITTE/C2000Ware中的示例,以便他们能够最好地回答此问题。 我们可以在本论坛中回答CCS和工具问题,但对于有关ADC SoC示例的预期结果的问题,我建议您开始一个新的主题,并将其发布到C2000论坛。

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