0
我必須在實驗室中使用其中一個硬件編寫串行通信。在Linux上進行第一對讀取和寫入後,串行端口掛起
使用bash,我可以寫我的時候,我想和receve resposnes有:
cat < /dev/ttyUSB0 &
echo 'SM?' >/dev/ttyUSB0
# SM=0480;
echo 'SMM=0475;' > /dev/ttyUSB0
echo 'SM?;' > /dev/ttyUSB0
# SM=0475;
我寫與ASIO一個簡單的C++應用程序,也應該這樣做。
#include <asio.hpp>
#include <asio/serial_port.hpp>
#include <thread>
int main(){
asio::io_service service;
asio::serial_port port(service,"/dev/ttyUSB0");
port.set_option(asio::serial_port_base::baud_rate(9600));
port.set_option(asio::serial_port_base::character_size(8));
port.set_option(asio::serial_port_base::parity(asio::serial_port_base::parity::none));
port.set_option(asio::serial_port_base::stop_bits(asio::serial_port_base::stop_bits::one));
port.set_option(asio::serial_port_base::flow_control(asio::serial_port_base::flow_control::none));
std::vector<char> ret(100);
int len;
asio::error_code ignored;
asio::write(port,asio::buffer("SM?;"),asio::transfer_all(),ignored);
len=port.read_some(asio::buffer(ret),ignored);
std::cout.write(ret.data(),len);
asio::write(port,asio::buffer("SSM=0480;"),asio::transfer_all(),ignored);
asio::write(port,asio::buffer("SM?;"),asio::transfer_all(),ignored);
len=port.read_some(asio::buffer(ret),ignored);
std::cout.write(ret.data(),len);
std::cout << std::endl;
port.cancel();
port.close();
service.stop();
service.reset();
return 0;
}
但是代碼掛在第二次讀取。我究竟做錯了什麼?
嗯。硬件規範說,在這種情況下終止字符是';'。今天我已經沒有實驗室了,所以我無法測試它,但在這種情況下,第一次讀取也會掛起。 – UldisK