0

だから私はmbedコンパイラでプログラミングしています.これは現在私のコードです.

pc.baud(9600);
dev1.baud(19200);
char command[5];
//pc.puts("Initialized1X\n");
//while(1) {
if (1) {
    dev1.gets(command, 6); //this is causing my error...just waiting for command, must fix
    if (command[0] != 0x68){
        for (int x=0; x<4; x++){
            command[x] = command[x+1];
        }
        command[4] = 0x16;
    }
    for (int i=0; i<5; i++) {
            pc.printf("%x ", command[i]);
    }
        pc.printf("\n");
    sampleRates = command[2];    
    if (command[1] == 0x01){    
        switch (sampleRates){
            case 0x01: pc.printf("44.1k\n");
            return; 
            case 0x02: pc.printf("48k\n");
            return;
            case 0x03: pc.printf("88.2k\n");
            return;
            case 0x04: pc.printf("96k\n");
            return;
            case 0x05: pc.printf("176.4k\n");
            return;
            case 0x06: pc.printf("192k\n");
            return;
            case 0x07: pc.printf("352k\n");
            return;
            case 0x08: pc.printf("384k\n");
            return;
            case 0x09: pc.printf("705.6k\n");
            return;
            case 0x10: pc.printf("768k\n");
            return;

        }
    }
}
//}

dev1.gets(command, 6); で 別のデバイスから入力を取得しています。プログラムに他の関数を追加する必要がある場合を除いて、コードは正常に機能します。dev.1gets() コマンドで入力を待機するだけなので、他の関数は実行されません。本当にすばやくチェックし、入力を受け入れて先に進む方法はありますか? dev1.readable(); で if ステートメントを使用しました。しかし、ループに入っただけなので、もう一度実行するまでコマンドを配列に入れません。確認と保存を同時に行う方法はないでしょうか?

4

1 に答える 1

0

割り込みを介してバッファにデータを入力します。

おそらく、ダブル バッファリングを使用し、特定のバッファに処理待ちの「新しい」「完了」コマンドが含まれているかどうかを示すフラグを保持することをお勧めします。

割り込みハンドラは循環バッファを維持し、実際の I/O を処理します。

完全な「コマンド」がいつ入力されたかを認識するのに十分なほどスマートな割り込みハンドラーを用意してください。

完全な「コマンド」が入力されると、割り込みによって特定のバッファのフラグが設定され、メイン プログラムはこれを参照/リセットして、「コマンド」を処理できるかどうかを判断できます。

上記のフラグは保護する必要があるため、ミューテックスを使用するか、メイン関数でフラグの読み取り/リセット中に割り込みを無効にします。

于 2015-05-16T22:41:26.060 に答える