天天看點

Boost讀取序列槽(COMx)資料快捷上手及文檔指引

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

繼續閱讀