0

UART で 8 バイトのデータを受信する関数があり、データ バイトの 1 つを使用して、そのデータ バイトを読み取り、使用する MP3 コーデックの音量を変調する関数を呼び出します。音量を設定する MP3 コーデック関数は、入力が 0x00 の場合は 100% の音量であり、0x64 の場合は 0% であるかのようにサウンドを設定するのは少し奇妙です。

ここで、LabVIEW ファームウェアは、ボリュームを 100% に設定する場合は 0x64 を送信し、0% の場合は 0x00 を UART 経由でデータ バイトに送信するように (チーム内の他の開発者によって) 設定されます。上で言ったように、私が読むつもりです。

この投稿の複雑さを回避するために、私が試みたのは、コンソールから入力を受け取り、処理された出力を出力する単純な C コードを実装することです。入力が 0x00 の場合、出力は 0x64 である必要があり、入力がたまたま 0x64 である場合、出力は 0x00 である必要があります。以下は、私が書いたコードで、次のようなエラーが発生しています。

Disallowed system call: SYS_socketcall

以下のコードは非常に非効率的で非常に基本的なレベルに見えるかもしれませんが、それは理解のためです。

int main(void)
{
   int input = 0x00, output = 0x00, i = 0x00, j = 0x64, var = 0x00;
   int in_arr[100], out_arr[100];

   for(i = 0x00; i < 0x65; i++, j--)
   { 
     out_arr[i] = j;
     in_arr[i] = i;
   }

   printf("Input : ");
   scanf("%x",&input);

   for(var = 0x00; var < 0x64; var++)
   {
     if(input == in_arr[var])
     {
       output = out_arr[var];
       printf("0x%x",output);
       break;
     }
   }
   return 0;
}
4

1 に答える 1

0
for(i = 0x00; i < 0x65; i++, j--)   // Should be i < 0x64

ここiには最大 101 個の要素 (0 から 100)を含めることができますが、要素0x65 => 101のみを含むように宣言されてい100ます。

としてそれを作るとi < 0x64、それは動作するはずです。

このような混乱を避けるために、最善の方法は、マクロを asにして、 のすべての場所で#define MAX_ELE 100使用することです。MAX_ELE0x64

于 2013-06-15T08:47:23.300 に答える