Boost讀取串口(COMx)數據快捷上手及文檔指引

Boost-COM數據讀取

說明:本文只介紹使用Boost讀取COM口數據,不涉及Boost配置相關

關於Boost詳情瞭解請點擊:
Boost官方介紹頁
Boost首頁


使用Boost庫讀取COM口,需要包含的頭文件是

#include <boots/asio.hpp>

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章