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/TMS320F28069:程序将不适合

Guru**** 2578945 points
Other Parts Discussed in Thread: TMS320F28069

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/897904/ccs-tms320f28069-program-will-not-fit-into

器件型号:TMS320F28069

工具/软件:Code Composer Studio

大家好、

我使用 TMS320F28069已经有几年了(非常高兴)!!

当我开始时、我使用了"非对称 PWM"示例、并更改了 Main.c.

现在、我的代码行号会增加、并且"程序将无法放入"错误代码库。

我知道问题出在内存分配(F2806x_FLASH_AsymmetricPWM.CMD 文件)中、

但我不知道如何修改它。

请有人可以帮助我吗??

非常感谢

Nicola

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

    您好!

    您可能需要更新链接器 cmd 文件以增加文本段的大小。

    有关更多详细信息、请参阅以下链接: https://processors.wiki.ti.com/index.php/C28x_Compiler_-_Understanding_Linking#Q:_In_the_linker_command_file.2C_I_combine_contiguous_SARAM_blocks_into_one_section.3F

    谢谢

    Vasudha

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

    尊敬的 Vasudha:

    感谢您的回复、

    我已经研究了第0页内存分配、并且我了解(也许)  从0x3F0000到  0x3F4000的内存是空的。

    因此、我更改了一行(以黄色突出显示)、并且我也增加了闪存存储器分配和长度。

    我是对的吗?  

    谢谢你

    ============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ *
    /*用于从闪存运行的用户特定链接器命令文件*/
    ============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ *
    /*文件:F2806X_FLASH_AsymmetricPWM.CMD
    /**//
    /*说明:链接器命令文件、用于目标为运行的用户自定义段*
    /*来自闪存。 *
    /**//
    /*目标:TMS320F2806x *
    /**//
    /*版本:1.0 */
    /**//
    /*------------------ *
    //版权所有德州仪器Copyright2010 */
    /*------------------ *
    /*修订历史记录:*/
    /*------------------ *
    /*日期|说明*/
    /*------------------ *
    /* 01/11/11|版本1.0 */
    /*------------------ *

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

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

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

    可以是连续的 SARAM 存储器块或闪存扇区
    组合在一起以创建更大的存储器块。
    *

    存储器

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

    BOOT_RSVD:origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
    程序:origin = 0x008000、length = 0x000C00

    OTP:origin = 0x3D7800,length = 0x000400 //片上 OTP */
    FLASHH:origin = 0x3D8000,length = 0x004000 //片上闪存*/
    FLASHG:origin = 0x3DC000、length = 0x004000 //片上闪存*/
    FLASHF:origin = 0x3E0000,length = 0x004000 //片上闪存*/
    FLASHE:origin = 0x3E4000、length = 0x004000 //片上闪存*/
    FLASHD:origin = 0x3E8000、length = 0x004000 //片上闪存*/
    FLASHC:origin = 0x3EC000,length = 0x004000 //片上闪存*/
    // FLASHA:origin = 0x3F4000,length = 0x003F80 //片上闪存*/
    FLASHA:origin = 0x3F0000,length = 0x007F80 //片上闪存*/   //我已更改此行以增加内存分配
    csm_RSVD:origin = 0x3F7F80,length = 0x000076 // FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 *
    begin:origin = 0x3F7FF6,length = 0x000002/* FLASHA 的一部分。 用于"引导至闪存"引导加载程序模式。 *
    CSM_PWL:origin = 0x3F7FF8,length = 0x000008 // FLASHA 的一部分。 FLASHA 中的 CSM 密码位置*/

    FPUTABLES:origin = 0x3FD860,length = 0x0006A0 //引导 ROM 中的 FPU 表*/
    IQTABLES:origin = 0x3FDF00,length = 0x000B50 //引导 ROM 中的 IQMath 表*
    IQTABLES2:origin = 0x3FEA50,length = 0x00008C //引导 ROM 中的 IQMath 表*
    IQTABLES3:origin = 0x3FEADC,length = 0x0000AA /*引导 ROM 中的 IQMath 表*/

    BootROM:origin = 0x3FF3B0,length = 0x000C10 // Boot ROM */
    复位:origin = 0x3FFFC0,length = 0x000002 //引导 ROM 的部分*/
    向量:origin = 0x3FFFC2,length = 0x00003E //引导 ROM 的部分*/

    第1页:

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

    RAMM0:origin = 0x000050、length = 0x0003B0 //片上 RAM 块 M0 *
    RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
    DataRAM:origin = 0x008C00,length = 0x001400
    RAML4:origin = 0x00A000、length = 0x002000 //片上 RAM 块 L4 */
    RAML5:origin = 0x00C000、length = 0x002000 //片上 RAM 块 L5 */
    RAML6:origin = 0x00E000、length = 0x002000 //片上 RAM 块 L6 */
    RAML7:origin = 0x010000、length = 0x002000 //片上 RAM 块 L7 */
    RAML8:origin = 0x012000,length = 0x002000 //片上 RAM 块 L8 */
    FLASHB:origin = 0x3F4000,length = 0x002000



    部分

    /*分配计划领域:*/
    .cinit:> FLASHA,page = 0
    .pinit:> FLASHA,page = 0
    .text:> FLASHA,page = 0
    .sect "SINTBL":> FLASHA,PAGE = 0

    codestart:> begin page = 0
    ramfuncs:load = FLASHA,
    运行=程序、
    load_start (_RamfuncsLoadStart)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    PAGE = 0

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

    /*分配未初始化的数据段:*/
    .stack:>RAMM0,page = 1.
    .ebss:> DataRAM,page = 1.
    .esysmem:> DataRAM,page = 1.

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

    /*分配 IQ 数学区域:*/
    IQMath:> FLASHA page = 0 /*数学代码*/
    IQmathTables:> IQTABLES page = 0,type = NoLoad /* ROM 中的数学表*/

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


    IQMath.lib (IQmathTablesRam)


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


    IQMath.lib (IQmathTablesRam)


    *

    .reset:> reset,page = 0,type = DSECT
    VECTORS:> VECTORS PAGE = 0,TYPE = DSECT




    部分

    net_termins:> DataRAM、page = 1.

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

    早上好、

     请有人回答我2020年4月17日上午10:27的问题吗?

    非常感谢

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

    您好!

    我认为您已将 FlashA 和 FlashB 组合到单个部分、但需要从第1页的数据存储器中删除下面的行。

    [引用用户="Nicola Giuffre']FLASHB:origin = 0x3F4000、length = 0x002000

    谢谢

    Vasudha

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

    尊敬的 Vasudha:

    非常感谢您的回复、这让我能够继续进行 FW 开发。

    但我还有一个疑问、为什么必须移除闪存 B 行?

    没有 Page0和 Page1 不同的区域位置?

    在非对称 PWM 示例中、有:

     

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

    BOOT_RSVD:origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
    程序:origin = 0x008000、length = 0x000C00

    OTP:origin = 0x3D7800,length = 0x000400 //片上 OTP */
    FLASHH:origin = 0x3D8000,length = 0x004000 //片上闪存*/
    FLASHG:origin = 0x3DC000、length = 0x004000 //片上闪存*/
    FLASHF:origin = 0x3E0000,length = 0x004000 //片上闪存*/
    FLASHE:origin = 0x3E4000、length = 0x004000 //片上闪存*/
    FLASHD:origin = 0x3E8000、length = 0x004000 //片上闪存*/
    FLASHC:origin = 0x3EC000,length = 0x004000 //片上闪存*/
    FLASHA:origin = 0x3F4000,length = 0x003F80 //片上闪存*/

    csm_RSVD:origin = 0x3F7F80,length = 0x000076 // FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 *
    begin:origin = 0x3F7FF6,length = 0x000002/* FLASHA 的一部分。 用于"引导至闪存"引导加载程序模式。 *
    CSM_PWL:origin = 0x3F7FF8,length = 0x000008 // FLASHA 的一部分。 FLASHA 中的 CSM 密码位置*/

    FPUTABLES:origin = 0x3FD860,length = 0x0006A0 //引导 ROM 中的 FPU 表*/
    IQTABLES:origin = 0x3FDF00,length = 0x000B50 //引导 ROM 中的 IQMath 表*
    IQTABLES2:origin = 0x3FEA50,length = 0x00008C //引导 ROM 中的 IQMath 表*
    IQTABLES3:origin = 0x3FEADC,length = 0x0000AA /*引导 ROM 中的 IQMath 表*/

    BootROM:origin = 0x3FF3B0,length = 0x000C10 // Boot ROM */
    复位:origin = 0x3FFFC0,length = 0x000002 //引导 ROM 的部分*/
    向量:origin = 0x3FFFC2,length = 0x00003E //引导 ROM 的部分*/

    第1页:

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

    RAMM0:origin = 0x000050、length = 0x0003B0 //片上 RAM 块 M0 *
    RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
    DataRAM:origin = 0x008C00,length = 0x001400
    RAML4:origin = 0x00A000、length = 0x002000 //片上 RAM 块 L4 */
    RAML5:origin = 0x00C000、length = 0x002000 //片上 RAM 块 L5 */
    RAML6:origin = 0x00E000、length = 0x002000 //片上 RAM 块 L6 */
    RAML7:origin = 0x010000、length = 0x002000 //片上 RAM 块 L7 */
    RAML8:origin = 0x012000,length = 0x002000 //片上 RAM 块 L8 */
    FLASHB:origin = 0x3F4000,length = 0x002000

    FLASHA 和 FLASHB 同时声明且具有相同的原点。

    很抱歉、所有这些问题都需要我正确理解

    这一点。

    非常感谢

    Nicola Giuffrè í a

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

    尊敬的 Vasudha:

    请您回答我的最后一个问题吗?

    谢谢

    Nicola

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

    您好!

    器件中有不同的闪存扇区、它们具有预定义的大小、如下图所示。

    您已经将闪存 A 和闪存 B 区域组合成一个区域、因为它们是连续区域。 但是、在链接器命令文件中不可能出现区域重叠。 因此、需要从数据页中删除闪存 B 存储器区域。 可能会有助于将更新后的存储器部分重命名为 FlashA_B、以便更好地理解。

    // FLASHA:origin = 0x3F4000,length = 0x003F80 //片上闪存*//
    FLASHB:origin = 0x3F0000,length = 0x004000
    FLASHA_B:origin = 0x3F0000,length = 0x007F80 //片上闪存* //我已更改此行以增加内存分配 

    谢谢

    Vasudha