これがばかげた質問ではないことを願っていますが、自分の問題に対する答えを自分で見つけることができません。
私は、一連のバイトを受信して保存することになっている Atmega32U4 マイクロコントローラー デバイスに取り組んでいます。私のコードは、LUFA-Library 151115 の CDC 仮想シリアル ドライバー テンプレートに基づいています。コードをテストするために、非常に便利なツール ScriptCommunicator 04.11 を使用します。マイクロコントローラ ユニット (MCU) は USB 経由で PC に接続され、PC ホストによってシリアル com ポート デバイスとして扱われます。私のOSはWindows 7 64ビットです。
現在、6 つの値を受け取って保存する関数を作成しています。そのために、次のコードを使用します。
int16_t Register_1 = 0;
int16_t Register_2 = 0;
int16_t Register_3 = 0;
int16_t Register_4 = 0;
int16_t Register_5 = 0;
int16_t Register_6 = 0;
int16_t serial_byte = 0;
int8_t loop = 1;
do
{
serial_byte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
serial_byte &= 0x00FF;
switch (loop)
{
case 1: Register_1 = ad7194_byte; break;
case 2: Register_2 = ad7194_byte; break;
case 3: Register_3 = ad7194_byte; break;
case 4: Register_4 = ad7194_byte; break;
case 5: Register_5 = ad7194_byte; break;
case 6: Register_6 = ad7194_byte; break;
}
CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
USB_USBTask();
loop ++ ;
printf("%i" PRId32 "\n", serial_byte) ;
_delay_ms(1000);
} while (loop < 7);
以前に同様のコード スニペットを使用したことがありますが、すべて正常に動作しているように見えました。現在、次の問題を特定しました。デバイスは値「255ld」を継続的に受信しています。上記のコードを ScriptCommunicator でテストすると、この値を 6 回受け取ります (上記のコードに printf ステートメントが含まれているのはそのためです)。
これは、Windows が MCU をマウスなどの一般的な USB デバイスとして扱っているためではないでしょうか? そうなのだろうか?
または、これの他の理由は何ですか?
問題を回避するにはどうすればよいですか?
ヒントと回答をお寄せいただきありがとうございます。