真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Boost串口通信boost::asio::serial_port基本使用

boost庫有一個asio,支持串口通信。
步驟:
  1、產生一個boost::asio::io_service(前攝模式,類似于完成端口,不過,可以針對不同IO對象)
  2、構造一個boost::asio::serial_port,有兩種方法:
     ?。ㄒ唬゜oost::asio::serial_port m_serialPort(m_IoService, "COM1");
     ?。ǘ゜oost::asio::serial_port m_serialPort(m_IoService);
         m_serialPort.open("COM1"); 
注意這種方式打開,如果串口沒有準備好,會導致程序拋異常,導致程序崩潰,所以應該要try{} catch包含,或者使用如下的方式
?boost::system::error_code ec;
?serial_port sp(iosev);
?m_serialPort.open("COM1", ec);
?if (ec)?return;
或者
?try
?{
???????????? boost::asio::serial_port m_serialPort(m_IoService);
         m_serialPort.open("COM1"); s
?}
?catch (exception& err)
?{
?}

創(chuàng)新互聯(lián)公司長期為近1000家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網生態(tài)環(huán)境。為若羌企業(yè)提供專業(yè)的成都網站制作、成都做網站,若羌網站改版等技術服務。擁有十多年豐富建站經驗和眾多成功案例,為您定制開發(fā)。

3、設置串口參數(shù):波特率、奇偶校驗 位、停止位、字符大小和流量控制,通過set_option方法 
boost::asio::serial_port::baud_rate   ?? 波特率
boost::asio::serial_port::parity   ???????? 奇偶校驗,可以為serial_port::parity::none / odd / even。
boost::asio::serial_port::flow_control????? 流量控制, 可以為serial_port::flow_control::type,enum類型,可以是none software hardware
boost::asio::serial_port::stop_bits????????? 停止位,??? 可以為serial_port::stop_bits::one /onepointfive /two
boost::asio::serial_port::character_size?? 字符大小
  4、數(shù)據(jù)讀寫
    read_some
    write_some
   ?? async_read_some
    async_write_some
????? 5、同步讀取例子

?io_service iosev;
?boost::system::error_code ec;
?serial_port sp(iosev);
?sp.open("COM1", ec);
?
?if (ec)?return;
?sp.set_option(serial_port::baud_rate(9600));
?sp.set_option(serial_port::flow_control(serial_port::flow_control::none));
?sp.set_option(serial_port::parity(serial_port::parity::none));
?sp.set_option(serial_port::stop_bits(serial_port::stop_bits::one));
?sp.set_option(serial_port::character_size(8));

?std::string strCompleteMsg;
?boost::asio::streambuf content_sb;
?int bytes = 0;

?while (1)
?{
??strCompleteMsg = "";
??bytes = 0;
??while (strCompleteMsg.find("\r\n") == std::string::npos)
??{
???bytes += boost::asio::read(sp, content_sb, boost::asio::transfer_exactly(1), ec);
???if (ec) break;

???boost::asio::streambuf::const_buffers_type cont_bufs = content_sb.data();
???strCompleteMsg = std::string(boost::asio::buffers_begin(cont_bufs), boost::asio::buffers_begin(cont_bufs) + bytes);
??}
?}

問題

??????? 按照提供的代碼,在阻塞等待時間的過程中,會導致Win10系統(tǒng)崩潰,崩潰的信息如下:
1)第一種情形 終止代碼:DRIVER_IRQL_NOT_LESS_EQUAL
2)第二種情形? wdf01000sys藍屏

解決
1)通過串口轉網卡,連接到串口服務器解決
2)采用Windows的原生接口解決


文章名稱:Boost串口通信boost::asio::serial_port基本使用
文章地址:http://weahome.cn/article/gspcog.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部