搜索
bottom↓
回复: 14

DSP2812代码长度超出RAM容量,有谁遇到过吗?

[复制链接]

出0入0汤圆

发表于 2013-8-10 09:06:00 | 显示全部楼层 |阅读模式
接触2812没多长时间,写了一段代码后编译出现如下错误:>>   error: can't allocate .text, size 000012db (page 0) in PRAMH0 (avail:
            00001000),网上找资料说的是代码长度超出RAM空间了,有几种解决办法,1、精简代码,直至不会出现此类错误,2、增加外部RAM,3、修改cmd文件,把代码放到不同的text段内,前面两种方法暂时不方便实现,第三种方法网上也有部分介绍,但是CMD文件不太一样,不是太理解,所以一直没能解决问题,不知道有谁遇到过此类状况,分享下经验,怎么配置CMD文件,万分感谢。。。
我的SRAM.CMD文件如下:

MEMORY
{
PAGE 0 :
   PRAMH0     : origin = 0x3f8000, length = 0x001000      
         
PAGE 1 :
   /* SARAM                     */     
   RAMM0    : origin = 0x000000, length = 0x000400
   RAMM1    : origin = 0x000400, length = 0x000400

   /* Peripheral Frame 0:   */
   DEV_EMU    : origin = 0x000880, length = 0x000180
   FLASH_REGS : origin = 0x000A80, length = 0x000060
   CSM        : origin = 0x000AE0, length = 0x000010
   XINTF      : origin = 0x000B20, length = 0x000020
   CPU_TIMER0 : origin = 0x000C00, length = 0x000008
   CPU_TIMER1 : origin = 0x000C08, length = 0x000008                 
   CPU_TIMER2 : origin = 0x000C10, length = 0x000008                 
   PIE_CTRL   : origin = 0x000CE0, length = 0x000020
   PIE_VECT   : origin = 0x000D00, length = 0x000100

   /* Peripheral Frame 1:   */
   ECAN_A     : origin = 0x006000, length = 0x000100
   ECAN_AMBOX : origin = 0x006100, length = 0x000100

   /* Peripheral Frame 2:   */
   SYSTEM     : origin = 0x007010, length = 0x000020
   SPI_A      : origin = 0x007040, length = 0x000010
   SCI_A      : origin = 0x007050, length = 0x000010
   XINTRUPT   : origin = 0x007070, length = 0x000010
   GPIOMUX    : origin = 0x0070C0, length = 0x000020
   GPIODAT    : origin = 0x0070E0, length = 0x000020
   ADC        : origin = 0x007100, length = 0x000020
   EV_A       : origin = 0x007400, length = 0x000040
   EV_B       : origin = 0x007500, length = 0x000040
   SPI_B      : origin = 0x007740, length = 0x000010
   SCI_B      : origin = 0x007750, length = 0x000010
   MCBSP_A    : origin = 0x007800, length = 0x000040

   /* CSM Password Locations */
   CSM_PWL    : origin = 0x3F7FF8, length = 0x000008

   /* SARAM                    */     
   DRAMH0     : origin = 0x3f9000, length = 0x001000         
}


SECTIONS
{
   /* Allocate program areas: */
   .reset           : > PRAMH0,      PAGE = 0
   .text            : > PRAMH0,      PAGE = 0
  

   .cinit           : > PRAMH0,      PAGE = 0

   /* Allocate data areas: */
   .stack           : > RAMM1,       PAGE = 1
   .bss             : > DRAMH0,      PAGE = 1
   .ebss            : > DRAMH0,      PAGE = 1
   .const           : > DRAMH0,      PAGE = 1
   .econst          : > DRAMH0,      PAGE = 1      
   .sysmem          : > DRAMH0,      PAGE = 1
   
   /* Allocate Peripheral Frame 0 Register Structures:   */
   DevEmuRegsFile    : > DEV_EMU,    PAGE = 1
   FlashRegsFile     : > FLASH_REGS, PAGE = 1
   CsmRegsFile       : > CSM,        PAGE = 1
   XintfRegsFile     : > XINTF,      PAGE = 1
   CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1      
   CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1      
   CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1      
   PieCtrlRegsFile   : > PIE_CTRL,   PAGE = 1      
   PieVectTable      : > PIE_VECT,   PAGE = 1

   /* Allocate Peripheral Frame 2 Register Structures:   */
   ECanaRegsFile     : > ECAN_A,      PAGE = 1   
   ECanaMboxesFile   : > ECAN_AMBOX   PAGE = 1

   /* Allocate Peripheral Frame 1 Register Structures:   */
   SysCtrlRegsFile   : > SYSTEM,     PAGE = 1
   SpiaRegsFile      : > SPI_A,      PAGE = 1
   SciaRegsFile      : > SCI_A,      PAGE = 1
   XIntruptRegsFile  : > XINTRUPT,   PAGE = 1
   GpioMuxRegsFile   : > GPIOMUX,    PAGE = 1
   GpioDataRegsFile  : > GPIODAT     PAGE = 1
   AdcRegsFile       : > ADC,        PAGE = 1
   EvaRegsFile       : > EV_A,       PAGE = 1
   EvbRegsFile       : > EV_B,       PAGE = 1
   ScibRegsFile      : > SCI_B,      PAGE = 1
   McbspaRegsFile    : > MCBSP_A,    PAGE = 1

   /* CSM Password Locations */
   CsmPwlFile      : > CSM_PWL,     PAGE = 1

}

