Boost-COM資料讀取
說明:本文隻介紹使用Boost讀取COM口資料,不涉及Boost配置相關
關于Boost詳情了解請點選:
①Boost官方介紹頁
②Boost首頁
使用Boost庫讀取COM口,需要包含的頭檔案是
asio
的文檔:boost::asio
ps:可能有的玩家包含這個頭檔案就會報錯,嫌麻煩請移步visual studio,按照Boost官方介紹頁的要求配置好各種屬性。(IDE就用vs呗,啟動速度已經很快了).
封裝一個函數便于使用:
int GetData(boost::asio::serial_port& spx)
{
char valuex[10] = {0};
spx.read_some(buffer(valuex, 1));
return (valuex[0] & 0b00001111);
}
參數說明:
boost::asio::serial_port
就是boost中用于讀寫序列槽的
class
呐
serial_port的文檔:asio::serial_port
聲明serial對象的說明:需要同在asio域中的io_service對象:
io_service io;
serial_port sp(io,"COM3");
io_service此處不介紹
需要注意的是,
serial_port
的聲明需要有COM裝置存在,是以在運作時需要将序列槽裝置連至主機,保證可讀。
#include<iostream>
#include<boost\asio.hpp>
#include<boost\asio\serial_port.hpp>
using namespace boost::asio;
using namespace std;
int GetData(boost::asio::serial_port& spx)
{
char valuex[10] = {0};
spx.read_some(buffer(valuex, 1));
return (valuex[0] & 0b00001111);
}
int main()
{
//擷取serial_port對象執行個體
io_service io;
serial_port sp(io,"COM3");
while (true) {
//serial_port的read_some方法讀取指定數量的資料到指定空間
sp.read_some(buffer(value, 10));
//此處運算隻是根據需求對資料的處理;
printf("%d\n", value[0]&0b00001111);
}
cout << "Anyway Done" << endl;
//捕獲exception,輸出錯誤提示資訊
return 0;
}
注:asio::buffer是此程式調用的serial_port::read_some需要的參數類型
詳見
asio::buffer的文檔:asio::buffer
asio::serial_port::read_some的文檔:serial_port::read_some