Linux下串口读写通信

2023-05-16

int fd = 0;//串口通信句柄
#define RS485_NODE			"/dev/uart1"	//RS485节点

static pthread_mutex_t g_mtxChipwnd = PTHREAD_MUTEX_INITIALIZER;//加互斥锁
//打开串口句柄
fd = open(RS485_NODE, O_RDWR | O_NOCTTY, 0);
if (-1 == fd)
{
	printf("open serial port %s failed.\n", RS485_NODE);
	return;
}

//串口初始化
if(-1 == serial_init(fd, BAUNDRATE, DATAB8, STOPB1, NOPARITY, NOFLOWCONTROL))
{
	return;
}
void sendData2mcu(int fd, int addr)
{
	UINT8 cmdData[16] = {0};
	int cmdLen = 0;
	int iret = 0;
	//组装报文
	mkData(cmdData, &cmdLen);
	//加锁
	pthread_mutex_lock(&g_mtxChipwnd);
	iret = write(fd, (char *)cmdData, cmdLen);//向串口写入直接用write()
	//printf("%d ", iret);

	iret = serial_Readn(fd, (char *)cmdData, cmdLen);//从串口读取
	pthread_mutex_unlock(&g_mtxChipwnd);

}

//select读取串口返回内容
int serial_Readn(int connfd, char *vptr, int n)
{
	int	nleft;
	int	nread;
	char *ptr;
	struct timeval 	select_timeout;
	fd_set rset;

	select_timeout.tv_sec = 10;
	select_timeout.tv_usec = 0;

	ptr = vptr;
	nleft = n;

	while (nleft > 0)
	{
		select_timeout.tv_sec = 10;
		select_timeout.tv_usec = 0;
		FD_ZERO(&rset);//将你的套节字集合清空
		FD_SET(connfd, &rset);//加入你感兴趣的套节字到集合,这里是一个读数据的套节字connfd 
		//检查套节字是否有数据可读
		if(select(connfd+1, &rset, NULL, NULL, &select_timeout) <= 0) 
		{
			break;
		}
		if((nread = read(connfd, ptr, nleft)) < 0)
		{
			if(errno==EAGAIN || errno==EWOULDBLOCK || errno==EINTR)
			{
				nread = 0;
			}
			else
			{
                break;
			}
		}
		else if (nread == 0)
		{
			break;
		}
		nleft -= nread;
		ptr   += nread;
	}
	return(n - nleft);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下串口读写通信 的相关文章

随机推荐

  • 使用RGBD相机实现YOLOv3目标识别并测距,获取物体三维坐标

    设备环境 xff1a Ubuntu18 04 43 ros melodic 相机 xff1a 乐视相机 xff08 乐视遗产 xff0c 和奥比中光的 Astra Pro 同方案 xff0c 便宜 xff09 1 首先要安装一部分依赖 su
  • [jetson浅试] yolov5+deepsort+Tensorrt C++部署(Xavier AGX)

    1 简介 xff1a 这学期刚开学的时候搞的 xff0c 空下来整理一些 xff08 以后还是应该养成边搞边写博客的好习惯 xff09 本文主要是对yolov5 deepsort tensorrt A c 43 43 implementat
  • 阿里2014年校园题目最后一题答案及证明

    该题目来自cdsn的一位网友 xff08 可见http blog csdn net thebestdavid article details 11975809 xff09 xff0c 具体内容如下 xff1a 在黑板上写下50个数字 xff
  • 编程——两种list的翻转方法

    对于题目相信大家都比较熟悉了 xff0c 下面就直接上代码了 xff0c 其中没有给出list的creat函数 xff0c 有兴趣的同学可以自己实现 1 模板node的定义 template lt class T gt class TNod
  • 数组旋转新方法

    题目 xff1a 对一个int数组进行左右任意长度的旋转 xff0c 如 xff1a 原始数组为 1 2 3 4 5 xff0c 左旋两位 xff08 可用 2表示 xff09 得 3 4 5 1 2 xff0c 右旋两位 xff08 可用
  • 为什么链表操作过程中对于结构体指针,都要用malloc来开辟内存空间

    sqlist h ifndef SQLIST H define SQLIST H include lt stdio h gt include lt stdlib h gt define maxsize 1024 线性表的最大长度 typed
  • P1706 全排列问题

    原题 P1706 全排列问题 这题显然可以暴力 长达164行 include lt iostream gt include lt istream gt include lt ostream gt include lt cstdio gt i
  • 自动化专业考研方向简介

    自动化专业考研方向简介 xff08 一 xff09 大家在准备考研时 xff0c 想没想过 自己对什么感兴趣 xff1f 自己以后想干什么 xff1f 毕业后如何打算 xff1f 如果你认真考虑了这几个问题 xff0c 相信你的未来研究生生
  • UVA1185 Big Number

    原题 https www luogu com cn problem UVA1185 本题用到的定理的证明 https www cnblogs com weiliuyby p 5831991 html 题目 给出n 求n 的位数 从网上找到了
  • 浅谈威佐夫博弈

    如果不了解威佐夫博弈的话 xff0c 下面有威佐夫博弈的介绍 有两堆石子 xff0c 数量任意 xff0c 可以不同 游戏开始由两个人轮流取石子 游戏规定 xff0c 每次有两种不同的取法 xff0c 一是可以在任意的一堆中取走任意多的石子
  • YBT1325:循环比赛日程表

    我们先看题 我们仔细观察就会发现一下规律 xff1a 设一个数 设两个数 且 1 在的范围内 有 2 在的范围内 有 3 在的范围内 有 以上三条我都验证过了 正确 所以代码就出来了 include lt iostream gt using
  • Codeforces Contest #1553 A : Digit Sum 题解

    题目链接 Digit Sum 题面 将上面一大坨翻译一下 xff0c 就是 xff1a 定义函数的数字和 给出 求有多少个满足且 若模余 xff0c 则成立 一开始想是输出的下取整 xff0c 最后的结果 xff1a 没有考虑到的情况 xf
  • Atcoder Beginner Contest 100 - 题解

    A 原题 Happy Birthday 本题其实很水 只需要输入这两个整数 xff0c 如果中有一个大于 就输出 xff0c 否则输出 Yay include lt bits stdc 43 43 h gt using namespace
  • ubuntu 18.04 server 扩容(LVM)磁盘 解决磁盘不足的情况 (亲测)

    因为发现我的本地server出现磁盘满了的情况 所以进行lvm的扩容 截图的都是扩容后的 所以忽略容量 1 查看磁盘情况 df span class hljs attribute h span 原本发现 dev mapper ubuntu
  • 欢迎使用CSDN-markdown编辑器

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • 工作一年,辞职复习半年,考杭电计算机的经验分享

    工作一年 xff0c 辞职复习半年 xff0c 考杭电计算机的经验分享 如果 xff0c 毕业了工作顺利的人大概率是不会去考研的 xff0c 去考研的人 xff0c 大概率是想改变的 题记 2019 4 6 关于我 纠结的人生 为什么考研
  • CSS表格样式

    文章目录 CSS表格样式caption side 标题位置border collapse 边框合并border spacing 边框间距css样式 xff08 推荐使用 xff09 CSS表格样式 caption side 标题位置 语法
  • Android使用Annotations注解优化代码

    文章目录 Android使用Annotations注解优化代码Null 注解Typedef 注解Resource Type 注解Threading 注解Value Constraints 注解Overriding Methods 注解Ret
  • C语言strstr函数

    函数strstr定义 xff1a char strstr const char str1 const char str2 xff1b 位于头文件 string h 中 作用 xff1a strstr函数用于判断字符串str2是否为字符串st
  • Linux下串口读写通信

    span class token keyword int span fd span class token operator 61 span span class token number 0 span span class token p