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.

[参考译文] tms320f28379d 中存在内存分配问题

Guru**** 2609285 points
Other Parts Discussed in Thread: TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1011914/memory-allocation-problem-in-tms320f28379d

主题中讨论的其他器件:TMS320F28379D

您好,

tms320f28379d 中的内存分配问题

您能不能建议 我在下面的内存分配页面中进行哪些更改

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
存储器

第0页:/* 程序内存*/
         /*内存(RAM/FLASH)块可移动到 Page1进行数据分配*/
         /* begin 用于"引导至闪存"引导加载程序模式  */

  开始             :origin = 0x080000,length = 0x000002
  RAMM0             :origin = 0x000122、length = 0x0002DE
  RAMD0             :origin = 0x00B000、length = 0x000800
  RAMLS0            :origin = 0x008000、length = 0x000800
  RAMLS1            :origin = 0x008800,length = 0x000800
  RAMLS2           :origin = 0x009000,length = 0x000800
  RAMLS3           :origin = 0x009800,length = 0x000800
  RAMGS14         :origin = 0x01A000,length = 0x001000
  RAMGS15         :origin = 0x01B000,length = 0x001000
  复位             :origin = 0x3FFFC0,length = 0x000002
  
  /*闪存扇区*/
  FLASHA          :origin = 0x080002,length = 0x001FFE   /*片上闪存*/
  FLASHB          :origin = 0x082000、length = 0x002000   //片上闪存*
  FLASHC          :origin = 0x084000,length = 0x002000   //片上闪存*/
  FLASHD          :origin = 0x086000、length = 0x002000   //片上闪存*/
  FLASHE          :origin = 0x088000、length = 0x008000   //片上闪存*/
  FLASHF          :origin = 0x090000,length = 0x008000   //片上闪存*
  FLASHG          :origin = 0x098000、length = 0x008000   //片上闪存*/
  FLASHH          :origin = 0x0A0000,length = 0x008000   //片上闪存*/
  FLASHI          :origin = 0x0A8000、length = 0x008000   //片上闪存*/
  FLASHJ          :origin = 0x0B0000,length = 0x008000   //片上闪存*/
  FLASHK          :origin = 0x0B8000、length = 0x002000   //片上闪存*/
  FLASHL          :origin = 0x0BA000、length = 0x002000   //片上闪存*/
  FLASHM          :origin = 0x0BC000、length = 0x002000   //片上闪存*/
  FLASHN          :origin = 0x0BE000、length = 0x002000   //片上闪存*/   

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

  BOOT_RSVD      :origin = 0x000002,length = 0x000120    // M0的一部分,引导 ROM 将此用于栈*/
  RAMM1          :origin = 0x000400、length = 0x000400    //片上 RAM 块 M1 *
  RAMD1          :origin = 0x00B800,length = 0x000800

  RAMLS4     :origin = 0x00A000,length = 0x000800
  RAMLS5     :origin = 0x00A800,length = 0x000800

  RAMGS0     :origin = 0x00C000、length = 0x001000
  RAMGS1     :origin = 0x00D000、length = 0x001000
  RAMGS2     :origin = 0x00E000、length = 0x001000
  RAMGS3     :origin = 0x00F000、length = 0x001000
  RAMGS4     :origin = 0x010000,length = 0x001000
  RAMGS5     :origin = 0x011000,length = 0x001000
  RAMGS6     :origin = 0x012000,length = 0x001000
  RAMGS7     :origin = 0x013000,length = 0x001000
  RAMGS8     :origin = 0x014000,length = 0x001000
  RAMGS9     :origin = 0x015000,length = 0x001000
  RAMGS10    :origin = 0x016000,length = 0x001000
  RAMGS11    :origin = 0x017000,length = 0x001000
  RAMGS12    :origin = 0x018000,length = 0x001000
  RAMGS13    :origin = 0x019000,length = 0x001000

  
  CPU2TOCPU1RAM  :origin = 0x03F800,length = 0x000400
  CPU1TOCPU2RAM  :origin = 0x03FC00,length = 0x000400



