现代的计算机技术进步很快,各种的通讯也日新月异,像USB、网络、蓝牙、WIFI等通讯技术飞速地出现,改变了整个计算机的通讯能力,速度已经达到GBit级别。但是有一种最原始的通讯方式,还是保留了30年,它就是串行接口通讯。前一些年,有很多计算机已经准备把这个接口去掉,全部换USB了,近年来又看到串口恢复过来,重新成为基本计算机配置。那为什么呢?其实串口具体一个大特点,就是简单,它简单到不需要什么驱动代码,不用担心中间有什么复杂处理出错。在计算机与外设通讯速度不高的情况下,它还是很合适的接口,比如在工业里一些简单监控,一些命令发送;在嵌入式软件开发里,调试软件信息显示和自动化测试。这时需要开发一些开发工具或者自动化测试工具辅助要完成这个任务,那么怎么样才能用C++最快捷,又简单地完成任务呢?下面就来看看使用boost库里提供的类,很容易就完成了这个任务,其实只需要开发10多分钟就可以了,例子的代码如下:

// boost_029.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include <boost/asio.hpp>
#include <boost/asio/serial_port.hpp>
#include <iostream>
#include <fstream> //
//串口接收,并把收到数据写到文件里。
//软件开发人员: 蔡军生 2013-09-01
//QQ: 9073204
//
void ComOutputToFile(void)
{
//设置本化的UNICODE输出
std::wcout.imbue(std::locale("chs"));
std::wcout << L"开始写串口数据到文件..." << std::endl; //创建保存串口输出的文件.
std::ofstream outfile("Com2File.dat", std::ios::binary | std::ios::out);
if (!outfile.good())
{
std::wcout << L"出错了" << std::endl;
return;
} outfile.flush(); //创建IO服务
boost::asio::io_service ioService;
//创建串口对象。
boost::asio::serial_port port(ioService); //打开串口1
port.open("COM1");
//设置通讯波特率
port.set_option(boost::asio::serial_port_base::baud_rate(115200)); //循环地接收串口的数据。
char chRecv = 0;
const int nOneByte = 1;
do
{
//每次收到一个字符就输出到文件。
boost::asio::read(port, boost::asio::buffer(&chRecv,nOneByte));
std::cout << chRecv;
outfile<<chRecv; //立即输出到文件。
outfile.flush();
}
while(true); port.close();
} int _tmain(int argc, _TCHAR* argv[])
{
ComOutputToFile(); return 0;
}

boost库在工作(40)串行通讯的更多相关文章

  1. 串行通讯之.NET SerialPort

    第1章串行通讯之.NET SerialPort    2 1 枚举串口    2 2 打开/关闭串口    2 3 写数据    3 3.1 写二进制数据    3 3.2 写文本数据    4 4 ...

  2. 串行通讯之Qt

    目录 第1章 Qt 串行通讯    1 1.1 配置.pro文件    1 1.2 查询串口信息    1 1.3 配置.打开串口    3 1.4 setRequestToSend在Windows上 ...

  3. COM口,串行通讯端口,RS-232接口 基础知识

    COM口即串行通讯端口. COM口的接口标准规范和总线标准规范是RS-232,有时候也叫做RS-232口.电脑上的com口多为9针,最大速率115200bps.通常用于连接鼠标(串口)及通讯设备(如连 ...

  4. 基于51的串行通讯原理及协议详解(uart)

    串行与并行通讯方式并行:控制简单,传输速度快.线多,长距离成本较高且同时接受困难.串行:将数据字节分成一位一位的行驶在一条传输线上进行传输.如图:   同步与异步串行通讯方式同步串行通讯方式:同步通讯 ...

  5. 【Arduino】使用C#实现Arduino与电脑进行串行通讯

    在给Arduino编程的时候,因为没有调试工具,经常要通过使用串口通讯的方式调用Serial.print和Serial.println输出Arduino运行过程中的相关信息,然后在电脑上用Arduin ...

  6. 串行通讯之UARTLoopback

    目录 第1章串行通讯之UARTLoopback    2 1 USB转串口    2 2 USB Accessory    2 3 连入手机    3 4 代码改进    4 5 打开串口    4 ...

  7. STM32L476应用开发之三:串行通讯实验

    在我们的项目需求中,有两个串口应用需求,一个是与炭氢传感器的通讯,另一个是与显示屏的通讯.鉴于此,我们需要实验串行通讯. 1.硬件设计 串行通讯一个采用RS232接口,另一个直接采用TTL方式.我们在 ...

  8. STM32学习笔记——SPI串行通讯(向原子哥学习)

    一.SPI  简介 SPI是 Serial Peripheral interface 的缩写,就是串行外围设备接口.SPI 接口主要应用在  EEPROM, FLASH,实时时钟,AD 转换器,还有数 ...

  9. boost库在工作(37)网络UDP服务端之七

    前面介绍的都是网络TCP的服务器和客户端,其实还有UDP的服务器和客户端,同时也有同步和异步之分.UDP与TCP最大的区别,就是TCP是基于连接的,而UDP是无连接的.这里所谓的连接是指对方中断服务时 ...

随机推荐

  1. C++进程间通信(常用理解例子)-买票

    #include "stdafx.h" #include <iostream>using namespace std; #include "windows.h ...

  2. Java getResourceAsStream返回为空的问题

    使用 getResourceAsStream("helloworld.propterties") 读取文件的stream,返回一直为空,试这把.properties文件放在 很多路 ...

  3. network-manager与interfaces冲突

    网络配置的两种方式 Ubuntu下修改网络配置有两种方式:图形界面方式(network-manager)和修改/etc/network/interfaces 但是如果两种方式的网络设置不同,就会产生冲 ...

  4. Hibernate的Criteria用法

    在hibernate的Session里面使用createCriteria可以创建一个Criteria实例帮助我们进行条件查询,不用自己串hql语句,很方便. 用法很简单,首先传Class实例创建Cri ...

  5. CC++初学者编程教程(13) 基于Oracle linux 的Oracle12c环境搭建

    1设置虚拟机选项 2 设置文件夹共享 3启动文件夹共享向导 4 设置共享文件夹 5 启用共享 6 关闭虚拟机设置 7 开启虚拟机 8 登陆帐户 9 看见虚拟机桌面 10 安装vmwaretools 1 ...

  6. poj2924---高斯求和

    #include <stdio.h> #include <stdlib.h> int main() { ; long long ans,a,b; scanf("%d& ...

  7. Mirantis Fuel fundations

    Mirantis Nailgun is the most important service a RESTful application written in Python that contains ...

  8. Aix 文件名补齐及aix6.1 bash安装

    Aix历史查询快捷键=>按ESC+k 设置KSH的自动补全(仅仅是文件名补全,没有命令补全)和历史命令功能 方法一: set -o vi 历史命令功能(esc -,esc +)自动补全文件名(e ...

  9. AndroidUI 视图动画-自定义动画效果 (Animation)

    如果Android提供的四种动画 效果 和混合动画效果 不能够 满足需求的话,可以使用自定义动画效果 : 新建一个类CustomAnimation 使其继承自 android.view.animati ...

  10. 全国计算机等级考试二级教程-C语言程序设计_第12章_C语言中用户标识符的作用域和存储类

    生命周期的概念,也就是生存期,仅仅适用于变量. 代码.常量.定义等等都是与程序共存亡的,他们的生命周期就是程序的生命周期. 静态分配:生命周期是整个程序执行周期,内存会一直存在,在main函数执行之前 ...