2012-02-22 12 views
0

私はマイクからFez Panda 2を通してサウンドサンプルを取得しています。これを達成するためにrlpを使用しています。ここに私のコードです:オーディオを読み込むrlp

int GHAL_AnalogIn_Read(unsigned char channel) 
{ 
     return ((*((int*)(ADC_DATA_BASE_ADDRESS) + channel)) >>8) & 0x3FF; 
} 
int ReadAudio(unsigned int *generalArray, void **args, unsigned int argsCount ,unsigned int *argSize) 
{ 
     unsigned char *buffer = (unsigned char*)args[0]; 
     int buffer_lengh = argSize[0]; 
     unsigned char channel = *(unsigned char*)args[1]; 
     int i=0; 
     while(i<buffer_lengh) 
     { 
      buffer[i] = GHAL_AnalogIn_Read(channel); 
      i++; 
      RLPext->Delay(100); 
     } 
     return 0; 
} 

問題は、これらのサウンドサンプルでfftを実行しているので、私は浮動小数点値がunsigned charでなければならないということです。だから私は浮動値を提供する変更が必要です。何か案は?

+0

自分でRLPを実装しようとしています。どんな助け?ドキュメントには、USBiziではデフォルトで無効にされ、ロックされていると書かれています。 RLP.Enable()はそれを有効にします。しかし、どうすればロックを解除できますか? –

答えて

0

Cの経験がありますか?特に、*&の意味は? *は、アドレスでポイントされる値を取得することを意味します。したがってvoid ** argsは 'addressから取得した値で指し示された値を取得する'のように解釈します。あなたが好きなものを自由に入力するためにvoidが使用されます。引数に構造体またはオブジェクト全体を配置することはできないので、構造体またはオブジェクトにポインタ(アドレス)を指定します。 *を使用すると、引数のアドレスの値を取得できます。

引数で配列全体を渡すのではなく、最初のインデックスのアドレスを渡します。

今、あなたは、単にあなたの関数のようなものであることをファクタを再できます

int ReadAudio(unsigned int *generalArray, float arg, unsigned int argsCount ,unsigned int *argSize) 

しかしvoid **argsが、今のバッファを指しているように、私はあなたが収集したデータに対して実行したいのか、操作を知っているべきだと思います。アナログ読み出しは常に整数を提供し、ほとんどのADC(アナログ - デジタル - コンバータ)は10ビット程度です。

32ビットシステムで浮動小数点数が4バイトの場合、データ(unsigned char *buffer)を4バイトの境界でマングルにする必要があります。

編集:私は文書でこれを見落としました:Note: Parameter of all function in RLP code file must have format follow this:Note: Parameter of all function in RLP code file must have format follow this:。ちょうど4バイト境界で浮動小数点にバッファのバイトをキャストし、私はあなたがうまくいくと思います。