概述
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学习-----内存管理的一点经验(转)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复