TI中文支持网
TI专业的中文技术问题搜集分享网站

关于DSP2808的L0,L1,H0三段SARAM的使用问题

由于最近的程序新加了很多功能,并且实时性要求很高,所以大部分程序需要放在中断里面运行,而中断运行的程序需要将对应的代码放到Ram里面运行才能发挥最大的执行效率,之前是将L0和L1两段总共8k word的SARAM用来存放需要在中断运行的程序,但是现在空间不够了,我又把H0 SARAM的前面2k word的空间用作存放中断运行的程序(从生成的map文件看,用来运行中断程序的这三段RAM是连续的),但是我实际测试发现,一旦我的中断运行的程序超过8k word,中断执行的时间就会增大很多,之前跑完中断可能30us,但是超过8k word的话就需要接近50us的时间了。

我重新看了手册,发现L0,L1 SARAM和H0 SARAM都是0等待延时的,唯一的区别就是L0,L1有代码安全模块,而H0没有,是不是程序从L0,L1跳到H0 SARAM运行时需要很久的时间,导致我这种情况发生?或者有什么其他的原因导致,请大神们帮忙分析下,谢谢!

附上部分cmd文件,以及部分Map文件

MEMORY
{
PAGE 0:

RAML0L1    : origin = 0x3F8000, length = 0x002800   /* 10kRAM */

FLASHUPS2   : origin = 0x3F1800, length = 0x0027F0     /*  10K FLASH for RAM中运行的程序*/

CSM_PWL : origin = 0x3F7FF8, length = 0x000008 ROM : origin = 0x3FF000, length = 0x000FC0 RESET : origin = 0x3FFFC0, length = 0x000002 VECTORS : origin = 0x3FFFC2, length = 0x00003E

PAGE 1 : RAMM0 : origin = 0x000000, length = 0x000600 /*1.5K,堆栈 注意初始化RAM*/
RAMM1 : origin = 0x000600, length = 0x000200 /*0.5K,数据缓冲区1*/
RAMH0_BUFF : origin = 0x00A800, length = 0x000400 /*1K,数据缓冲区2*/
RAMH0 : origin = 0x00AC00, length = 0x0013F0 /*5K,全局变量,临时变量*/

}

SECTIONS
{
.cinit : > FLASHUPS1 PAGE = 0
.pinit : > FLASHUPS1 PAGE = 0
.text : > FLASHUPS1 PAGE = 0
.const : > FLASHUPS1 PAGE = 0
.econst : > FLASHUPS1 PAGE = 0
.switch : > FLASHUPS1 PAGE = 0
.cio : > FLASHUPS1 PAGE = 0
IQmath : > FLASHUPS1 PAGE = 0 appversion : > APPVER PAGE = 0
appburnnews : > APPNEWS PAGE = 0
bootloader : > FLASHA PAGE = 0
codestart : > FLASHBEGIN PAGE = 0
csmpasswds : > CSM_PWL PAGE = 0 ramfuncs : LOAD = FLASHUPS2, RUN = RAML0L1, LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0

IQmathTables : > ROM PAGE = 0, TYPE = NOLOAD .reset : > RESET PAGE = 0, TYPE = DSECT
vectors : > VECTORS PAGE = 0, TYPE = DSECT

}

MEMORY CONFIGURATION

name        origin        length       used         attr fill
———————- ——– ——— ——– —- ——–
RAML0L1 003f8000 00002800 00001e9e RWIX

Green Deng:你好,参考了:e2echina.ti.com/…/108209
其中提到:高区的H0 RAM 0x3F8000—0x0FC000和0X00A000到0X00C000从物理上是一个区域,放了低区就不能放高区

由于最近的程序新加了很多功能,并且实时性要求很高,所以大部分程序需要放在中断里面运行,而中断运行的程序需要将对应的代码放到Ram里面运行才能发挥最大的执行效率,之前是将L0和L1两段总共8k word的SARAM用来存放需要在中断运行的程序,但是现在空间不够了,我又把H0 SARAM的前面2k word的空间用作存放中断运行的程序(从生成的map文件看,用来运行中断程序的这三段RAM是连续的),但是我实际测试发现,一旦我的中断运行的程序超过8k word,中断执行的时间就会增大很多,之前跑完中断可能30us,但是超过8k word的话就需要接近50us的时间了。

我重新看了手册,发现L0,L1 SARAM和H0 SARAM都是0等待延时的,唯一的区别就是L0,L1有代码安全模块,而H0没有,是不是程序从L0,L1跳到H0 SARAM运行时需要很久的时间,导致我这种情况发生?或者有什么其他的原因导致,请大神们帮忙分析下,谢谢!

附上部分cmd文件,以及部分Map文件

MEMORY
{
PAGE 0:

RAML0L1    : origin = 0x3F8000, length = 0x002800   /* 10kRAM */

FLASHUPS2   : origin = 0x3F1800, length = 0x0027F0     /*  10K FLASH for RAM中运行的程序*/

CSM_PWL : origin = 0x3F7FF8, length = 0x000008 ROM : origin = 0x3FF000, length = 0x000FC0 RESET : origin = 0x3FFFC0, length = 0x000002 VECTORS : origin = 0x3FFFC2, length = 0x00003E

PAGE 1 : RAMM0 : origin = 0x000000, length = 0x000600 /*1.5K,堆栈 注意初始化RAM*/
RAMM1 : origin = 0x000600, length = 0x000200 /*0.5K,数据缓冲区1*/
RAMH0_BUFF : origin = 0x00A800, length = 0x000400 /*1K,数据缓冲区2*/
RAMH0 : origin = 0x00AC00, length = 0x0013F0 /*5K,全局变量,临时变量*/

}

SECTIONS
{
.cinit : > FLASHUPS1 PAGE = 0
.pinit : > FLASHUPS1 PAGE = 0
.text : > FLASHUPS1 PAGE = 0
.const : > FLASHUPS1 PAGE = 0
.econst : > FLASHUPS1 PAGE = 0
.switch : > FLASHUPS1 PAGE = 0
.cio : > FLASHUPS1 PAGE = 0
IQmath : > FLASHUPS1 PAGE = 0 appversion : > APPVER PAGE = 0
appburnnews : > APPNEWS PAGE = 0
bootloader : > FLASHA PAGE = 0
codestart : > FLASHBEGIN PAGE = 0
csmpasswds : > CSM_PWL PAGE = 0 ramfuncs : LOAD = FLASHUPS2, RUN = RAML0L1, LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0

IQmathTables : > ROM PAGE = 0, TYPE = NOLOAD .reset : > RESET PAGE = 0, TYPE = DSECT
vectors : > VECTORS PAGE = 0, TYPE = DSECT

}

MEMORY CONFIGURATION

name        origin        length       used         attr fill
———————- ——– ——— ——– —- ——–
RAML0L1 003f8000 00002800 00001e9e RWIX

user4086756:

回复 Green Deng:

是的,这个我明白,但是我没有重复使用,不然我也不可能编译通过的,谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 关于DSP2808的L0,L1,H0三段SARAM的使用问题
分享到: 更多 (0)