欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用C++開(kāi)發(fā)一個(gè)串口讀寫(xiě)軟件的實(shí)現(xiàn)步驟

 更新時(shí)間:2025年04月03日 08:59:54   作者:廣龍宇  
這篇文章主要介紹了使用xmake(一個(gè)項(xiàng)目管理工具兼包管理工具)和asio2(一個(gè)asio的框架,可以實(shí)現(xiàn)輕松各種網(wǎng)絡(luò)應(yīng)用,一般支持tcp,udp,http,websocket,rpc,ssl,icmp,serial_port.)來(lái)快速的開(kāi)發(fā)個(gè)串口讀寫(xiě)軟件(整合例程),需要的朋友可以參考下

引言

現(xiàn)階段仍然有很多地方都是用C++寫(xiě)的,因此還是需要用到的,盡管現(xiàn)在都開(kāi)始使用Rust來(lái)代替C++了,但Rust的別扭也是眾所周知的,在Rust中文社區(qū)就看到不少人因此選擇放棄Rust轉(zhuǎn)回C++了(反正不可能是我,我C++主要還是嵌入式和玩)。這倆貨,踩誰(shuí)都不對(duì),也沒(méi)有必要去捧誰(shuí),他們都是差不多的,比如說(shuō)Rust難,C++就不難嗎?只不過(guò)是出來(lái)了從頭就開(kāi)始難的Rust而已,Rust也有其相對(duì)比較簡(jiǎn)單的地方。

C++到現(xiàn)在一直都是在發(fā)展的,對(duì)于關(guān)注C++的人來(lái)說(shuō),C++的新特性已經(jīng)特別了解了,而我實(shí)際上也不過(guò)是個(gè)初學(xué)者(調(diào)庫(kù)小子)?,F(xiàn)在的C++已經(jīng)發(fā)展的有點(diǎn)意思了,也有很多其他編程語(yǔ)言的特點(diǎn),最主要是用起來(lái)沒(méi)有以前那么難了(不用vcpkg,cmake后好用多了)。

現(xiàn)在我就xmake(一個(gè)項(xiàng)目管理工具兼包管理工具)和asio2(一個(gè)asio的框架,可以實(shí)現(xiàn)輕松各種網(wǎng)絡(luò)應(yīng)用,一般支持tcp,udp,http,websocket,rpc,ssl,icmp,serial_port.)來(lái)快速的開(kāi)發(fā)個(gè)串口讀寫(xiě)軟件(整合例程)。

一、必要條件

要想跟我一起開(kāi)始做,你需要完成兩件事

  1. 安裝好c++開(kāi)發(fā)環(huán)境(我是Linux,其實(shí)什么操作系統(tǒng)都可以)
  2. 安裝好xmake
  3. 安裝好vscode
  4. 安裝好vscode的cpp拓展包
  5. 安裝好vscode的xmake拓展

確保滿(mǎn)足以上條件后開(kāi)始。

二、實(shí)現(xiàn)步驟

1.創(chuàng)建項(xiàng)目

首先是創(chuàng)建項(xiàng)目,xmake創(chuàng)建項(xiàng)目的命令如下(項(xiàng)目名c_serial_demo)

xmake create c_serial_demo

然后用vscode打開(kāi)這個(gè)文件夾,里面有兩個(gè)文件

  • src - 用來(lái)存放你的源代碼
  • xmake.lua - xmake的配置文件

2.配置代碼提示

首先要生成cpp代碼提示的配置文件,按下ctrl + shift + p,輸入c/c++,選擇輸入c/c++編輯配置(UI),然后關(guān)掉這個(gè)頁(yè)面就好了,就會(huì)看到在.vscode下面多出個(gè)文件c_cpp_properties.json就成功了。

然后是生成xmake的代碼編譯命令文件,按下ctrl + shift + p,輸入xmake,選擇xmake:UpdateIntellisense,就會(huì)看到在.vscode下面多出個(gè)文件compile_commands.json就成功了。

最后在c_cpp_properties.json中的configurations中寫(xiě)入"compileCommands": ".vscode/compile_commands.json",寫(xiě)完后就像下面這個(gè)樣子

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/lib64/ccache/clang",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "compileCommands": ".vscode/compile_commands.json"
        }
    ],
    "version": 4
}

