11967|16

667

帖子

3

TA的资源

版主

楼主
 

请问代码大小超过.text段分配的空间如何解决? [复制链接]

编写程序出现了如下的错误提示:
Description Resource Path Location Type
#10099-D program will not fit into available memory. load placement with alignment/blocking fails for section "ramfuncs" size 0x4d page 0. Available memory ranges: F28027.cmd /Example_28027_HRPWM_Menu line 119 C/C++ Problem
请问如何解决?

最新回复

这个我没有尝试过,应该是可以用的,亦可以尝试一下。试试就知道了。  详情 回复 发表于 2013-8-18 10:50
 
点赞 关注(1)

回复
举报

348

帖子

16

TA的资源

纯净的硅(高级)

沙发
 
一种方法是优化你的代码,减少常数的使用量,另一种方法是增加段的空间,修改length的值。

点评

MEMORY { PAGE 0: /* Program Memory */ /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */ PRAML0 : origin = 0x008000, length = 0x000800 /* on  详情 回复 发表于 2013-8-17 19:33
感谢解答! 修改代码可能不大现实了,还要加入一些功能。请问如何修改段的空间,修改length的值? 如何看自己的代码大小?  详情 回复 发表于 2013-8-17 19:32
 
 

回复

667

帖子

3

TA的资源

版主

板凳
 

回复 沙发newofcortexm3 的帖子

感谢解答!
修改代码可能不大现实了,还要加入一些功能。请问如何修改段的空间,修改length的值?
如何看自己的代码大小?
 
 
 

回复

667

帖子

3

TA的资源

版主

4
 

回复 沙发newofcortexm3 的帖子

  1. MEMORY
  2. {
  3. PAGE 0:    /* Program Memory */
  4.            /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */

  5.    PRAML0      : origin = 0x008000, length = 0x000800     /* on-chip RAM block L0 */
  6.    OTP         : origin = 0x3D7800, length = 0x000400     /* on-chip OTP */
  7.    FLASHD      : origin = 0x3F0000, length = 0x002000     /* on-chip FLASH */
  8.    FLASHC      : origin = 0x3F2000, length = 0x002000     /* on-chip FLASH */
  9.    FLASHA      : origin = 0x3F6000, length = 0x001F80     /* on-chip FLASH */
  10.    CSM_RSVD    : origin = 0x3F7F80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
  11.    BEGIN       : origin = 0x3F7FF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
  12.    CSM_PWL_P0  : origin = 0x3F7FF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */

  13.    IQTABLES    : origin = 0x3FE000, length = 0x000B50     /* IQ Math Tables in Boot ROM */
  14.    IQTABLES2   : origin = 0x3FEB50, length = 0x00008C     /* IQ Math Tables in Boot ROM */
  15.    IQTABLES3   : origin = 0x3FEBDC, length = 0x0000AA          /* IQ Math Tables in Boot ROM */

  16.    ROM         : origin = 0x3FF27C, length = 0x000D44     /* Boot ROM */
  17.    RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */
  18.    VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */

  19. PAGE 1 :   /* Data Memory */
  20.            /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
  21.            /* Registers remain on PAGE1                                                  */

  22.    BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */
  23.    RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */
  24.    RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
  25.    DRAML0      : origin = 0x008800, length = 0x000800     /* on-chip RAM block L0 */
  26.    FLASHB      : origin = 0x3F4000, length = 0x002000     /* on-chip FLASH */
  27. }

  28. /* Allocate sections to memory blocks.
  29.    Note:
  30.          codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code
  31.                    execution when booting to flash
  32.          ramfuncs  user defined section to store functions that will be copied from Flash into RAM
  33. */

  34. SECTIONS
  35. {

  36.    /* Allocate program areas: */
  37.    .cinit              : > FLASHA       PAGE = 0
  38.    .pinit              : > FLASHA,      PAGE = 0
  39.    .text               : > FLASHA       PAGE = 0
  40.    codestart           : > BEGIN        PAGE = 0
  41.    ramfuncs            : LOAD = FLASHA,
  42.                          RUN = PRAML0,
  43.                          LOAD_START(_RamfuncsLoadStart),
  44.                          LOAD_END(_RamfuncsLoadEnd),
  45.                          RUN_START(_RamfuncsRunStart),
  46.                          PAGE = 0

  47.    csmpasswds          : > CSM_PWL_P0   PAGE = 0
  48.    csm_rsvd            : > CSM_RSVD     PAGE = 0

  49.    /* Allocate uninitalized data sections: */
  50.    .stack              : > RAMM0        PAGE = 1
  51.    .ebss               : > DRAML0       PAGE = 1
  52.    .esysmem            : > DRAML0       PAGE = 1

  53.    /* Initalized sections go in Flash */
  54.    /* For SDFlash to program these, they must be allocated to page 0 */
  55.    .econst             : > FLASHA       PAGE = 0
  56.    .switch             : > FLASHA       PAGE = 0

  57.    /* Allocate IQ math areas: */
  58.    IQmath              : > FLASHA       PAGE = 0            /* Math Code */
  59.    IQmathTables        : > IQTABLES,    PAGE = 0, TYPE = NOLOAD

  60.    /* Uncomment the section below if calling the IQNexp() or IQexp()
  61.       functions from the IQMath.lib library in order to utilize the
  62.       relevant IQ Math table in Boot ROM (This saves space and Boot ROM
  63.       is 1 wait-state). If this section is not uncommented, IQmathTables2
  64.       will be loaded into other memory (SARAM, Flash, etc.) and will take
  65.       up space, but 0 wait-state is possible.
  66.    */
  67.    /*
  68.    IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD
  69.    {

  70.               IQmath.lib (IQmathTablesRam)

  71.    }
  72.    */
  73.    /* Uncomment the section below if calling the IQNasin() or IQasin()
  74.       functions from the IQMath.lib library in order to utilize the
  75.       relevant IQ Math table in Boot ROM (This saves space and Boot ROM
  76.       is 1 wait-state). If this section is not uncommented, IQmathTables2
  77.       will be loaded into other memory (SARAM, Flash, etc.) and will take
  78.       up space, but 0 wait-state is possible.
  79.    */
  80.    /*
  81.    IQmathTables3    : > IQTABLES3, PAGE = 0, TYPE = NOLOAD
  82.    {

  83.               IQmath.lib (IQmathTablesRam)

  84.    }
  85.    */

  86.    /* .reset is a standard section used by the compiler.  It contains the */
  87.    /* the address of the start of _c_int00 for C Code.   /*
  88.    /* When using the boot ROM this section and the CPU vector */
  89.    /* table is not needed.  Thus the default type is set here to  */
  90.    /* DSECT  */
  91.    .reset              : > RESET,      PAGE = 0, TYPE = DSECT
  92.    vectors             : > VECTORS     PAGE = 0, TYPE = DSECT

  93. }
