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中,否则容易出错。

 

posted on 2017-03-13 20:36  鲁大师51  阅读(3307)  评论(0编辑  收藏  举报

导航