此時(shí)保存后代碼提示就沒(méi)問(wèn)題了。

3.安裝依賴(lài)

本程序只是實(shí)現(xiàn)串口讀寫(xiě),并且是打算直接調(diào)庫(kù)快速實(shí)現(xiàn),因此直接安裝依賴(lài)就好了,首先執(zhí)行安裝依賴(lài)的命令

xrepo install asio2

然后修改配置文件xmake.lua,添加以下行

add_rules("mode.debug", "mode.release")

add_requires("asio2") -- 添加這行 1

target("c_serial_demo")
    set_kind("binary")
    add_files("src/*.cpp")
    add_packages("asio2") -- 添加這行 2

3.編譯程序

xmake的編譯運(yùn)行很簡(jiǎn)單,編譯就是直接運(yùn)行

xmake
# 或者
xmake build 

運(yùn)行就是

xmake run

此時(shí)運(yùn)行你應(yīng)該可以看到Hello World

4. 編寫(xiě)實(shí)現(xiàn)代碼

asio2的github上有很多示例代碼,由于這里只使用串口讀寫(xiě),因此直接把serial_port的代碼拿過(guò)來(lái)用就好了,有興趣可以去github看看,我這里直接貼出來(lái)

#include <asio2/serial_port/serial_port.hpp>

int main()
{
	std::string_view device = "COM1"; // for windows
	//std::string_view device = "/dev/ttyS0"; // for linux
	std::string_view baud_rate = "9600";

	asio2::serial_port sp;

	sp.bind_init([&]()
	{
		// Set other serial port parameters at here
		sp.set_option(asio::serial_port::flow_control(asio::serial_port::flow_control::type::none));
		sp.set_option(asio::serial_port::parity(asio::serial_port::parity::type::none));
		sp.set_option(asio::serial_port::stop_bits(asio::serial_port::stop_bits::type::one));
		sp.set_option(asio::serial_port::character_size(8));

	}).bind_recv([&](std::string_view data)
	{
		printf("recv : %zu %.*s\n", data.size(), (int)data.size(), data.data());

		sp.async_send(data);

	}).bind_start([&]()
	{
		printf("start : %d %s\n", asio2::last_error_val(), asio2::last_error_msg().c_str());
	}).bind_stop([&]()
	{
		printf("stop : %d %s\n", asio2::last_error_val(), asio2::last_error_msg().c_str());
	});

	//sp.start(device, baud_rate);
	sp.start(device, baud_rate, '\n');
	//sp.start(device, baud_rate, "\r\n");
	//sp.start(device, baud_rate, match_role);
	//sp.start(device, baud_rate, asio::transfer_at_least(1));
	//sp.start(device, baud_rate, asio::transfer_exactly(10));

	sp.async_send("abc0123456789xyz\n", [](std::size_t bytes_sent)
	{
		printf("send : %zu %d %s\n", bytes_sent,
			asio2::last_error_val(), asio2::last_error_msg().c_str());
	});

	while (std::getchar() != '\n');

	return 0;
}

將以上代碼直接替換到main.cpp即可,其中device根據(jù)你的操作系統(tǒng)來(lái)寫(xiě)(Windows還是Linux,這個(gè)庫(kù)是可以直接跨平臺(tái)的),然后波特率就是baud_rate,根據(jù)你的情況來(lái)編寫(xiě),現(xiàn)在編譯運(yùn)行,應(yīng)該是能看到默認(rèn)輸出的一些東西,現(xiàn)在只要連接個(gè)單片機(jī)到這個(gè)串口,或者使用usb轉(zhuǎn)串口,連接上以后就可以正常看到輸出了,比如

此時(shí)你可以根據(jù)你想要的業(yè)務(wù)邏輯來(lái)編寫(xiě)你的代碼,實(shí)現(xiàn)你想要的功能,使用xmake來(lái)做c++開(kāi)發(fā)就跟python差不多,如果你想要實(shí)現(xiàn)什么功能,直接調(diào)庫(kù)就好了,C++擁有海量的庫(kù),對(duì)于一些系統(tǒng)操作也很方便,所以我一般喜歡用C++玩。

