我是DSP初学菜鸟一个,今天用C语言编写CCS代码时,在主函数内定义了一个长度为8000的二维整型数组,然后后面一个子函数对其进行一些简单处理,确定函数逻辑无误(在VS2013中能运行出结果),但是在CCS中编译无误的情况下怎么也运行不出结果,设置断点也看不到函数到底跑飞到了哪里(好像连主函数都没进。。),cmd文件设置检查也没有问题,后来将这个数组移到主函数之外定义成全局的,发现在map文件中它的存储位置从.const段移到了.bss段,我在cmd文件修改这两个段存储器大小后再编译运行发现程序这时运行无误了,求教各位大神这到底是什么原因? 我在网上查的资料对.const段和.bss段解释如下:
.const 存放已明确初始化的字符串常量,全局常量和静态常量
.bss 存放没有初始化的全局变量和静态变量。在小模式中,.bss块也为常数宏保留空间。 按照这个解释我之前在主函数内定义的数组应该是已初始化的局部变量,为什么会存储在const段中,后面移出主函数也应该是初始化了的全局变量啊,搞不懂。。。
下面是我的部分代码,就是在加了分帧函数后出了问题。
#include <stdio.h>
#include <stdlib.h>
#include "..\Include\type.h"
#include "..\Include\func.h"
#include "..\Include\global.h"
int f[frame_num][frame_len]={0};
int main(int argc, char **argv)
{
int i;
// int f[frame_num][frame_len]={0};
int *p_buf;
int *p_buf2;
p_buf = &pcm_buf[0];
p_buf2 = &pcm_buf2[0];
// p_buf3 = &pcm_buf3[0];
//变声类型
//预加重滤波
Pre_Filter(p_buf, p_buf2);
//分帧
fra(f,p_buf2);
return 0;
}
//分帧
void fra(int(*f)[frame_len], int *data_in)
{
int i, j ;
int n = 0;
for(i=0;i<frame_num;i++)
{
for(j=0;j<frame_len;j++)
{
f[j] = data_in[n];
n++;
}
n = n - frame_len / 2; //帧移frame_len/2
}
}
|