DSP2812代码长度超出RAM容量,有谁遇到过吗?
接触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
}
自己顶下先,坐等能人出现 你的是RAM调试,代码全在RAM中当然大不了,如果只是想做试验,怕反复烧FLASH,那你就临时屏蔽部分代码。其实FLASH没有那样脆弱,就用FLASH烧写调试,只是想断点的话,FLASH中的代码没法断,你要把你关心的部分函数用__ramfunc修饰,这样这个函数就能大断点调试了,你要找个FLASH的CMD模版 话说2812毕竟老了,新产品建议换其他 NJ8888 发表于 2013-8-10 09:44 static/image/common/back.gif
你的是RAM调试,代码全在RAM中当然大不了,如果只是想做试验,怕反复烧FLASH,那你就临时屏蔽部分代码。其 ...
我就是考虑到FALSH没法调试,所以才想解决ram的问题,大神说的__ramfunc和打断点调试是什么,小弟菜鸟愚昧,可否加以解释或者资料指示?万分感谢 NJ8888 发表于 2013-8-10 09:45 static/image/common/back.gif
话说2812毕竟老了,新产品建议换其他
刚刚入门DSP,所以花了200块钱买了块2812 的开发板,板子还各种有问题,等以后条件成熟了,定会换个系列 修改为:
PRAMH0 : origin = 0x3f8000, length = 0x002000 woshisangao 发表于 2013-8-10 10:32 static/image/common/back.gif
刚刚入门DSP,所以花了200块钱买了块2812 的开发板,板子还各种有问题,等以后条件成熟了,定会换个系列 ...
你的长度定义为4K,实际代码超出4k,H0 SARAM有8K的空间 qjs412_avr 发表于 2013-8-10 10:43 static/image/common/back.gif
修改为:
PRAMH0 : origin = 0x3f8000, length = 0x002000
先谢过了,之前有这样改过,但是编译还是会出错,我考虑是不是后面有个 /* SARAM */
DRAMH0 : origin = 0x3f9000, length = 0x001000 起始地址是0x3f9000,如果长度设置为2000的话,会不会和起始地址冲突了 woshisangao 发表于 2013-8-10 10:50 static/image/common/back.gif
先谢过了,之前有这样改过,但是编译还是会出错,我考虑是不是后面有个 /* SARAM * ...
你可以用L0 SARAM和L1 SARAM,粗略看了你上面的cmd文件,这两个空间好像没用,共有8K的长度 qjs412_avr 发表于 2013-8-10 11:14 static/image/common/back.gif
你可以用L0 SARAM和L1 SARAM,粗略看了你上面的cmd文件,这两个空间好像没用,共有8K的长度 ...
你说的是在原来的基础上新增加使用这个空间吗?具体的话应该如何实现呢? woshisangao 发表于 2013-8-10 11:18 static/image/common/back.gif
你说的是在原来的基础上新增加使用这个空间吗?具体的话应该如何实现呢? ...
MEMORY:
PAGE 0 :
PRAMH0 : origin = 0x3f8000, length = 0x001000
PRAMH1 : origin = 0x009000, length = 0x001000
SECTIONS:
.text : {*(.text)} >> PRAMH0|PRAMH1, PAGE = 0
qjs412_avr 发表于 2013-8-10 11:33 static/image/common/back.gif
MEMORY:
PAGE 0 :
PRAMH0 : origin = 0x3f8000, length = 0x001000
我试了试,果然可以了,感谢你的热心帮助,愿你一切顺利。{:handshake:} woshisangao 发表于 2013-8-10 12:01 static/image/common/back.gif
我试了试,果然可以了,感谢你的热心帮助,愿你一切顺利。
呵呵...共同学习{:victory:} 学习了,有收获了一些!
页:
[1]