【转】DSP动态内存分配函数的使用
2024-10-21 15:30:14
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,我们运行程序将会出错。
最新文章
- 守护神 Supervisor
- Win10 VS2015 社区版切换到VS2013社区版 进行维护之前的项目
- RTP与RTCP协议介绍
- Oracle数据库之三
- SQLite支持的SQL数据操作
- Oracle的常见错误及解决办法
- Android中SharedPreferences使用方法介绍
- 几种常见排序算法原理&;C语言实现
- FFmpeg-音频和视频应用程序的瑞士军刀
- C语言——第二次作业(2)
- loadrunner飞机订票系统从登陆订票退票登出的脚本实现代码调试通过
- Codeforces Round #512 D - Vasya and Triangle
- 【转】WPF Template模版之DataTemplate与ControlTemplate的关系和应用(二)
- cdnbest如何查看节点和站点的流量,负载和连接信息
- LB层到Real Server之间访问请求的响应时间及HTTP状态码监控及报警设置
- Python 处理JSON数据报错解决办法
- 解题:CTSC 2008 祭祀
- 5 功能4:个人站点页面设计(ORM跨表与分组查询)
- UOJ 12 猜数 数学题
- iOS笔记杂记
热门文章
- sql server exec 参数的传递
- Qt编写控件属性设计器11-导入xml
- 必备Docker命令
- cmd 连接oracle
- node.js生成验证码及图片
- 机器学习技法总结(一):支持向量机(linear support vector machine,dual support vector machine)
- 托马斯&#183;贝叶斯 (Thomas Bayes)
- zookeeper学习整理
- 使用objcopy实现将文件编译进执行程序
- springboot继承JpaRepository报org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualif