中时讯通信建设有限公司网站营销网站的建造步骤
news/
2025/10/1 5:49:33/
文章来源:
中时讯通信建设有限公司网站,营销网站的建造步骤,做社交网站用什么语言,做个app好还是做网站好文章目录 注意两点#xff1a;一、设置原始模式二、设置收到数据的最小字节数返回代码 注意两点#xff1a;
一、设置原始模式
newtio.c_lflag ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/二、设置收到数据的最小字节数返回
tio.c_cc[VMIN] 1; /* 读数据时的最… 文章目录 注意两点一、设置原始模式二、设置收到数据的最小字节数返回代码 注意两点
一、设置原始模式
newtio.c_lflag ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/二、设置收到数据的最小字节数返回
tio.c_cc[VMIN] 1; /* 读数据时的最小字节数: 没读到这些数据我就不返回! */newtio.c_cc[VTIME] 0; /* 等待第1个数据的时间: * 比如VMIN设为10表示至少读到10个数据才返回,* 但是没有数据总不能一直等吧? 可以设置VTIME(单位是10秒)* 假设VTIME1表示: * 10秒内一个数据都没有的话就返回* 如果10秒内至少读到了1个字节那就继续等待完全读到VMIN个数据再返回*/代码
#include stdio.h
#include string.h
#include sys/types.h
#include errno.h
#include sys/stat.h
#include fcntl.h
#include unistd.h
#include termios.h
#include stdlib.h/* set_opt(fd,115200,8,N,1) */
int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{struct termios newtio,oldtio;if ( tcgetattr( fd,oldtio) ! 0) { perror(SetupSerial 1);return -1;}bzero( newtio, sizeof( newtio ) );newtio.c_cflag | CLOCAL | CREAD; newtio.c_cflag ~CSIZE; newtio.c_lflag ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/newtio.c_oflag ~OPOST; /*Output*/switch( nBits ){case 7:newtio.c_cflag | CS7;break;case 8:newtio.c_cflag | CS8;break;}switch( nEvent ) {case O:newtio.c_cflag | PARENB;newtio.c_cflag | PARODD;newtio.c_iflag | (INPCK | ISTRIP);break;case E: newtio.c_iflag | (INPCK | ISTRIP);newtio.c_cflag | PARENB;newtio.c_cflag ~PARODD;break;case N: newtio.c_cflag ~PARENB;break;}switch( nSpeed ){case 2400:cfsetispeed(newtio, B2400);cfsetospeed(newtio, B2400);break;case 4800:cfsetispeed(newtio, B4800);cfsetospeed(newtio, B4800);break;case 9600:cfsetispeed(newtio, B9600);cfsetospeed(newtio, B9600);break;case 115200:cfsetispeed(newtio, B115200);cfsetospeed(newtio, B115200);break;default:cfsetispeed(newtio, B9600);cfsetospeed(newtio, B9600);break;}if( nStop 1 )newtio.c_cflag ~CSTOPB;else if ( nStop 2 )newtio.c_cflag | CSTOPB;newtio.c_cc[VMIN] 1; /* 读数据时的最小字节数: 没读到这些数据我就不返回! */newtio.c_cc[VTIME] 0; /* 等待第1个数据的时间: * 比如VMIN设为10表示至少读到10个数据才返回,* 但是没有数据总不能一直等吧? 可以设置VTIME(单位是10秒)* 假设VTIME1表示: * 10秒内一个数据都没有的话就返回* 如果10秒内至少读到了1个字节那就继续等待完全读到VMIN个数据再返回*/tcflush(fd,TCIFLUSH);if((tcsetattr(fd,TCSANOW,newtio))!0){perror(com set error);return -1;}//printf(set done!\n);return 0;
}int open_port(char *com)
{int fd;//fd open(com, O_RDWR|O_NOCTTY|O_NDELAY);fd open(com, O_RDWR|O_NOCTTY);if (-1 fd){return(-1);}if(fcntl(fd, F_SETFL, 0)0) /* 设置串口为阻塞状态*/{printf(fcntl failed!\n);return -1;}return fd;
}/** ./serial_send_recv dev*/
int main(int argc, char **argv)
{int fd;int iRet;char c;/* 1. open *//* 2. setup * 115200,8N1* RAW mode* return data immediately*//* 3. write and read */if (argc ! 2){printf(Usage: \n);printf(%s /dev/ttySAC1 or other\n, argv[0]);return -1;}fd open_port(argv[1]);if (fd 0){printf(open %s err!\n, argv[1]);return -1;}iRet set_opt(fd, 115200, 8, N, 1);if (iRet){printf(set port err!\n);return -1;}printf(Enter a char: );while (1){scanf(%c, c);iRet write(fd, c, 1);iRet read(fd, c, 1);if (iRet 1)printf(get: %02x %c\n, c, c);elseprintf(can not get data\n);}return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923532.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!