我的工作是在DSP处理器上实现BFSK算法,需要在LINUX上使用预定义的DSP底层文件来模拟实现。输入数据以浮点数组的形式出现。从输入中逐个提取各个比特。在typdef结构的fprm中生成调制输出,该结构由两个浮点变量(实部和虚部,因为调制数据是复数基带信号)组成。但DSP仿真需要将输出保存到空指针数组中。这不能改变,因为DSP需要它以空指针的形式存在。该结构的定义如下:
typedef struct {
float re;
float im;
}complex_float;我可以使用memcpy将数据复制到空指针中:
sigbuf=(float *)malloc(bitsPerBlk*sigLen*sizeof(complex_float));
memcpy(sigbuf, comSig, (bitsPerBlk*sigLen*sizeof(complex_float)));comSig是保存输出的空指针数组,complex_float是保存调制输出的sigbuf数组。问题是我不能访问sigbuf数组的个别值。我也试过了
sigbuf=(complex_float *)malloc(bitsPerBlk*sigLen*sizeof(complex_float));但它仍然不起作用。
如果有人能帮助我,那将对我很有帮助。
谢谢,安舒
发布于 2012-06-17 14:58:01
我将在这里进行猜测。为什么不将comSig复制到sigBuf,然后将其传递给您的API呢?
complex_float *sigBuf = malloc(TOTAL_SIZE_OF_COMSIG);
memcpy(sigBuf, comSig, TOTAL_SIZE_OF_COMSIG);我不知道你的函数的文档,但听起来你的API接受了一个空指针,指向某个数据缓冲区,可能还有它的长度或元素的数量。
dsp_api(sigBuf, sigBufSize);我认为你误解了什么是空指针,以及你的函数想要什么。空指针只是指向某些数据的通用指针。它是函数接收任何数据的方式,然后可能将其转换为complex_float结构以对数据进行操作。
作为未来的参考,为什么你不能取消引用一个空指针是因为它没有大小。你必须将它转换为一个类型,然后你才能取消对它的引用。
发布于 2012-06-17 00:06:54
如果sigbuf的类型为(void *),则您的代码行
sigbuf=(complex_float *)malloc(bitsPerBlk*sigLen*sizeof(complex_float));应该能够更改为
sigbuf=(void *)malloc(bitsPerBlk*sigLen*sizeof(complex_float));因为malloc的左边是一个简单的铸型!
发布于 2012-06-17 01:52:45
很抱歉,我的错是我没能清楚地解释我的观点。声明如下
void *sigbuf;
complex_float *comSig;complex_float
是一个由两个浮动元素组成的结构。
sigbuf
将存储调制后的数据,然后将其进一步传递给传输系统。
comSig
是一个complex_float数组(基本上是正弦和余弦函数输出的数组)。
DSP基础设施需要调制输出在
sigbuf
已计算并保存在
comSig
。somSig和sigbuf都是在数字信号处理基础设施中预先定义的。
我的问题是,我可以将整个comSig复制到sigbuf数组中,但不能访问sigbuf数组的各个元素。
我能够通过全局指针传递comSig数组本身的地址来绕过这个问题的任何方法variable.The DSP基础设施都提供了这样做的自由。所以,现在这个问题似乎已经解决了。再次感谢,安舒。
https://stackoverflow.com/questions/11064964
复制相似问题