部分

  /*分配计划领域:*/
  .cinit             :> FLASHB     PAGE = 0,ALIGN (4)
  .pinit             :> FLASHB,    PAGE = 0,ALIGN (4)
  .text              :>> FLASHB | FLASHC | FLASHD | FLASHE     PAGE = 0,ALIG(4)
  codestart          :> begin      page = 0,align (4)

#ifdef __TI_Compiler_version__
  #if __TI_Compiler_version__>=15009000
   .TI.ramfunc:{}负载= FLASHD,
                        RUN = RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3、
                        load_start (_RamfuncsLoadStart)、
                        load_size (_RamfuncsLoadSize)、
                        load_end (_RamfuncsLoadEnd)、
                        run_start (_RamfuncsRunStart)、
                        run_size (_RamfuncsRunSize)、
                        run_end (_RamfuncsRunEnd)、
                        PAGE = 0、ALIGN (4)
  其他
  ramfuncs           :load = FLASHD,
                        RUN = RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3、
                        load_start (_RamfuncsLoadStart)、
                        load_size (_RamfuncsLoadSize)、
                        load_end (_RamfuncsLoadEnd)、
                        run_start (_RamfuncsRunStart)、
                        run_size (_RamfuncsRunSize)、
                        run_end (_RamfuncsRunEnd)、
                        PAGE = 0、ALIGN (4)   
  #endif
#endif
                  
  /*分配未初始化的数据段:*/
  .stack             :>RAMM1       page = 1.
  .ebss              :>> RAMLS4 | RAMLS5 | RAMGS0 | RAMGS1      PAGE = 1.
  .esysmem           :> RAMLS5      PAGE = 1.

  /*初始化段进入闪存*/
  econst            :>> FLASHF | FLASHG | FLASHH     PAGE = 0,ALIGN (4)
  .switch            :> FLASHB     PAGE = 0,ALIGN (4)
  
  .reset             :> reset,    page = 0,type = DSECT //未使用,*/

  filter_RegsFile    :> RAMGS0,     PAGE = 1

/*  SHARERAMGS0      :>RAMGS0,      PAGE = 1
  SHARERAMGS1      :>RAMGS1,      PAGE = 1.
  SHARERAMGS2      :>RAMGS2,      PAGE = 1.
  SHARERAMGS3      :>RAMGS3,      PAGE = 1*/
  SHARERAMGS5      :> RAMGS5,      PAGE = 1
  SHARERAMGS6      :> RAMGS6,      PAGE = 1
  
  /*使用 IPC API 驱动程序时需要以下部分定义*/
   组:> CPU1TOCPU2RAM,PAGE = 1
   {
       PUTBUFFER
       PUTWRITEIDX
       GETREADIDX
   }
   
   组:> CPU2TOCPU1RAM,PAGE = 1
   {
       GETBUFFER:   TYPE = DSECT
       GETWRITEIDX: TYPE = DSECT
       PUTREADIDX:  TYPE = DSECT
   }  
   


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

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

我尝试创建 大小超过1024的数组、然后它显示说明#10099-D 程序将不适合   2837x_flash_lnk_cpu1.cmd   /EV_BMS_CPU1   行100   C/C++问题


我的数组是

UNION smuData{

   unsigned long ulData[600];
   unsigned int uiData[1200];  

   union cmuData cmuData[15];   
};
extern union smuData   smuData[4];

和工作代码阵列

UNION smuData{

   unsigned long ulData[480];  
   unsigned int uiData[960];  

   union cmuData cmuData[12];   
};
extern union smuData   smuData[4];

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

    Baskar、

    尝试增大 ebss 或 esysmem 的大小(无论它是在抱怨什么-也许是 ebss)-请检查第100行。

    您可以为该段使用多个 RAM 块、如您引用的链接器中所示。  

    示例:    .ebss         :>> RAMLS4 | RAMLS5 | RAMGS0 | RAMGS1    PAGE = 1.

    谢谢、此致、
    Vamsi