zoukankan      html  css  js  c++  java
  • 【转】DSP动态内存分配函数的使用

    DSP里的动态内存分配,其分配的内存区域在在堆(heap)中。同时DSP里动态分配内存的函数还有calloc以及reclloc。这些动态分配的内存放置在.system段的全局池或堆(heap)中。因此当我们需要动态分配大尺寸的内存时,我们的片内内存不够使用,我们将.system段定位到我们的EMIFA内存中,然后在编写cmd文件时,加入对堆大小(heap-Size)的指定。具体操作如下介绍:

    1、当我们使用CCS5.5建立DSP的Project后,编译环境会自动为我们生成链接文件(.cmd)(若没有自动生成,我们可以自己编写.cmd文件),代码如下图所示:

    *.cmd

    -heap           0x01000000      /* Heap Size */
    MEMORY
    {
        IRAM:          o = 0x00000000  l = 0x00040000  /* 256kB Internal RAM (L2) */
        EMIFA_CS0:     o = 0x80000000  l = 0x10000000  /* 256MB EMIFA CE0 */
        EMIFA_CS1:     o = 0x90000000  l = 0x10000000  /* 256MB EMIFA CE1 */
        EMIFA_CS2:     o = 0xA0000000  l = 0x10000000  /* 256MB EMIFA CE2 */
        EMIFA_CS3:     o = 0xB0000000  l = 0x10000000  /* 256MB EMIFA CE3 */
    } 
    
    SECTIONS
    {
        .text          >  IRAM /*可执行代码段的映射*/
        .stack         >  IRAM /*为系统堆栈分配存储器。该段用于将变量传递至函数或者用来分配局部变量*/
        .bss           >  IRAM /*保留全局和静态变量空间。在启动和导入的时候,C/C++编译器会启动程序将.cint段中的数据复制出来,以初始化.bss段中的变量*/
        .cio           >  IRAM /*io口*/
        .const         >  IRAM /*包含由C/C++限定词const定义的字符常量和数据*/
        .data          >  IRAM /*初始化数据段*/
        .switch        >  IRAM /*控制语句段映射*/
        .sysmem        >  EMIFA_CS0 /*初始化系统空间*/
        .far           >  IRAM /*供外部文件调用的变量*/
    }
    

    此时我们需要用语句-heap 0x01000000 /* Heap Size */指定我们堆得大小,如果我们后面需要动态分配的内存比较大,此时我们需要将此size指定较大空间。同时我们需要将.sysmem段定位到我们的CE0空间,因为我们的片内RAM尺寸将不够使用。

    2、编写程序测试我们的分配

    在main.c函数里添加如下代码:

    #include <stdio.h>
    //#include <malloc.h>
    int main(void) {
    	int i;
    	int *f;
    	f = (int*)malloc(sizeof(int) * 10000);
    	//f = (int*)calloc(200,sizeof(int));
    	for(i=0; i<10000; i++)
    	{
    		*(f+i) = i;
    	}
    	printf("answer = %d
    ",*(f+9999));
    	free (f);
    	printf("end
    ");
    	return 0;
    }

    我们通过单步调试,将可以看到我们的指针f的地址与其所指的内存里int值。若我们不讲-heap定位于CE0,我们运行程序将会出错。

  • 相关阅读:
    游戏引擎架构笔记之开篇
    Hacker(六)----黑客藏匿之地--系统进程
    Hacker(五)----黑客专用通道--->端口
    Hacker(四)----查看计算机的IP地址
    Hacker(三)之黑客定位目标---IP
    黑客必备技能
    黑客和骇客
    上海公积金提取办法(外地购房,公积金在上海)
    Python入门-----Windows安装
    Python入门-----介绍
  • 原文地址:https://www.cnblogs.com/zhangbing12304/p/10974520.html
Copyright © 2011-2022 走看看