出0入0汤圆

 楼主| 发表于 2013-8-10 09:09:30 | 显示全部楼层
自己顶下先,坐等能人出现

出0入0汤圆

发表于 2013-8-10 09:44:46 | 显示全部楼层
你的是RAM调试,代码全在RAM中当然大不了,如果只是想做试验,怕反复烧FLASH,那你就临时屏蔽部分代码。其实FLASH没有那样脆弱,就用FLASH烧写调试,只是想断点的话,FLASH中的代码没法断,你要把你关心的部分函数用__ramfunc修饰,这样这个函数就能大断点调试了,你要找个FLASH的CMD模版

出0入0汤圆

发表于 2013-8-10 09:45:41 | 显示全部楼层
话说2812毕竟老了,新产品建议换其他

出0入0汤圆

 楼主| 发表于 2013-8-10 10:30:53 | 显示全部楼层
NJ8888 发表于 2013-8-10 09:44
你的是RAM调试,代码全在RAM中当然大不了,如果只是想做试验,怕反复烧FLASH,那你就临时屏蔽部分代码。其 ...

我就是考虑到FALSH没法调试,所以才想解决ram的问题,大神说的__ramfunc和打断点调试是什么,小弟菜鸟愚昧,可否加以解释或者资料指示?万分感谢

出0入0汤圆

 楼主| 发表于 2013-8-10 10:32:07 | 显示全部楼层
NJ8888 发表于 2013-8-10 09:45
话说2812毕竟老了,新产品建议换其他

刚刚入门DSP,所以花了200块钱买了块2812 的开发板,板子还各种有问题,等以后条件成熟了,定会换个系列

出0入0汤圆

发表于 2013-8-10 10:43:58 | 显示全部楼层
修改为:
PRAMH0     : origin = 0x3f8000, length = 0x002000

出0入0汤圆

发表于 2013-8-10 10:45:37 | 显示全部楼层
woshisangao 发表于 2013-8-10 10:32
刚刚入门DSP,所以花了200块钱买了块2812 的开发板,板子还各种有问题,等以后条件成熟了,定会换个系列 ...

你的长度定义为4K,实际代码超出4k,H0 SARAM有8K的空间

出0入0汤圆

 楼主| 发表于 2013-8-10 10:50:57 | 显示全部楼层
qjs412_avr 发表于 2013-8-10 10:43
修改为:
PRAMH0     : origin = 0x3f8000, length = 0x002000

先谢过了,之前有这样改过,但是编译还是会出错,我考虑是不是后面有个   /* SARAM                    */     
   DRAMH0     : origin = 0x3f9000, length = 0x001000 起始地址是0x3f9000,如果长度设置为2000的话,会不会和起始地址冲突了

出0入0汤圆

发表于 2013-8-10 11:14:49 | 显示全部楼层
woshisangao 发表于 2013-8-10 10:50
先谢过了,之前有这样改过,但是编译还是会出错,我考虑是不是后面有个   /* SARAM                    * ...

你可以用L0 SARAM和L1 SARAM,粗略看了你上面的cmd文件,这两个空间好像没用,共有8K的长度

出0入0汤圆

 楼主| 发表于 2013-8-10 11:18:37 | 显示全部楼层
qjs412_avr 发表于 2013-8-10 11:14
你可以用L0 SARAM和L1 SARAM,粗略看了你上面的cmd文件,这两个空间好像没用,共有8K的长度 ...

你说的是在原来的基础上新增加使用这个空间吗?具体的话应该如何实现呢?

出0入0汤圆

发表于 2013-8-10 11:33:04 | 显示全部楼层
woshisangao 发表于 2013-8-10 11:18
你说的是在原来的基础上新增加使用这个空间吗?具体的话应该如何实现呢? ...

MEMORY:
PAGE 0 :
   PRAMH0     : origin = 0x3f8000, length = 0x001000      
   PRAMH1     : origin = 0x009000, length = 0x001000  

SECTIONS:
.text            : {*(.text)} >> PRAMH0|PRAMH1,      PAGE = 0

出0入0汤圆

 楼主| 发表于 2013-8-10 12:01:26 | 显示全部楼层
qjs412_avr 发表于 2013-8-10 11:33
MEMORY:
PAGE 0 :
   PRAMH0     : origin = 0x3f8000, length = 0x001000      

我试了试,果然可以了,感谢你的热心帮助,愿你一切顺利。

出0入0汤圆

发表于 2013-8-10 13:54:36 | 显示全部楼层
woshisangao 发表于 2013-8-10 12:01
我试了试,果然可以了,感谢你的热心帮助,愿你一切顺利。

呵呵...共同学习

出0入0汤圆

发表于 2013-8-10 22:31:34 | 显示全部楼层
学习了,有收获了一些!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 03:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表