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.

[参考译文] TMS320F28069:存储器合并方法

Guru**** 2538955 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/611395/tms320f28069-memory-merge-method

器件型号:TMS320F28069

您好!

我目前正在合并存储器、如下所示(RAM 和闪存)。 这合并存储器的正确方法吗? 以这种方式合并存储器的任何缺点。

我们所做的是"增加电流块的长度、对下一个块进行注释"

存储器

第0页:/*  程序内存*/
          /*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/
  BOOT_RSVD  :origin = 0x000000,length = 0x000050    // M0的一部分,引导 ROM 将此用于栈*/
  RAML0      :origin = 0x008000、length = 0x004000    //片上 RAM 块 L0 */
/*  RAML1      :origin = 0x008800,length = 0x000400    //片上 RAM 块 L1 */
/*  RAML2      :origin = 0x008C00,length = 0x000400    //片上 RAM 块 L2 */
  OTP        :origin = 0x3D7800,length = 0x000400    //片上 OTP */

  FLASHH     :origin = 0x3D8000,length = 0x01C000    //片上闪存*/
/*  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_P0 :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 表*/

  ROM        :origin = 0x3FF3B0,length = 0x000C10    //引导 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 *
/*  RAML3      :origin = 0x009000,length = 0x001000    //片上 RAM 块 L3 */
/*  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 */
  USB_RAM    :origin = 0x040000、length = 0x000800    // USB RAM       *   
/*  FLASHB     :origin = 0x3F0000,length = 0x004000    //片上闪存*/


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


部分


  /*分配计划领域:*/
  .cinit             :> FLASHH,    PAGE = 0
  .pinit             :> FLASHH,    PAGE = 0
  .text              :> FLASHH,    PAGE = 0
  codestart          :> begin,     page = 0
  ramfuncs           :load = FLASHH,
                        运行= RAML0、
                        load_start (_RamfuncsLoadStart)、
                        load_end (_RamfuncsLoadEnd)、
                        run_start (_RamfuncsRunStart)、
                        PAGE = 0//、ALIGN (4)
                  {
                  --library=rts2800_fpu32_fast_f补 遗.lib
                  }

  csmpasswds         :>csm_PWL_P0,page = 0
  csm_rsvd           :>csm_RSVD,  page = 0

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

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

  /*分配 IQ 数学区域:*/
  IQMath             :> FLASHA,    page = 0           /*数学代码*/
  IQmathTables       :>IQTABLES,  PAGE = 0,TYPE = NOLOAD
  
  /*分配 FPU 数学区域:*/
  FPUmathTables      :> FPUTABLES, PAGE = 0,TYPE = NOLOAD
  
  DMARAML5             :>RAML5,     PAGE = 1
  DMARAML6             :>RAML6,     PAGE=1
  DMARAML7             :>RAML7,     PAGE=1
  DMARAML8             :>RAML8,     PAGE = 1   

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

此致、

Maulik Timbadiya

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我写信告诉您、C2000团队成员已被分配到此帖子、应该很快回答。

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

    Maulik、

    是的、可以将存储器的各个部分组合在一起。 这将允许代码存储在一 个存储器范围内、而不是拆分多个范围。 有关如何正确组合存储器部分的更多信息、 请参阅此页面。

    此致、

    Ozino