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:内存不足问题。

Guru**** 2587365 points
Other Parts Discussed in Thread: TMS320F28335

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1204785/tms320f28335-out-of-memory-issue

器件型号:TMS320F28335

大家好!

我是 TMS320F28335用户。 我需要更多内存。
由于".ebss"数据过多、RAM 块 L0 ~ L7已集成、但还不够。
目前、95%的 RAM 区域正在使用、还有一些变量我尚未声明。
在本例中、是否有可以替代的区域? 请帮我。

例如、 SRAM_DATA 或 ZONE7? (未在使用中)

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

    您好!

    您能否向我提供链接器命令文件(.cmd)的内容、以便我能够了解内存的分配情况? 您是否知道项目总共需要使用多少内存?

    此致、

    Omer Amir

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

    MEMORY {
    PAGE 0:     /* Program Memory */
                /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
       //RAML0       : origin = 0x008000, length = 0x001000     /* on-chip RAM block L0 */
       //RAML1       : origin = 0x009000, length = 0x001000     /* on-chip RAM block L1 */
       //RAML2       : origin = 0x00A000, length = 0x001000     /* on-chip RAM block L2 */
       //RAML3       : origin = 0x00B000, length = 0x001000     /* on-chip RAM block L3 */
       //RAML4       : origin = 0x00C000, length = 0x001000     /* on-chip RAM block L4 */
       //RAML5       : origin = 0x00D000, length = 0x001000     /* on-chip RAM block L5 */
       //RAML6       : origin = 0x00E000, length = 0x001000     /* on-chip RAM block L6 */
       //RAML7       : origin = 0x00F000, length = 0x001000     /* on-chip RAM block L7 */
       RAML        : origin = 0x008000, length = 0x008000     /* on-chip RAM block L0-L7 */
       
       FLASHH      : origin = 0x300000, length = 0x008000     /* on-chip FLASH */
       FLASHG      : origin = 0x308000, length = 0x008000     /* on-chip FLASH */
       FLASHF      : origin = 0x310000, length = 0x008000     /* on-chip FLASH */
       FLASHE      : origin = 0x318000, length = 0x008000     /* on-chip FLASH */
       FLASHD      : origin = 0x320000, length = 0x008000     /* on-chip FLASH */
       FLASHC      : origin = 0x328000, length = 0x008000     /* on-chip FLASH */
       FLASHB      : origin = 0x330000, length = 0x008000     /* on-chip FLASH */
       FLASHA      : origin = 0x338000, length = 0x007F80     /* on-chip FLASH */
       CSM_RSVD    : origin = 0x33FF80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
       
       BEGIN       : origin = 0x33FFF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
       
       CSM_PWL     : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */
       OTP         : origin = 0x380400, length = 0x000400     /* on-chip OTP */
       ADC_CAL     : origin = 0x380080, length = 0x000009     /* ADC_cal function in Reserved memory */
       
       IQTABLES    : origin = 0x3FE000, length = 0x000b50     /* IQ Math Tables in Boot ROM */
       IQTABLES2   : origin = 0x3FEB50, length = 0x00008c     /* IQ Math Tables in Boot ROM */
       FPUTABLES   : origin = 0x3FEBDC, length = 0x0006A0     /* FPU Tables in Boot ROM */
       ROM         : origin = 0x3FF27C, length = 0x000D44     /* Boot ROM */
       RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */
       VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */
       
       ZONE7A      : origin = 0x0200000, length = 0x00FC00    /* XINTF zone 7 - program space */
       ZONE7B      : origin = 0x20FC00, length = 0x000400     /* XINTF zone 7 - data space */
       
    PAGE 1 :    /* Data Memory */
                /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
                /* Registers remain on PAGE1                                                  */
       BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */
       RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */
       RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
       
       ZONE0       : origin = 0x004000, length = 0x001000     /* XINTF zone 0 */
       ZONE6       : origin = 0x100000, length = 0x100000     /* XINTF zone 6 */
    }
    
    /* Allocate sections to memory blocks.
       Note: codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code
                       execution when booting to flash
             ramfuncs  user defined section to store functions that will be copied from Flash into RAM
    */
    
    SECTIONS {
    
       /* Allocate program areas: */
       .cinit              : > FLASHA      PAGE = 0
       .pinit              : > FLASHA,     PAGE = 0
       .text               : > FLASHA      PAGE = 0
       codestart           : > BEGIN       PAGE = 0                     
       ramfuncs            : LOAD = FLASHD, RUN = RAML, 
                             LOAD_START(_RamfuncsLoadStart),
                             LOAD_END(_RamfuncsLoadEnd),
                             RUN_START(_RamfuncsRunStart),
                             PAGE = 0
       csmpasswds          : > CSM_PWL     PAGE = 0
       csm_rsvd            : > CSM_RSVD    PAGE = 0
       
       /* Allocate uninitalized data sections: */
       .stack              : > RAMM0       PAGE = 1
       .ebss               : > RAML       PAGE = 0
       .esysmem            : > RAMM1       PAGE = 1
       
       /* Initalized sections go in Flash */
       /* For SDFlash to program these, they must be allocated to page 0 */
       .econst             : > FLASHA      PAGE = 0
       .switch             : > FLASHA      PAGE = 0   
       
       /* Allocate IQ math areas: */
       IQmath              : > FLASHC      PAGE = 0                  /* Math Code */
       IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD 
       
       /* Uncomment the section below if calling the IQNexp() or IQexp()
          functions from the IQMath.lib library in order to utilize the 
          relevant IQ Math table in Boot ROM (This saves space and Boot ROM
          is 1 wait-state). If this section is not uncommented, IQmathTables2
          will be loaded into other memory (SARAM, Flash, etc.) and will take
          up space, but 0 wait-state is possible.
       */
       
       /*
       IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD 
       {
                  IQmath.lib<IQNexpTable.obj> (IQmathTablesRam)
       }
       */
       
       FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
       
       /* Allocate DMA-accessible RAM sections: */
       DMARAML4         : > RAML,     PAGE = 0
       DMARAML5         : > RAML,     PAGE = 0
       DMARAML6         : > RAML,     PAGE = 0
       DMARAML7         : > RAML,     PAGE = 0
       
       /* Allocate 0x400 of XINTF Zone 7 to storing data */
       ZONE7DATA        : > ZONE7B,    PAGE = 0
       
       /* .reset is a standard section used by the compiler.  It contains the */
       /* the address of the start of _c_int00 for C Code.   /*
       /* When using the boot ROM this section and the CPU vector */
       /* table is not needed.  Thus the default type is set here to  */
       /* DSECT  */ 
       .reset              : > RESET,      PAGE = 0, TYPE = DSECT
       vectors             : > VECTORS     PAGE = 0, TYPE = DSECT
       
       /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
       .adc_cal     : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD
    }
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

    你好

    我上传我的"28335.cmd"文件。

    目前、在 cmd 文件中、RAML0 - RAML7区域已集成并用作 RAML。
    (95%的 RAML 存储器区域正在使用)
    我想使用大约120%的 RAML 面积。

    我的产品使用的是 ZONE0、ZONE6和 ZONE7、未使用。

    在这种情况下、是否有办法可以通过在不更改 CPU 或更改 SRAM 等其他 H/W 的情况下修改 cmd 文件来解决它?

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

    器件型号:TMS320F28335

    大家好!

    我是 TMS320F28335用户。 我需要更多内存。
    由于".ebss"数据过多、RAM 块 L0 ~ L7已集成、但还不够。
    目前、95%的 RAM 区域正在使用、还有一些变量我尚未声明。
    在本例中、是否有可以替代的区域? 请帮我。

    例如、 SRAM_DATA 或 ZONE7? (未在使用中)

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

    您好!

    我们已将您的问题转发给专家。 您很快就会收到回复。

    谢谢。

    Veena

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

    您好!  

    感谢您对我的问题的真诚回答。
    已发布了两个问题、您能否回答另一侧并删除此帖子?
    我不知道如何删除这个帖子。。

    ↓这是另一个帖子。

    e2e.ti.com/.../tms320f28335-out-of-memory-issue

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

    我来关闭该主题、而不是删除。

    这是 e2e.ti.com/.../tms320f28335-out-of-memory-issue 的副本

    谢谢。

    Veena

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

    您好!

     片上可使用的 RAM 数量是有限的。  遗憾的是、如果你需要 RAML 的120%、那么 RAM 中没有这个大容量的存储器(数据表中列出的 F28335器件的 RAM 容量为34K x 16、你所要求的大约为39K x 16)。 有几个不同的解决方案:

    1.  尽可能优化内存、共享变量等
    2. 使用闪存(数据访问可能会更慢、但您将有足够的内存来存储变量;这应该也不是太大的问题、因为您已经在程序的其余部分使用闪存)
    3. 使用 F28335器件上的可用通信协议来使用某种外部存储器
    4. 使用具有更多存储器的 C2000器件

    我知道更换器件是否不切实际、但其他解决方案应该可行。 如果您希望仅使用片上 RAM、而不影响在其上存储的内容、则不可能在其上容纳更多数据。

    此致、

    Omer Amir

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

    您好,感谢您的答复。
    您的评论与我们团队先前的评论有许多相似之处。

    1.优化内存->这是一项努力、但似乎有局限性
    3.使用外部记忆->我们的硬件团队正在审查
    4.使用另一个 C2000 CPU ->我们的软件团队正在审查

    目前、4个新兴市场是最高选择、但我们正在努力解决价格问题和电路板上的空闲空间。
    然而,由于你的意见2已经成为一个新的选择,我认为有必要审查2。

    您想问的任何其他问题:
    由于我们的产品不使用 XINTF Zone7、我想问是否可以写入存储器、但不可能?

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

    您好!

    是的、我已与另一位专家确认、用户无法访问 Zone7、因为它是为 XINTF 保留的。 尝试访问它将访问外部器件、该存储器不能用作数据的附加 RAM。

    此致、

    Omer Amir

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

    您好!


    感谢您的确认。
    我将尝试 TMS320F28335闪存。
    此问题已得到解决、我认为您的答复对我很有帮助。
    如有任何疑问、我将开设新话题。

    再见