我正在编写3200个浮点数:
float fft[3200] = {0};
get_fft_frame(dev, fft, 3200); // rf sensor
int written = write(sd, fft, sizeof(fft));
然后像这样阅读:
float *fft = new float[3200];
int inRead = 0;
while (inRead < (3200*4)) {
//sleep(1);
int bytesRead = read(sd, fft + inRead, (3200*4) - inRead);
inRead += bytesRead;
}
所有数据都写入1次写入,但需要两次读取调用才能获取所有数据。第一个读取返回11584,第二个读取返回1216。
问题是第二次读取调用只读取零。但是,如果我取消注释睡眠调用,它会读取所有正确的数据。
有没有更好的方法来获取数据而不睡觉?
答案 0 :(得分:0)
你正在混淆你的补偿。 inRead
以字节为单位进行测量,但是当您将其添加到fft
时,它会被sizeof float
乘以指针算法规则。 read()
调用中的偏移表达式应为
((char*)fft)+inRead