这是nesC语言的TestAVBoardM.nc文件中的代码:
#define BUFFERLEN 32768
uint32_t gBuffer[BUFFERLEN] __attribute__((aligned(32)));
uint32_t gNumSamples = BUFFERLEN/4;
event void Audio.ready(result_t success)
{
call Audio.audioRecord(gBuffer,gNumSamples));
return;
}缓冲区gBuffer用于存储录音样本。样本是打包到32位字中的16位立体声样本。左边的样本在低16位。右样本在高16位。
让我感到困惑的是样本gNumSamples的数量。据我所知,gNumSamples应该是BUFFERLEN,因为gBufferi是32位字(左声道16位+右声道16位)。我说的对吗?(我更改了gNumSamples = BUFFERLEN,但它不起作用)。
谢谢你的帮助。
gBuffer的用法如下:
command result_t Audio.audioRecord(uint32_t *buffer, uint32_t numSamples){
uint32_t *pBuf;
uint32_t bufpos;
bool initPlay;
atomic{
initPlay = gInitPlay;
}
if(initPlay == TRUE){
//gate the acceptance of a record command until we signal audio.ready();
return FAIL;
}
atomic{
pBuf = gRxBuffer;
bufpos = gRxBufferPos;
}
if( (bufpos != 0) || (pBuf != NULL)){
//gate acceptance due to ongoing record command
return FAIL;
}
atomic{
gRxBuffer = buffer;
gRxBufferPos = 0;
gRxNumBytes = numSamples * 4;
}
call BulkTxRx.BulkReceive((uint8_t *)buffer, ((numSamples*4) > 8188)? 8188: (numSamples*4));
return SUCCESS;
}发布于 2010-12-29 13:01:13
我是在找nesC的时候遇到这个问题的。不管它值多少钱我都要回答。
如果您查看audioRecord函数,它们会将numSamples乘以4,以补偿前面除以4 (BUFFERLEN/4)的影响。如果没有完整的上下文,我不知道为什么他们必须首先划分它。我的猜测是,gBuffer被分成4个部分,每个部分存储numSamples,所以当生产者写入一个部分时,消费者可以从另一个部分读取。
https://stackoverflow.com/questions/3090022
复制相似问题