如何只检查一次输入,而不是挂断等待输入
How to just check for input once, and not get hung up waiting for the input
所以我正在使用 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(命令, 6);我正在从另一台设备获取输入。代码工作正常,除非我需要向我的程序添加其他功能。其他函数不会 运行 因为它只是等待 dev.1gets() 命令的输入。有什么办法可以让它真正快速地检查、接受输入并继续前进吗?我使用了带有 dev1.readable() 的 if 语句;但是在我再次执行之前它不会将命令带入数组,因为它只进入了循环。也许有办法同时检查和保存?
通过中断将数据输入缓冲区。
使用双缓冲并保留一个标志以指示特定缓冲区是否包含 'new' 'complete' 命令可能是个好主意
正在等待处理。
中断处理程序维护循环缓冲区并处理实际的 I/O。
让中断处理程序足够智能以识别何时输入了完整的 'command'。
当一个完整的 'command' 被输入时,中断为特定的缓冲区设置一个标志,主程序可以查看 at/reset 来确定 'command' 是否可用过程。
上面的标志需要保护,所以使用互斥锁或让 main 函数在 reading/resetting 标志时禁用中断。
所以我正在使用 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(命令, 6);我正在从另一台设备获取输入。代码工作正常,除非我需要向我的程序添加其他功能。其他函数不会 运行 因为它只是等待 dev.1gets() 命令的输入。有什么办法可以让它真正快速地检查、接受输入并继续前进吗?我使用了带有 dev1.readable() 的 if 语句;但是在我再次执行之前它不会将命令带入数组,因为它只进入了循环。也许有办法同时检查和保存?
通过中断将数据输入缓冲区。
使用双缓冲并保留一个标志以指示特定缓冲区是否包含 'new' 'complete' 命令可能是个好主意 正在等待处理。
中断处理程序维护循环缓冲区并处理实际的 I/O。
让中断处理程序足够智能以识别何时输入了完整的 'command'。
当一个完整的 'command' 被输入时,中断为特定的缓冲区设置一个标志,主程序可以查看 at/reset 来确定 'command' 是否可用过程。
上面的标志需要保护,所以使用互斥锁或让 main 函数在 reading/resetting 标志时禁用中断。