c6455dsp的cmd文件中内存分配问题
自己在测试c6455dsp的一个fft库函数的例程中,发现了一些dsp内存分配的问题,现归纳总结如下:
1. DSP中cmd文件的段数据类型
.cinit :用来存放程序中的变量初值和常量值。
.const :存放程序中的字符常量、浮点常量和用const声明的常量。
.text :用来存放程序代码。
.bss :为程序中的全局和静态变量保留空间。
.far :为程序中用far声明的全局和静态变量保留空间。
.stack :为程序系统堆栈保留空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果。
.sysmem用于程序中的malloc、calloc和realoc函数动态分配内存空间。
2. cmd文件中的内存分配问题
如下图是截取c6455dsp的内存分配地址空间映射图。
图1 内部RAM地址映射
图2 外部DDR2内存(512M)地址映射
对照上图,在cmd文件中,我共开辟了四块内存,L2为2M(字节),CACHE_L1P为32k, CACHE_L1D为32k, DDR2为512M,如下图所示。
注意:cmd中内存的分配一定要是按照dsp内部的实际物理地址来写的。
图3 cmd文件内存分配图
我刚刚开始遇到的问题是,我尝试把所有的dsp系统运行所需内存段放在DDR2(因为DDR2足够大,哈哈)中,结果在编译的时候,遇到了问题,说是内存验证不通过,后来我自己经过反复尝试,发现.cinit、.text、.stack和.const这些内存区域是不能分配在DDR2外部的,目前还不知道具体原因。其它的内存区域可以分配在DDR2中,程序能正常运行。另外注意:将上述关键数据尽量放在内部IRAM中,否则容易出错。