复制代码
 
 
 

回复

348

帖子

16

TA的资源

纯净的硅(高级)

5
 
工程编译完之后会生成.map文件(Debug模式,就在Debug文件夹下),这个文件里面囊括了所有段的使用情况。

点评

这样行不行?MEMORY { PAGE 0: /* Program Memory */ /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */ PRAML0 : origin = 0x008000, length = 0x0008  详情 回复 发表于 2013-8-17 20:09
 
 
 

回复

348

帖子

16

TA的资源

纯净的硅(高级)

6
 
如果确实是FLASHA空间不够的话,
第一、你可以把FLASHD和FLASHC的空间全部并到FLASHA中,因为在SECTIONS中没有段是分配到FLASHD和FLASHC中的。
第二、把某些段指向到FLASHD和FLASHC中。

点评

我将FLASHABCD的地址改掉,就是origin = 0x3F0000, length = 0x002000这些内容,将abc全指向a,原来d的位置给b。 不过,原来b的空间是用来做什么的?  详情 回复 发表于 2013-8-17 20:10
 
 
 

回复

667

帖子

3

TA的资源

版主

7
 
非常感谢!
可是A和CD隔着一个B,地址并不是相连的。。。
可否告知一下如何修改这个文件,新手有些不好下手。。。
 
 
 

回复

667

帖子

3

TA的资源

版主

8
 

回复 5楼newofcortexm3 的帖子

这样行不行?
  1. MEMORY
  2. {
  3. PAGE 0:    /* Program Memory */
  4.            /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */

  5.    PRAML0      : origin = 0x008000, length = 0x000800     /* on-chip RAM block L0 */
  6.    OTP         : origin = 0x3D7800, length = 0x000400     /* on-chip OTP */
  7.    FLASHD      : origin = 0x3F0000, length = 0x002000     /* on-chip FLASH */
  8.    FLASHC      : origin = 0x3F2000, length = 0x002000     /* on-chip FLASH */
  9.    FLASHA      : origin = 0x3F6000, length = 0x001F80     /* on-chip FLASH */
  10.    CSM_RSVD    : origin = 0x3F7F80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
  11.    BEGIN       : origin = 0x3F7FF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
  12.    CSM_PWL_P0  : origin = 0x3F7FF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */

  13.    IQTABLES    : origin = 0x3FE000, length = 0x000B50     /* IQ Math Tables in Boot ROM */
  14.    IQTABLES2   : origin = 0x3FEB50, length = 0x00008C     /* IQ Math Tables in Boot ROM */
  15.    IQTABLES3   : origin = 0x3FEBDC, length = 0x0000AA          /* IQ Math Tables in Boot ROM */

  16.    ROM         : origin = 0x3FF27C, length = 0x000D44     /* Boot ROM */
  17.    RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */
  18.    VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */

  19. PAGE 1 :   /* Data Memory */
  20.            /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
  21.            /* Registers remain on PAGE1                                                  */

  22.    BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */
  23.    RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */
  24.    RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
  25.    DRAML0      : origin = 0x008800, length = 0x000800     /* on-chip RAM block L0 */
  26.    FLASHB      : origin = 0x3F4000, length = 0x002000     /* on-chip FLASH */
  27. }

  28. /* Allocate sections to memory blocks.
  29.    Note:
  30.          codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code
  31.                    execution when booting to flash
  32.          ramfuncs  user defined section to store functions that will be copied from Flash into RAM
  33. */
复制代码
 
 
 

回复

667

帖子

3

TA的资源

版主

9
 

回复 6楼newofcortexm3 的帖子

我将FLASHABCD的地址改掉,就是origin = 0x3F0000, length = 0x002000这些内容,将abc全指向a,原来d的位置给b。
不过,原来b的空间是用来做什么的?

点评

可以更改.cmd文件,将.text映射到FLASHC或者FLASHD中,我使用的时候,由于工程较大,则会将FLASHC与FLASHD连在一起使用。  详情 回复 发表于 2013-8-17 22:27
 
 
 

回复

348

帖子

16

TA的资源

纯净的硅(高级)

10
 
如果你不放心0x3F4000——0x3F6000的空间的话,那你可以把FLASHC和FLASHD合并,即origin = 0x3F0000, length = 0x004000
你可以参看手册TMS320C28x Assembly Language Tools User's Guide v6.1.pdf(spru513)第七章,见附件

spru513- TMS320C28x Assembly Language Tools User's Guide v6.1.pdf

3.11 MB, 下载次数: 20

 
 
 

回复

667

帖子

3

TA的资源

版主

11
 
回答很专业。不过我还是想问一下你说的A和CD合并如何做到?因为他们中间有断开的B地址。
不知道我说的行不行,我将原来ABC的地址全给A,将原来D的地址给B,这样可以么?
 
 
 

回复

348

帖子

16

TA的资源

纯净的硅(高级)

12
 
那个没指定的0x2000的空间是可用的。如果全部分给FLASHA的话,那么origin=0x30000,length=0x7F80,这样你就不必改动SECTIONS的代码了。
当然你也可以按你说的试,至于结果如何,你只有改完编译才知道。
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

13
 

回复 9楼nemo1991 的帖子

可以更改.cmd文件,将.text映射到FLASHC或者FLASHD中,我使用的时候,由于工程较大,则会将FLASHC与FLASHD连在一起使用。

点评

能否叙述一下详细过程或者将修改后的代码贴出来看看。。:kiss:  详情 回复 发表于 2013-8-18 10:31
 
 
 

回复

667

帖子

3

TA的资源

版主

14
 

回复 13楼liuming759 的帖子

能否叙述一下详细过程或者将修改后的代码贴出来看看。。

点评

//FLASHD : origin = 0x3F0000, length = 0x002000 /* on-chip FLASH */ //FLASHC : origin = 0x3F2000, length = 0x002000 /* on-chip FLASH */ FLASHCD : origin = 0x3F2000, len  详情 回复 发表于 2013-8-18 10:36
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

15
 

回复 14楼nemo1991 的帖子

//FLASHD      : origin = 0x3F0000, length = 0x002000     /* on-chip FLASH */
   //FLASHC      : origin = 0x3F2000, length = 0x002000     /* on-chip FLASH */
   FLASHCD      : origin = 0x3F2000, length = 0x004000     /* on-chip FLASH */


SECTIONS
{

   /* Allocate program areas: */
   .cinit              : > FLASHA       PAGE = 0   /*C语言中的变量初值与常量,已经初始化则放置在FLASH中*/
   .pinit              : > FLASHA,      PAGE = 0
   .text               : > FLASHCD       PAGE = 0  /*C语言中的代码段,已经初始化则放置在FLASH中*/

点评

好像flashB没用过,可以用吗?  详情 回复 发表于 2013-8-18 10:39
 
 
 

回复

667

帖子

3

TA的资源

版主

16
 

回复 15楼liuming759 的帖子

好像flashB没用过,可以用吗?

点评

这个我没有尝试过,应该是可以用的,亦可以尝试一下。试试就知道了。  详情 回复 发表于 2013-8-18 10:50
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

17
 

回复 16楼nemo1991 的帖子

这个我没有尝试过,应该是可以用的,亦可以尝试一下。试试就知道了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表