首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nesC (类C)问题

nesC (类C)问题
EN

Stack Overflow用户
提问于 2010-06-22 11:11:33
回答 1查看 233关注 0票数 0

这是nesC语言的TestAVBoardM.nc文件中的代码:

代码语言:javascript
复制
#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的用法如下:

代码语言:javascript
复制
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;
  }
EN

回答 1

Stack Overflow用户

发布于 2010-12-29 13:01:13

我是在找nesC的时候遇到这个问题的。不管它值多少钱我都要回答。

如果您查看audioRecord函数,它们会将numSamples乘以4,以补偿前面除以4 (BUFFERLEN/4)的影响。如果没有完整的上下文,我不知道为什么他们必须首先划分它。我的猜测是,gBuffer被分成4个部分,每个部分存储numSamples,所以当生产者写入一个部分时,消费者可以从另一个部分读取。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3090022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档