以上就是使用C++開(kāi)發(fā)一個(gè)串口讀寫(xiě)軟件的實(shí)現(xiàn)步驟的詳細(xì)內(nèi)容,更多關(guān)于C++串口讀寫(xiě)軟件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 在C語(yǔ)言中轉(zhuǎn)換時(shí)間的基本方法介紹

    在C語(yǔ)言中轉(zhuǎn)換時(shí)間的基本方法介紹

    這篇文章主要介紹了在C語(yǔ)言中轉(zhuǎn)換時(shí)間的基本方法,分別是mktime()函數(shù)和localtime()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • c++ 類(lèi)函數(shù)作為模板參數(shù)實(shí)現(xiàn)方式詳解

    c++ 類(lèi)函數(shù)作為模板參數(shù)實(shí)現(xiàn)方式詳解

    這篇文章主要介紹了c++ 類(lèi)函數(shù)作為模板參數(shù)實(shí)現(xiàn)方式,在實(shí)現(xiàn)中加入增強(qiáng)邏輯,這種方式對(duì)代碼侵入性過(guò)高,而且無(wú)法控制該邏輯是否需要,如果不需要的話(huà)又得重新修改代碼實(shí)現(xiàn),需要的朋友可以參考下
    2023-03-03
  • 深入解析C語(yǔ)言中的內(nèi)存分配相關(guān)問(wèn)題

    深入解析C語(yǔ)言中的內(nèi)存分配相關(guān)問(wèn)題

    這篇文章主要深入地介紹了C語(yǔ)言中的內(nèi)存分配,C語(yǔ)言編程中的內(nèi)存泄漏問(wèn)題一直以來(lái)都是C編程中的一大棘手問(wèn)題,本文從malloc和指針等方面對(duì)C內(nèi)存進(jìn)行了深層次講解,強(qiáng)烈推薦!需要的朋友可以參考下
    2015-08-08
  • C++中的構(gòu)造函數(shù)詳解

    C++中的構(gòu)造函數(shù)詳解

    這篇文章主要介紹了C++ 中構(gòu)造函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C++鏈接器工作原理詳解

    C++鏈接器工作原理詳解

    當(dāng)文件見(jiàn)過(guò)編譯后就需要進(jìn)行一個(gè)鏈接的操作接下來(lái)我們就說(shuō)說(shuō)什么是鏈接,本文給大家介紹了C++鏈接器是如何工作的,文章通過(guò)代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • C語(yǔ)言 以數(shù)據(jù)塊的形式讀寫(xiě)文件詳解及實(shí)現(xiàn)代碼

    C語(yǔ)言 以數(shù)據(jù)塊的形式讀寫(xiě)文件詳解及實(shí)現(xiàn)代碼

    本文主要介紹 C語(yǔ)言 以數(shù)據(jù)塊的形式讀寫(xiě)文件,這里對(duì)相關(guān)知識(shí)資料做了整理,并附代碼示例,以便大家學(xué)習(xí)參考,有學(xué)習(xí)此部分知識(shí)的朋友可以參考下
    2016-08-08
  • C語(yǔ)言操作符進(jìn)階教程(表達(dá)式求值隱式類(lèi)型轉(zhuǎn)換方法)

    C語(yǔ)言操作符進(jìn)階教程(表達(dá)式求值隱式類(lèi)型轉(zhuǎn)換方法)

    這篇文章主要為大家介紹了C語(yǔ)言操作符進(jìn)階教程(表達(dá)式求值隱式類(lèi)型轉(zhuǎn)換方法)
    2022-02-02
  • C++學(xué)習(xí)筆記之類(lèi)成員指針

    C++學(xué)習(xí)筆記之類(lèi)成員指針

    類(lèi)成員指針時(shí)指可以指向類(lèi)的非靜態(tài)成員的指針,下面這篇文章主要給大家介紹了關(guān)于C++類(lèi)成員指針的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • C++實(shí)現(xiàn)萬(wàn)年歷功能

    C++實(shí)現(xiàn)萬(wàn)年歷功能

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)萬(wàn)年歷功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++控制臺(tái)實(shí)現(xiàn)掃雷游戲

    C++控制臺(tái)實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C++控制臺(tái)實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評(píng)論