我是靠谱客的博主 淡淡电源,最近开发中收集的这篇文章主要介绍DSP学习-----内存管理的一点经验(转),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

https://blog.csdn.net/yf210yf/article/details/7638402

1. 在一个函数里建立一个很大的数组,函数运行完会自动删掉,但那是没法做到的,这个大数组最好是声明为全局变量,并且把它存到外部扩展内存里,不要让它占用有限的片上内存,不然程序很容易跑飞。C语言本身的跑飞现象比较好查,而因为内存问题而跑飞,很隐秘,很难查。

#pragma DATA_SECTION(a_1,"FLASHI");
float a_1[MN*MN+1];

2. 一般数组的名字代表它的首地址,但是CCS里有些别扭的地方。

如果数组G是在其他文件里声明的,在本文件中想用的话直接extern int G;就可以了。但是要想用一个指针指向这个G,如:G_pointer要指向G,则应写成G_pointer=&G;若写成G_pointer=G;将提示错误。

如果G是本文件定义的静态变量,用指针指向它,可以写成:G_pointer=G;

3. 把大数组作为静态变量并给它独立分配内存空间的必要性:

如果大数组在函数内部定义,其数据会出现莫名其妙的异常,还会经常变化。其实不是你程序的错,是内存的缘故,所以硬着头皮,把他们统统放到程序前面去吧.ps这个实践验证

4. 程序中的printf无法起作用:

    当然还是内存的问题。网上唯一一篇相关文章说是-heap的问题,让把heap改成0x400,俺的heap本来就是400,后来改成800也没用。最后把.stack移到片外内存后,printf才好用,光改option里的stack改到800也无济于事.

ps:这个函数在dsp中并不好用。

8. 对于CCS来说,对于外部变量G,初始化的语句int G[100]={0};并不能使G的元素变

     成 0,所以还是老老实实用memset语句进行初始化吧。或者直接循环赋值

    但是对于动态变量{0}用于初始化是可以的。

10.不同文件的声明部分:CCS中每一个文件都要写声明,如文件A需要include <stdio.h>,文件B也需要,则A,B两文件都要写include <stdio.h>,编译器不会自动找的。还包括:

#define......,  #pragma DATA_ALIGN等声明。ps带有数组定义的不可重复声明会报错

11.在程序调试阶段不要优化程序,成功之后在进行优化

 

 

 

 

最后

以上就是淡淡电源为你收集整理的DSP学习-----内存管理的一点经验(转)的全部内容,希望文章能够帮你解决DSP学习-----内存管理的一点经验(转)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部