您的位置:首页 > 其它

boost asio serial_port 读写串口

2011-11-28 12:33 429 查看
以下是serial_port同步读写串口设备的示例代码:

#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>

using namespace std;

int main(int argc, char* argv[])
{
try
{
boost::asio::io_service io;
boost::asio::serial_port sp(io, "COM1");

sp.set_option(boost::asio::serial_port::baud_rate(38400));
sp.set_option(boost::asio::serial_port::flow_control());
sp.set_option(boost::asio::serial_port::parity());
sp.set_option(boost::asio::serial_port::stop_bits());
sp.set_option(boost::asio::serial_port::character_size(8));

boost::asio::write(sp, boost::asio::buffer("\n", 1));

char buf[101];
boost::system::error_code err;
while (true)
{
size_t ret = sp.read_some(boost::asio::buffer(buf, 100), err);
if (err)
{
cout << "read_some Error: " << err.message() << endl;
break;
}
else
{
buf[ret] = '\0';
cout << buf;
}
}

io.run();
}
catch (exception& err)
{
cout << "Exception Error: " << err.what() << endl;
}

getchar();
return 0;
}


如果想进行读写超时控制的话,写需要适用异步写的方式,另外加入定时代码:

boost::asio::deadline_timer timer(io);
timer.expires_from_now(boost::posix_time::millisec(60000));
timer.async_wait(boost::bind(&boost::asio::serial_port::cancel,  &sp));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: