1  简介 

Asio 是一个跨平台的 C++ 库,常用于网络编程、底层的 I/O 编程等 (low-level I/O),其结构框架如下:

2  使用 Asio

2.1  下载 

Asio 可分为 Boost 版和 non-Boost 版,后者的下载地址为: http://think-async.com/

下载完成后,直接解压到合适位置即可。

2.2  配置

1) 使用 Qt 5.9.1,其 .pro 工程文件中,添加如下配置:注意 ASIO_STANDALONE 在 non-Boost 版本中必须带有

/include

DEFINES += ASIO_STANDALONE

2)使用 VS 2015,则 ASIO_STANDALONE  配置如下所示:

2.3  代码示例

下面是一个简单的串口通讯例子,主要步骤为: 创建串口 --> 配置参数 --> 读写数据 --> 开启事件循环

#include <functional>
#include "asio.hpp"

#include <QDebug>

using namespace asio;

// 存储接收到的数据
];

// 声明回调函数
void PrintBuf();

int main()
{
    // 串口 COM1
    io_service iosev;
    serial_port port(iosev, "COM1");

    // 参数设置:波特率、流控、奇偶校验、停止位、数据位
    port.set_option(serial_port::baud_rate());
    port.set_option(serial_port::flow_control(serial_port::flow_control::none));
    port.set_option(serial_port::parity(serial_port::parity::none));
    port.set_option(serial_port::stop_bits(serial_port::stop_bits::one));
    port.set_option(serial_port::character_size());

    // 向串口写数据
    write(port, buffer());

    // 从串口读数据(异步)
    port.async_read_some(buffer(kBuf),std::bind(PrintBuf));

    // 开启事件循环
    iosev.run();
}

// 打印接收的数据
void PrintBuf()
{
    qDebug() << kBuf;
}

3  DB9 串口

当运行上面程序时,会发现个问题:程序先向串口 COM1, 发送 / 写入 了 "Hello Asio” 的数据,然后又去 收取 / 读出 数据,这对于一个串口而言,是不会收到数据的。

DB9 串口引脚的编号如下:

其中,2 --> RxD,是接收数据的管脚;3 --> TxD,是发送数据的管脚。

为了上面的程序能够成功运行,可以在运行程序之前,将 2脚 和 3脚 短接,这样,则既可以发送数据,也可以收取数据了

4  虚拟串口

如果使用笔记本的话,一般没有串口,这时有两种方案:

一是,使用 USB 转串口数据线,并安装相应的驱动,便可以和带串口的设备进行通信了;

二是,使用虚拟串口软件,创建虚拟串口,例如,Configure Virtual Serial Port Driver

C++ 之 Asio 库的更多相关文章

  1. VS2008下编译BOOST 1.39的ASIO库

    由于全部编译BOOST库需要的时间太长,而且耗费空间,况且我只需要用ASIO库,所以就没有必要全部编译了. boost库到www.boost.org上下载. 编译很简单,假设你的boost存放的目录是 ...

  2. c++ boost asio库初学习

    前些日子研究了一个c++的一个socket库,留下范例代码给以后自己参考. 同步server: // asio_server.cpp : コンソール アプリケーションのエントリ ポイントを定義します. ...

  3. Mac OS 使用asio库

    下载地址:http://sourceforge.net/projects/asio/files/asio/1.12.2%20%28Stable%29/ 本人下载的版本:asio-1.12.2 1,本人 ...

  4. Mac OS 安装 独立的asio库

    先安装boost,见前文,然后上官网下载不带boost的asio,版本为:asio-1.12.2 cd到下载的库目录,配置 ./configure --with-boost="boost的安 ...

  5. ASIO库使用注意事项

    1. 使用 io_service::work 实现 io_service 无任务时不退出 正常情况下向io_service抛任务,它执行完成后就会自动退出,而要实现那种chromium那种的循环队列, ...

  6. [Boost基础]并发编程——asio网络库——同步socket处理

    网络通信简述 asio库支持TCP,UDP和ICMP通信协议,它在名字空间boost::asio::ip里提供了大量的网络通信方面的函数和类,很好的封装了原始的Berkeley Socket API, ...

  7. [Boost基础]并发编程——asio网络库——定时器deadline_timer

    asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求使用多线程和锁定,有些的避免了多线程编程带来的诸多有害副作用(如条件竞争 ...

  8. 网络库Asio交叉编译(Linux生成ARM)

    1.  Asio是一个跨平台的C++库,用于网络和底层I/O编程.Asio使用先进的C++方式提供了一系列的异步模型 2. 官方网址:http://think-async.com 3. 由于Asio库 ...

  9. BOOST.Asio——Overview

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  啥说的,鄙视那些无视版权随 ...

随机推荐

  1. EntityFramework Core迁移时出现数据库已存在对象问题解决方案

    前言 刚开始接触EF Core时本着探索的精神去搞,搞着搞着发现出问题了,后来就一直没解决,觉得很是不爽,借着周末好好看看这块内容. EntityFramework Core迁移出现对象在数据库中已存 ...

  2. python基础之数据类型/字符串/元组/列表/字典

    Python 数据类型 数字类型: int整型,long 长整型(在python3.0里不区分整型和长整型).float浮点型:complex复数(python中存在小数字池:-5--257):布尔值 ...

  3. drozer使用

    1.启用adb 端口转发 adb forward tcp:314154 tcp:31415 2.启用drozer 3.链接drozer drozer console connect     4:如果没 ...

  4. Silverlight将Excel导入到SQLserver数据库

    最近纠结于读取Excel模板数据,将数据导入SQLServer的Silverlight实现,本文将实现代码贴出,作为一个简单的例子,方便各位: 1.先设计前台界面新建Silverlight5.0应用程 ...

  5. 设置Ubuntu下adb 及 fastboot权限

    以普通用户登录linux,然后运行adb devices会提示权限不够: List of devices attached  ????????????    no permissions   这是因为 ...

  6. document.getElementById("searchForm").submit is not a function

    document.getElementById("searchForm").submit is not a function在用userForm.submit() 提交表单的时候, ...

  7. 如何使用Node.js编写命令工具——以vue-cli为例

    vue-cli全局安装之后,提供了vue命令和vue init.vue list.vue build三个子命令,通过命令可以搭建基于vue.js的脚手架项目.本文简单介绍一下这些命令是如何实现的. v ...

  8. Notepad++中过滤掉的正则方式

    2 => 'ashadv'3 => 'aogro'4 => 'aogs'5 => 'ashamw'6 => 'arc'8 => 'gtsatq'9 => 'b ...

  9. CentOS通过yum安装php7.0

    一.删除旧版本 如果已经安装过php就先删除之前的版本.检查方法如下: yum list installed | grep php 然后将安装的包进行删除 比如 yum remove php.x86_ ...

  10. 无法将类型为excel.applicationclass的com 强制转换为接口类型的解决方法[转]

    c#解决方案EXCEL 导出 今天碰到客户的电脑在导出EXCEL的时候提示,无法将类型为 excel.applicationclass 的 com 强制转换为接口类型 excel._applicati ...