C语言 如何只检查一次输入,而不是挂在等待输入



所以我用mbed编译器编程,这是目前我的代码。

pc.baud(9600);
dev1.baud(19200);
char command[5];
//pc.puts("Initialized1Xn");
//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.1kn");
            return; 
            case 0x02: pc.printf("48kn");
            return;
            case 0x03: pc.printf("88.2kn");
            return;
            case 0x04: pc.printf("96kn");
            return;
            case 0x05: pc.printf("176.4kn");
            return;
            case 0x06: pc.printf("192kn");
            return;
            case 0x07: pc.printf("352kn");
            return;
            case 0x08: pc.printf("384kn");
            return;
            case 0x09: pc.printf("705.6kn");
            return;
            case 0x10: pc.printf("768kn");
            return;
        }
    }
}
//}

与dev1。(命令,6);我正在从另一个设备获取输入。代码工作良好,除了当我需要添加其他功能到我的程序。其他函数不会运行,因为它只是在等待dev.1gets()命令的输入。有没有办法让它快速检查,接受输入,然后继续?我在dev1.readable()中使用if语句;但是它不会将命令放入数组,直到我再次执行,因为它只进入循环。也许有一种方法可以同时检查和保存?

通过中断向缓冲区输入数据。

也许使用双缓冲并保留一个标志来指示特定缓冲区是否包含'new' 'complete'命令是一个好主意等待处理的文件

中断处理程序维护循环缓冲区并处理实际的I/o。

让中断处理程序足够智能,以识别何时输入了完整的"命令"。

当输入一个完整的"命令"时,中断为特定的缓冲区设置一个标志,主程序可以查看/reset以确定是否有一个"命令"可供处理。

上述标志需要保护,因此使用互斥锁或让main函数在读取/重置标志时禁用中断

相关内容

  • 没有找到相关文章

最新更新