boost庫(kù)有一個(gè)asio,支持串口通信。
步驟:
  1、產(chǎn)生一個(gè)boost::asio::io_service(前攝模式,類似于完成端口,不過(guò),可以針對(duì)不同IO對(duì)象)
  2、構(gòu)造一個(gè)boost::asio::serial_port,有兩種方法:
      (一)boost::asio::serial_port m_serialPort(m_IoService, "COM1");
      (二)boost::asio::serial_port m_serialPort(m_IoService);
         m_serialPort.open("COM1"); 
注意這種方式打開(kāi),如果串口沒(méi)有準(zhǔn)備好,會(huì)導(dǎo)致程序拋異常,導(dǎo)致程序崩潰,所以應(yīng)該要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)公司長(zhǎng)期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為若羌企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都做網(wǎng)站,若羌網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
3、設(shè)置串口參數(shù):波特率、奇偶校驗(yàn) 位、停止位、字符大小和流量控制,通過(guò)set_option方法 
boost::asio::serial_port::baud_rate   ?? 波特率
boost::asio::serial_port::parity   ???????? 奇偶校驗(yàn),可以為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ù)讀寫(xiě)
    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);
??}
?}
問(wèn)題
??????? 按照提供的代碼,在阻塞等待時(shí)間的過(guò)程中,會(huì)導(dǎo)致Win10系統(tǒng)崩潰,崩潰的信息如下:
1)第一種情形 終止代碼:DRIVER_IRQL_NOT_LESS_EQUAL
2)第二種情形? wdf01000sys藍(lán)屏
解決
1)通過(guò)串口轉(zhuǎn)網(wǎng)卡,連接到串口服務(wù)器解決
2)采用Windows的原生接口解決
                新聞標(biāo)題:Boost串口通信boost::asio::serial_port基本使用
                
                本文路徑:http://chinadenli.net/article6/gspcog.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、建站公司、網(wǎng)站收錄、虛擬主機(jī)、用戶體驗(yàn)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)