nesC (C-like) вопрос - PullRequest
       26

nesC (C-like) вопрос

0 голосов
/ 22 июня 2010

Это код из файла TestAVBoardM.nc на языке nesC:

#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 используется для хранения семплов звукозаписи.Сэмплы - это 16-битные стерео сэмплы, упакованные в 32-битное слово.Левые сэмплы находятся в младших 16 битах.Правильные сэмплы находятся в старших 16 битах.

Что меня смущает, так это количество сэмплов gNumSamples.Как я понимаю, gNumSamples должен быть BUFFERLEN, поскольку gBuffer [i] является 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;
  }

1 Ответ

0 голосов
/ 29 декабря 2010

Я только сталкивался с этим вопросом, когда искал nesC.Просто отвечая на все, что стоит.

Если вы посмотрите на функцию audioRecord, они умножают numSamples на 4, чтобы компенсировать деление на 4 (BUFFERLEN / 4) ранее.Без полного контекста я не могу сказать, почему они должны делить это в первую очередь.Я думаю, что gBuffer разделен на 4 части, каждая из которых хранит numSamples, поэтому, когда производитель пишет в одну часть, потребитель может читать из другой части.

...