如何利用C语言,C++语言打开USB串口,然後对其发送信号? 跪求回答! 可行比加分!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用C语言,C++语言打开USB串口,然後对其发送信号? 跪求回答! 可行比加分!!相关的知识,希望对你有一定的参考价值。
USB外接一个硬件电路,其能够根据USB输入信号来实现一些功能,在利用XP系统的超级终端机写入信号可以实现。现在的问题是我需要在VS2010环境中利用C语言或者C++语言打开USB串口,写入信号,请问这部分使用C/C++语言怎么实现?
openfile和createfile,就可以,可以打开串口号的,创建接收信息,发送。。。 参考技术A 你是用USB的虚拟串口吧。如果是的,你就要用到串口相关的设置
1,打开串口:
HANDLE hComm;
hComm = CreateFile("\\\\.\\COM1",GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
2,设置超时
SetCommTimeouts
3,通信信息设置(波特率,校验位,停止位等)
SetCommState
4,方式
PurgeComm
5,发送
WriteFile
6,读取
ReadFile
关闭:CloseHandle(hComm);
还可以用第三方的串口控件。本回答被提问者采纳 参考技术B 这一段是Linux 下C编写的代码,在C++下也能编译过.主要是那几个函数.
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include "math.h"
#define max_buffer_size 100
int fd,s;
int open_serial(int k)
if(k==0)
fd=open("/dev/ttyS0",O_RDWR|O_NOCTTY);
perror("open /dev/ttyS0");
else
fd=open("/dev/ttyS1",O_RDWR|O_NOCTTY);
perror("open /dev/ttyS1");
if(fd == -1)
return -1;
else
return 0;
int main()
char buf[max_buffer_size],recvbuf[max_buffer_size];
int flag_close,retv,length,retval;
struct termios opt;
struct timeval tv;
open_serial(0);
tcgetattr(fd,&opt);
cfmakeraw(&opt);
cfsetispeed(&opt,B9600);
cfsetospeed(&opt,B9600);
tcsetattr(fd,TCSANOW,&opt);
length=sizeof(buf);
while(1)
fd_set rfdr;
FD_ZERO(&rfdr);
FD_SET(0,&rfdr);
FD_SET(fd,&rfdr);
tv.tv_sec=1;
tv.tv_usec=0;
retval=select(fd+1,&rfdr,NULL,NULL,&tv);
if(retval==-1)
break;
else if (retval==0)
continue;
if(FD_ISSET(fd,&rfdr))
bzero(buf,length);
printf("ready for receiving data...\n");
if((retv=read(fd,buf,sizeof(buf)))==-1)
perror("read");
break;
if(strstr(buf,"\r"))
strcat(recvbuf, buf);
printf("recv %s \n",recvbuf);
bzero(recvbuf, sizeof(recvbuf));
else strcat(recvbuf, buf);
else if(FD_ISSET(0,&rfdr))
bzero(buf,length);
fgets(buf,length,stdin);
if((retv=write(fd,buf,length))==-1)
perror("Write");
printf("the number of char sent is %d\n",retv);
if(strstr(buf,"quit"))
printf("trans quit");
break;
if((flag_close=close(fd))==-1)
printf("Close the Device failur!\n");
return 0;
参考技术C woshilaizuorenwude
C 语言利用动态库实现C++中的对象
众所周知,C++ 是面向对象程序设计语言,而C语言并不是面向对象的程序设计语言。那么,C 语言能否实现面向对象程序设计么?它的实际意义又如何呢? 本文谈谈这个问题。
实际意义
C++ 语言比较庞大,在嵌入式系统中,C语言更加适合。比如在RT-Thread OS 中,OS 本身是C语言实现的。应用程序可以使用C++实现面向对象程序设计。但是许多场合需要C 语言接口。例如 当实现动态库模块时,好像无法使用C++来实现动态库。如此一来,程序注定是C与C++ 混搭模式实现。
当你采取了面向对象程序设计时,程序结构也随之改变。比如对象的创建。当你希望动态库也能够创建多个对象。
因此,如果C 语言能够实现简单的对象。能够带来许多便捷。使程序更加清晰。
使用C 语言实现简单的对象,是有实际意义的。
使用C 实现对象
通俗地讲,所谓对象就是一堆数据以及对其操作的函数构成的软件组件。所以我们可以写出一个及其简单的类
在C++中的创建一个类"Person"。
//Person.h
class rectangle
{
private:
int width
int height;
int pos_x;
int pos_y;
int color;
public:
rectangle(int width,int height); //constructor
~rectangle(); //destructor
void move(int x,int y);
void fillColor(int Color);
};
用C语言来表示上面的类,我们可以使用结构体,并用操作结构体的函数表示成员函数。
typedef struct _Rectangle
{
int width
int height;
int pos_x;
int pos_y;
int color;
} Rectangle;
void new_rectangle(int width,int height); //constructor
void delete_rectangle(); //destructor
void move(int x,int y);
void fillColor(int Color);
数据隐藏和static变量
我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义为全局的变量,但定义一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅只受此函数控制)。static 关键字则可以很好的解决这个问题。
在下面的例子中,你可以视同x 是一个全局变量,但是作用域仅限于_X 函数。局部变量用关键字 static 声明为“静态局部变量”
int _X(){
static x=0;
return x;
}
静态全局变量
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的。
实例化
C语言实现继承和多态 这篇文章讲的比较详细。我这里介绍另一种方式。使用C 语言的动态库实现对象实例化。
将上面的C 语言程序改写为:
typedef struct _Rectangle
{
int width
int height;
int pos_x;
int pos_y;
int color;
} ;
static struct _Rectangle Rectangle;
void new_rectangle(int width,int height);//constructor
void delete_rectangle(); //destructor
void move(int x,int y);
void fillColor(int Color);
注意:static 关键字。
将其编译成动态库函数。
每次导入一次动态函数rectangle,就新建一组static 数据。并且使用不同的动态库handle 来调用不同的对象。
以上是关于如何利用C语言,C++语言打开USB串口,然後对其发送信号? 跪求回答! 可行比加分!!的主要内容,如果未能解决你的问题,请参考以下文章