首页 > 代码库 > DSP 知识点
DSP 知识点
1:自定义数据段
#pragma DATA_SECTION(symbol,".section")
Int32 symbol[LENGTH];
2:前几天遇到一个问题。dsp在执行某一块算法执行的时间太长达到100多ms。这个时间后面通过设置ccs的一些优化选项。减少到42ms。这还是不能达到我们的需求。后来知道我没打开cache。所以执行的时间很长。
在网上找了好久也没一个确切的办法打开cache。因此在此我详细的给出打开cache的方法。希望能给菜鸟们一点帮助。我也是菜鸟。大家一起进步。如果又不对的地方请老鸟们指正,谢谢。
#define L2CFG *(unsigned int*)(0x01840000) //6747 L2配置缓冲区寄存器宏定义
#define L1PCFG *(unsigned int*)(0x01840020) //6747 L1程序配置缓冲区寄存器宏定义
#define L1DCFG *(unsigned int*)(0x01840040) //6747 L1数据配置缓冲区寄存器宏定义
void init_cache(void)
{
L1PCFG = 4;
L1DCFG = 4;
L2CFG = 0x01010002;
}
CMD文件
-l rts64plus.lib
-l C6747bsl.lib
-stack 0x00001000 /* Stack Size */
-heap 0x00001000 /* Heap Size */
MEMORY
{
VECS: o = 0x80000000 l = 0x00000f00
ARMRAM: o = 0xFFFF0080 l = 0x00001f80
DSPL2RAM: o = 0x00800000 l = 0x00040000
DSPL1PRAM: o = 0x00E00000 l = 0x00008000
DSPL1DRAM: o = 0x00F00000 l = 0x00008000
DSPL2RAM2: o = 0x11800000 l = 0x0003FFFF
DSPL1PRAM2: o = 0x11E00000 l = 0x00008000
DSPL1DRAM2: o = 0x11F00000 l = 0x00008000
SHAREDRAM: o = 0x80000f00 l = 0x0001ffff
SDRAM: o = 0xC0000000 l = 0x20000000
}
SECTIONS
{
".vectors" > VECS
.bss > DSPL2RAM
.cinit > DSPL2RAM
.cio > DSPL2RAM
.const > DSPL2RAM
.stack > DSPL2RAM
.sysmem > DSPL2RAM
.text > DSPL2RAM
.switch > DSPL2RAM
.far > DSPL2RAM
.calcbuffer > DSPL2RAM
.compxbuf > DSPL2RAM
.bufs > SHAREDRAM
.audiobuffer > SDRAM
.buffertemp > SDRAM
.compxbuffer > SDRAM
}
3:疑问
1:我把程序中的一个数组定义到DSPL2RAM段。不知道怎么回事。该数组的值始终全部为0。定义到SHAREDRAM或者SDRAM就正常了。
2:同样一个程序。昨天那一块算法执行时间为6ms。今天却跑了18ms。很奇怪。谁能帮我解释一下呀?