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.

[参考译文] TMS320F28335:FPUmathTable 不能放入“FPUTABLES”部分

Guru**** 2522770 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/938517/tms320f28335-fpumathtable-cannot-fit-into-fputables-section

器件型号:TMS320F28335
主题中讨论的其他器件:C2000WARE

我尝试将我的同伴的项目传输到我的桌面 CCS、当我完成项目设置后、CCS 报告 "程序将不适合可用存储器、或者该段包含一个需要无法为此段生成的 trampoline 的调用站点。 对于大小为0x74apage 0的"FPUmathTables"段、放置对齐/分块失败。  可用存储器范围:"。 我更新了我的 C2000ware、该项目使用了 fastRTS 库。 如何解决? 我是否必须使用旧的库?

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

    您好!

    请共享链接器命令文件和错误日志。

    -Shantanu

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

    链接器命令文件

    /*
    //######################################################################################################################
    //
    //文件:F28335.cmd
    //
    //标题:F28335器件的链接器命令文件
    //
    //######################################################################################################################
    //$TI 发行版:2833x/2823x 头文件和外设示例 V133 $
    //$Release Date:2012年6月8日$
    //######################################################################################################################
    *

    /*===================================================================
    //适用于 Code Composer Studio V2.2和更高版本
    //--------------------------------------------------------
    //除了该内存链接器命令文件外,
    //将头文件链接器命令文件直接添加到工程中。
    //链接时需要标头链接器命令文件
    //将外设结构设置到内部的适当位置
    //存储器映射。
    //
    //在中找到了头文件链接器文件 \DSP2833x_Headers\cmd
    //
    //对于 BIOS 应用程序添加:DSP2833x_Headers_BIOS.cmd
    //对于非 BIOS 应用程序添加:DSP2833x_Headers_nonBIOS.cmd
    =================================================================================================== *

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

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

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

    /* 2)在项目中添加路径 \DSP2833x_headers\cmd 至
    库搜索路径位于 project->build options、linker tab、
    库搜索路径(-I)。
    /*================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ *

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

    注:
    F28335上的存储器块是一致的(即相同的
    物理存储器)。
    不应该是相同的存储器区域
    同时为 PAGE 0和 PAGE 1定义。
    这样做将导致程序损坏
    和/或数据。

    L0/L1/L2和 L3存储器块被镜像-即
    它们可以在高内存或低内存中访问。
    为简单起见、其中仅使用了一个实例
    链接器文件。

    可组合连续 SARAM 存储器块
    如果需要创建更大的存储器块。
    *


    存储器

    第0页:/*程序内存*/
    /*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/

    RAML012:origin = 0x008000、length = 0x003000 //片上 RAM 块 L0 */
    // RAML1:origin = 0x009000,length = 0x001000 //片上 RAM 块 L1 */
    // RAML2:origin = 0x00A000,length = 0x001000 //片上 RAM 块 L2 */
    RAML3:origin = 0x00B000、length = 0x001000 //片上 RAM 块 L3 *
    FLASHH:origin = 0x300000、length = 0x008000 //片上闪存*/
    FLASHG:origin = 0x308000、length = 0x008000 //片上闪存*/
    FLASHF:origin = 0x310000、length = 0x008000 //片上闪存*/
    FLASHE:origin = 0x318000、length = 0x008000 //片上闪存*/
    FLASHD:origin = 0x320000,length = 0x008000 //片上闪存*/
    FLASHC:origin = 0x328000,length = 0x008000 //片上闪存*/
    FLASHA:origin = 0x338000,length = 0x007F80 //片上闪存*/
    csm_RSVD:origin = 0x33FF80,length = 0x000076 // FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 *
    begin:origin = 0x33FFF6,length = 0x000002/* FLASHA 的一部分。 用于"引导至闪存"引导加载程序模式。 *
    CSM_PWL:origin = 0x33FFF8,length = 0x000008 // FLASHA 的一部分。 FLASHA 中的 CSM 密码位置*/
    OTP:origin = 0x380400,length = 0x000400 //片上 OTP */
    ADC_CAL:origin = 0x380080,length = 0x000009 //保留存储器中的 ADC_cal 函数*/

    IQTABLES:origin = 0x3FE000,length = 0x000b50 //引导 ROM 中的 IQMath 表*/
    IQTABLES2:origin = 0x3FEB50,length = 0x00008c //引导 ROM 中的 IQMath 表*/
    FPUTABLES:origin = 0x3FEBDC,length = 0x0006A0 //引导 ROM 中的 FPU 表*/
    ROM:origin = 0x3FF27C,length = 0x000D44 //引导 ROM */
    复位:origin = 0x3FFFC0,length = 0x000002 //引导 ROM 的部分*/
    向量:origin = 0x3FFFC2,length = 0x00003E //引导 ROM 的部分*/

    第1页:/*数据存储器*/
    /*内存(RAM/FLASK/OTP)块可被移动至 PAGE0以进行程序分配*/
    /*寄存器保留在第1页中*/

    BOOT_RSVD:origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
    RAMM0:origin = 0x000050、length = 0x0003B0 //片上 RAM 块 M0 *
    RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
    RAML4:origin = 0x00C000、length = 0x001000 //片上 RAM 块 L1 */
    RAML5:origin = 0x00D000、length = 0x001000 //片上 RAM 块 L1 */
    // RAML6:origin = 0x00E000,length = 0x001000 //片上 RAM 块 L1 */
    // RAML7:origin = 0x00F000,length = 0x001000 //片上 RAM 块 L1 */
    ZONE0:origin = 0x004000,length = 0x001000 // XINTF 区域0 ADC 数据映射区域*/
    //ZONE6A:origin = 0x0100000,length = 0x40000 // XINTF 区域6外部 RAM 区域256K 字 IS61LV25616旧版本*/
    //ZONE6B:origin = 0x0180000,length = 0x80000 // XINTF 区域6外部闪存区512K 字39VF800A 旧版本*/
    ZONE6A:origin = 0x0190000,length = 0x30000 // XINTF 区域6外部 RAM 区域192K 字 IS61LV25616新版本*/
    //数据记录:origin = 0x0180000,length = 0x10000 // XINTF 区域6外部 RAM 区域64k 字,用于 Modbus 数据寄存器*/
    ZONE6B:origin = 0x100000,length = 0x80000 // XINTF 区域6外部闪存区512K 字39VF800A 新版本*/
    ZONE7A:origin = 0x200000、length = 0x004000 // XINTF 区域7 COMX 数据空间,总计16K 字*/
    ZONE7B:origin = 0x20FC00,length = 0x000400 // XINTF 区域7- data space */
    FLASHB:origin = 0x330000,length = 0x008000 //片上闪存*/

    /*将段分配给内存块。
    注:
    DSP28_CodeStartBranch.asm 中用于重定向代码的 codestart 用户定义段
    闪存时执行
    ramfuncs 用户定义的段来存储将从闪存复制到 RAM 中的函数
    *

    部分


    /*分配计划领域:*/
    .cinit:> FLASHA PAGE = 0
    .pinit:> FLASHA,page = 0
    .text:> FLASHA PAGE = 0
    codestart:> begin page = 0
    ramfuncs:load = FLASHD,
    运行= RAML012、
    load_start (_RamfuncsLoadStart)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    PAGE = 0

    csmpasswds:>csm_PWL page = 0
    csm_rsvd:>csm_RSVD page = 0

    /*分配未初始化的数据段:*/
    .stack:>RAMM1 page = 1.
    .ebss:> RAML4 page = 1.
    .esysmem:>RAML5 PAGE = 1.


    /*初始化段进入闪存*/
    /*要使 SDFlash 对这些内容进行编程、必须将它们分配到第0页*/
    econst:> FLASHA PAGE = 0
    .switch:> FLASHA PAGE = 0

    /*分配 IQ 数学区域:*/
    IQMath:> FLASHC page = 0 /*数学代码*/
    IQmathTables :>IQTABLES,PAGE = 0,TYPE = NOLOAD

    /*如果调用 IQNexp()或 IQexp(),请取消注释以下部分
    库中的函数、以便利用
    引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
    1个等待状态)。 如果此部分未注释、则为 IQmathTables2
    将被加载到其他存储器(SARAM、闪存等)中并将采用
    上行空间、但0等待状态是可能的。
    *
    /*
    IQmathTables2:> IQTABLES2,PAGE = 0,TYPE = NOLOAD


    IQMath.lib (IQmathTablesRam)


    *

    //FPUmathTables:> FPUTABLES,PAGE = 0,TYPE = NOLOAD
    FPUmathTables:> FPUTABLES,PAGE = 0,TYPE = NOLOAD

    /*分配可通过 DMA 访问的 RAM 段:*/
    DMARAML4:>RAML4,PAGE = 1
    //DMARAML5:>RAML5,PAGE = 1
    // DMARAML6:> RAML6,page = Modbus参数寄存器,在nonBIOS μ cmd文件中定义
    //DMARAML7:>RAML7,PAGE = 1 //

    /*分配 XINTF 区域7的0x400来存储数据*/
    ADCDATA:> ZONE0,PAGE = 1 // ADC 数据映射区域
    EXDATA:> ZONE6A,PAGE = 1 //外部 RAM 数据区域
    PARDATA:> ZONE6B,PAGE = 1 //外部非易失性参数区域
    DPMDATA:> ZONE7A,PAGE = 1 // COMX 数据区域
    ZONE7DATA:> ZONE7B,PAGE = 1 //其它数据区域
    // ModbusDatalogRegs :> datalog,page=1 // Modbus 数据记录区域

    /*.reset 是编译器使用的标准段。 它包含*/
    /* C 代码_c_int00起始地址。 /*
    /*当使用引导 ROM 时,此部分和 CPU 矢量*/
    /*不需要表。 因此、默认类型设置为*/
    /* DSECT */
    .reset:> reset,page = 0,type = DSECT
    VECTORS:> VECTORS PAGE = 0,TYPE = DSECT

    /*分配 ADC_cal 函数(出厂时已预先编程到 TI 保留存储器中)*/
    ADC_cal:load = ADC_CAL、page = 0、type = NoLoad

    错误日志

    #10099-D 程序不能放入可用存储器中、或者该段包含需要无法为此段生成的 trampoline 的调用站点。 对于大小为0x74apage 0的"FPUmathTables"段、放置对齐/分块失败。  可用存储器范围:

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

    您好!

    "FPUmathTables"大小为0x74apage 0"的段对齐/分块失败。  因为在链接器 cmd 文件中、您只分配长度为6A0的内存块。 :

    FPUTABLES:origin = 0x3FEBDC,length = 0x0006A0 //引导 ROM 中的 FPU 表*/

    请对照提供的示例链接器命令文件检查此行是否正确。 如果不是、则某些项目属性必须不匹配。 请返回此信息

    -Shantanu