我必须阅读项目中的许多(8)串行设备。它们是Pantilt,Camera,GPS,Compass等。它们都是RS232设备,但是它们具有不同的命令结构和行为。例如GPS开始发送数据
我打开港口后其中PanTilt和Camera仅在我向他们发送特定命令时才响应。
我使用以下环境
对于PanTilt和Camera,我想开发这样的功能。
int SendCommand(string& command, string& response)
{
port.write(command, strlen(command));
while(1)
{
if(response contains '\n') break;
port.read(response) // Blocking Read
}
return num_of_bytes_read;
}
我想以这种方式实现,因为此功能将用作更复杂算法的构建块
像这样...
SendCoammd("GET PAN ANGLE", &angle);
if(angle > 60)
SendCommand("STOP PAN", &stopped?);
if(stopped? == true)
SendCommand("REVERSE PAN DIRECTION", &revesed?);
if(reversed? == true)
SendCommand("START PAN", &ok);
为此,我需要严格的同步行为。有人知道如何解决这个问题吗?
最佳答案
我发现本教程非常有趣并且很有帮助。
http://www.webalice.it/fede.tft/serial_port/serial_port.html
它显示了boost::asio如何可用于执行同步和异步读取/写入。
感谢您的帮助!
关于c++ - 阻止串口读取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10389514/