最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C++開發(fā)一個串口讀寫軟件的實現(xiàn)步驟

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

引言

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

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

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

一、必要條件

要想跟我一起開始做,你需要完成兩件事

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

確保滿足以上條件后開始。

二、實現(xiàn)步驟

1.創(chuàng)建項目

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

xmake create c_serial_demo

然后用vscode打開這個文件夾,里面有兩個文件

  • src - 用來存放你的源代碼
  • xmake.lua - xmake的配置文件

2.配置代碼提示

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

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

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

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

此時保存后代碼提示就沒問題了。

3.安裝依賴

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

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的編譯運行很簡單,編譯就是直接運行

xmake
# 或者
xmake build 

運行就是

xmake run

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

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

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

#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)來寫(Windows還是Linux,這個庫是可以直接跨平臺的),然后波特率就是baud_rate,根據(jù)你的情況來編寫,現(xiàn)在編譯運行,應(yīng)該是能看到默認輸出的一些東西,現(xiàn)在只要連接個單片機到這個串口,或者使用usb轉(zhuǎn)串口,連接上以后就可以正??吹捷敵隽耍热?/p>

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

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

相關(guān)文章

  • VSCode C/C++多文件編譯配置小結(jié)

    VSCode C/C++多文件編譯配置小結(jié)

    本文主要介紹了VSCode C/C++多文件編譯配置小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • C++修煉之構(gòu)造函數(shù)與析構(gòu)函數(shù)

    C++修煉之構(gòu)造函數(shù)與析構(gòu)函數(shù)

    本章節(jié)我們將學(xué)習(xí)類的6個默認成員函數(shù)中的構(gòu)造函數(shù)與析構(gòu)函數(shù),并對比C語言階段的內(nèi)容來學(xué)習(xí)它們的各自的特性,感興趣的同學(xué)可以參考閱讀
    2023-03-03
  • C語言實現(xiàn)旅游景點咨詢系統(tǒng)

    C語言實現(xiàn)旅游景點咨詢系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)旅游景點咨詢系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Qt實現(xiàn)鬧鐘小程序

    Qt實現(xiàn)鬧鐘小程序

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)鬧鐘小程序,利用Qt的designer設(shè)計需要的鬧鐘界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • C++類的繼承和派生及指針安全引用

    C++類的繼承和派生及指針安全引用

    這篇文章主要介紹了C++類的繼承和派生及指針安全引用,繼承指從現(xiàn)有類獲得其特性,派生指從已有類產(chǎn)生新的類,指針和引用并存,二者似乎有很多相同點,但是又不完全相同,下面關(guān)于兩者的相關(guān)資料,需要的小伙伴可以參考一下
    2022-03-03
  • C/C++實現(xiàn)手寫數(shù)字識別的示例詳解

    C/C++實現(xiàn)手寫數(shù)字識別的示例詳解

    這篇文章主要為大家詳細介紹了如何使用C/C++實現(xiàn)手寫數(shù)字識別,分別處理 32*32 文本數(shù)據(jù)集和mnist 28*28 png數(shù)據(jù)集,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-10-10
  • 使用C++實現(xiàn)監(jiān)控文件是否被修改

    使用C++實現(xiàn)監(jiān)控文件是否被修改

    軟件開發(fā)過程中經(jīng)常會用到配置文件,某些應(yīng)用場景要求在軟件運行時動態(tài)修改配置文件,此時就需要監(jiān)控配置文件是否被修改,下面我們就來看看如何使用C++實現(xiàn)這一功能吧
    2024-02-02
  • 基于QT實現(xiàn)文件上傳和下載功能

    基于QT實現(xiàn)文件上傳和下載功能

    這篇文章主要為大家詳細介紹了基于QT實現(xiàn)文件上傳和下載功能,支持斷點續(xù)傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++設(shè)計模式之工廠方法模式的實現(xiàn)及優(yōu)缺點

    C++設(shè)計模式之工廠方法模式的實現(xiàn)及優(yōu)缺點

    工廠方法模式是一個創(chuàng)建型設(shè)計模式,通過定義一個創(chuàng)建對象的接口,讓其子類決定實例化哪一個工廠類,這篇文章主要給大家介紹了關(guān)于C++設(shè)計模式之工廠方法模式的實現(xiàn)及優(yōu)缺點,需要的朋友可以參考下
    2021-06-06
  • C語言:自定義類型詳解

    C語言:自定義類型詳解

    這篇文章主要介紹了C語言自定義函數(shù)詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09

最新評論

沁水县| 蒙山县| 甘谷县| 社旗县| 商丘市| 沁水县| 巫溪县| 城市| 沐川县| 鹰潭市| 和田市| 拉萨市| 毕节市| 鹰潭市| 和田市| 哈尔滨市| 香港 | 永安市| 兴化市| 小金县| 泉州市| 九龙县| 吉木萨尔县| 海城市| 郑州市| 昌都县| 榕江县| 泽库县| 景宁| 鹿邑县| 大同市| 宣化县| 文化| 左贡县| 天门市| 洛川县| 义乌市| 泰州市| 通州市| 平定县| 天峨县|