DSP里动态内存分配malloc函数的使用
来源:互联网 发布:vb declare function 编辑:程序博客网 时间:2024/05/01 15:50
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\n",*(f+9999));free (f);printf("end\n");return 0;}
我们通过单步调试,将可以看到我们的指针f的地址与其所指的内存里int值。若我们不讲-heap定位于CE0,我们运行程序将会出错。
我们使用的是CCS5.5的软件仿真模式(Simulator)进行仿真。关于CCS5.5如何建立Simulator工程,请看另一篇博文。
1 0
- DSP里动态内存分配malloc函数的使用
- 大名鼎鼎的malloc函数(动态内存分配)
- 动态内存分配的几个函数:GlobalAlloc()、HeadpAlloc()、new()、malloc()
- 动态内存分配函数malloc,calloc,realloc
- 动态内存分配(malloc函数)
- 动态内存分配 malloc,free 函数分析
- 动态内存分配malloc
- 内存堆分配操作函数的使用(realloc,malloc等)
- C经典 malloc内存分配函数的使用
- (四)malloc动态内存分配以及跨函数使用内存
- 关于Malloc内存分配函数的解析
- C和指针之动态内存分配之(编写calloc函数,函数内部使用malloc函数来获取内存)
- 结构体里的string 要用new分配内存 。malloc只是分配内存。 new除了分配内存还会调用构造函数的
- 模拟实现c语言中的动态内存分配malloc函数
- 动态内存分配函数malloc、calloc和realloc
- llinux -c 之动态内存分配函数(malloc、calloc、realloc)
- 动态内存分配(malloc、realloc、calloc函数)
- C++学习:动态内存分配对象的new/delete运算符与函数malloc/free
- 采用左孩子右兄弟结构实现森林
- 菜鸟学Java----Java面向对象
- 关于RECT结构体
- 百度地图搜索周边配套设施
- 【Symfony】 Doctrine Entity 常用类型以及属性
- DSP里动态内存分配malloc函数的使用
- OpenGL ES雾
- 用instancetype代替id作返回类型有什么好处
- 浏览器兼容处理
- iOS 学习日志:infoplist常用设置
- Gorgeous Sequence
- Ubuntu远程连接报错:xrdp_mm_process_login_response: login failed
- 一个bug断断续续纠结了半个月终于解决问题了~泪奔
- 移动互联网服务端相关问题