首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux基础(串口编程

虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接通常特指那些与RS-232标准兼容的硬件或者调制解调器的接口。废话少讲,今天来解剖使用串口时的编程代码细节。...上面的代码是使用串口的第一步,来解释下都是啥意思。...来瞧瞧: 第21-22行,定义了一个用来配置串口属性的结构体: struct termios serial; bzero(&serial, sizeof(serial)); 第24行,将串口设置为raw...cfsetispeed(&serial, B9600); cfsetospeed(&serial, B9600); 第28-32行,设置串口控制属性(c_cflag),其中: serial.c_cflag...: tcsetattr(fd,TCSANOW,&serial); 当然,上面的 fd 就是系统中的某一个你想要设置的成上面那样的属性参数的串口,比如就拿粤嵌GEC210开发板来说,他有四个串口,其中第一个就已经被用于终端控制了

12.6K20

Linux编程阻塞和非阻塞IO)

Linux设备驱动中的阻塞和非阻塞I/0,简单来说就是对I/O操作的两种不同的方式,驱动程序可以灵活的支持用户空间对设备的这两种访问方式。...非阻塞应用程序通常使用select系统调用查询是否可以对设备进行无阻塞的访问最终会引发设备驱动中 poll 函数执行。...二、两种操作 阻塞地读取一个字符: char buf; fd = open("/dev/ttyS1",O_RDWR); ..... res = read(fd,&buf,1); //当串口上有输入时才返回...=1); //串口上没有输入则返回,所以循环读取 printf("%c/n",buf); 阻塞操作常常用等待队列来实现,而非阻塞操作用轮询的方式来实现。...非阻塞I/O的操作在应用层通常会用到select()和poll()系统调用查询是否可对设备进行无阻塞访问。select()和poll()系统调用最终会引发设备驱动中的poll()函数被调用。

5.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

Linux编程阻塞的概念)

阻塞。 好吧,再来一点营养。阻塞是啥意思呢? 就是水管堵住了!扭开水龙头没有水出来。...这个道理跟Linux下读取慢速设备(主要指管道和套接字)数据的情形非常相似,例如当我们在读取一个管道时,如果管道里面没有数据,那么我们什么都读不出来,于是就进入了所谓的“阻塞”状态了,说白了阻塞就是使得当前进程或者线程睡眠了的意思...那么再进一步,什么时候会阻塞呢?下面的表格简单描述了这些清空: ? 其中,读者指的是对管道文件拥有读权限的进程或线程(注意不是正在读),写者指的是对管道文件拥有写权限的进程或线程(注意不是正在写)。...除此之外,其实open()函数也会发生阻塞,比如用只读或者只写open一个管道文件的时候。因为一根只有出口或者只有入口的水管,是无法使用的呀!其实就是生活常识。嘿嘿!

2.1K30

嵌入式Linux串口编程

简介 嵌入式Linux串口编程Linux系统下的编程没有什么区别,系统API都是一样的。...嵌入式设备中串口编程是很常用的,比如会对接一些传感器模块,这些模块大多是RS232或者RS485接口,对于软件层面上来说,RS232与RS48区别不大。...RS232与RS485在使用上的区别,RS232是全双工的,只能对接一个设备串口设备。RS485是半双工的总线协议,一般可以挂多个传感器设备,半双工的意思是同时只能有一个设备向串口发数据。...用到的API函数 函数 说明 open 打开设备,用于打开串口设备 fcntl 修改设备描述符属性参数 isatty 检测打开的描述符是否指向一个终端 tcgetattr 用来获取串口终端参数 cfmakeraw...old_cfg) < 0){ perror("tcgetattr"); return -1; } if(fcntl(fd,F_SETFL,0) < 0)//恢复为阻塞模式

13K20

串口编程入门

嵌入式系统中,诸多设备都可以通过串口来控制,比如WiFi、蓝牙、RFID等等,因此在嵌入式设备中使用串口就显得特别重要。 首先,有几个概念简单澄清一下。...RS485和RS232一样都是基于串口的通讯接口,数据收发的操作是一致的,RS485采用差分信号负逻辑,+2V~+6V表示低电平,- 6V~-2V表示高电平。...平常说的串口、COM口指的是物理接口,它们通常有9针和4针两种样式标准。...4针串口标准中的四个管脚分别是:VCC、TX、RX和GND,其中TX和RX分别是发送端(Transmit)和接收端(Receive)。...下面就来具体看看串口是怎么回事。 串口通常指的是串行接口,这跟并行接口相对而言。比如有一个8-bits的数据从A发往B,并行和串行的区别分别如下面所示。 ?

1.8K10

网络编程 同步,阻塞,异步,非阻塞之区别

网络编程之同步,阻塞,异步,非阻塞 同步:函数没有执行完不返回,线程被挂起 阻塞:没有收完数据函数不返回,线程也被挂起 异步:函数立即返回,通过事件或是信号通知调用者 非阻塞:函数立即返回,通过select...回答:同步、异步、阻塞和非阻塞的概念在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。 下面是我对这些术语的理解。...如果执行部 件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重 的错误)。...非阻塞阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。对象的阻塞模式和阻塞函数调用对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但是并不是一一对应的。...阻塞对象上可以有非阻塞的调用方式,我们可以通过一定的API去轮询状 态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于非阻塞对象,调用特殊的函数也可以进入阻塞调用。

27720

Linux下Socket编程(三)——非阻塞select的使用简介

简介 什么叫阻塞和非阻塞 select fd_set类型的变量相关宏定义 fcntl 实例 select总是返回1的问题。...什么叫阻塞和非阻塞 阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回。...使用Select就可以完成非阻塞(所谓非阻塞方式non- block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同...NULL以形参传入,即不传入时间结构,就是将select置于阻塞状态。...SELECT_fncl.png 示例 客户端创建socket 调用fcntl设置阻塞模式 调用connect开始连接。

3.9K10

windows下的串口编程串口操作类封装

以往都是在嵌入式设备中经常操作串口,或者使用QT的串口类。在Win32中处理串口也是有办法的,操作文件的打开和读写进行串口的操作。使用ReadFile、WriteFile函数。...基本步骤 使用Win32文件方式操作:打开串口(创建文件)->配置参数->发送(写文件)-->接收(读文件) 打开串口 打开串口的第一步是初始化或设置串口配置,目的是创建串口代理,整篇文章我们都将用文件句柄作为串口代理...串口数据读取过程 串口读取事件分为两个阶段: 第一个阶段:串口执行到ReadFile()函数时,串口还没有开始传输数据,所以串口缓冲区的第一个字节是没有装数据的,这时候总超时起作用,如果在总超时时间内没有进行串口数据的传输...第二:串口进行了数据的传输。 成功的进行一次串口数据的传输和读取,只有总超时和间隔超时相互参与配合才能完成。 发送数据 串口数据发送多作为写文件处理的,程序员可以应用文件操作函数发送数据到串口。...程序员可以应用文件操作函数从串口接收数据。用ReadFile函数接收串口的数据。

2.2K10

Java并发编程阻塞队列

Java并发编程阻塞队列   在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList)...但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。...2.阻塞队列中的几个主要方法:   阻塞队列包括了非阻塞队列中的大部分方法,上面列举的5个方法在阻塞队列中都存在,但是要注意这5个方法在阻塞队列中都进行了同步措施。...在并发编程中,一般推荐使用阻塞队列,这样实现可以尽量地避免程序出现意外的错误。   ...参考资料:   《Java编程实战》 http://ifeve.com/java-blocking-queue/ http://endual.iteye.com/blog/1412212 http

97640

C# 地磅串口编程

现实生活中,我们会经常遇到一些串口的设备,例如:IC卡、RFID等; 然后最近有一个项目用到了地磅,这里也是通过串口通讯方式进行数据交互,说实话,地磅这东西,实在有点不方便。...然而,串口编程,不得不说下串口的DCB(Device Control Block)结构,做过串口编程的人应该都知道,而我这里也只是记录下自己学过的东西,高手路过的请勿吐槽。...一般串口编程都是通过C/C++ 来通信,然后.Net 也封装了SerialPort的控件,但是这里还是简单介绍下: 首先,看看DCB的结构: 1 //Device Control Block...———————————————————————————————————————————— 其实这里通过SerialPort控件来实现串口编程会快捷点,而相关的使用方法,网上很多地方可以找到。...只是首次遇到串口编程的问题,想了解相关内容……

2.7K20

linux阻塞与非阻塞(connect连接超时)

阻塞connect详情介绍可以参见文章:https://blog.csdn.net/qq_41453285/article/details/89890429 一、非阻塞connect概述 man手册...解析文档,非阻塞connect如何使用: ①当我们将sock设置为非阻塞之后,使用connect去连接服务端,即使服务端开启了,connect系统调用也不会连接成功,connect而是以失败告终,并返回错误...②但是非阻塞connect返回的错误是有讲究的: 如果非阻塞connect返回的错误是EINPROGRESS,代表不是connect系统调用出错了,而是connect可能会在后面才会建立完整地连接(...,进一步来等待非阻塞connect客户端与服务端建立完整地连接,在等待的过程中,如果非阻塞connect建立成功了,客户端的sock_fd就会变成可写的(这个在本人的IO复用文章中介绍过,见下图) ④当非阻塞...在有些系统(比如Linux)上返回-1,而在有些系统上(比如源自伯克利的UNIX)返回0 这些问题没有一个统一的解决办法 三、编码演示案例 #include #include <stdlib.h

6.1K10

8_UART串口编程

第八章 UART串口编程 8.1 UART介绍 8.1.1 UART串口简介 ​ UART全称是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter...8.2.2.4 UART1_UCR2: ​ 控制寄存器2:主要用于设置串口的发送帧格式,帧长,是否奇偶校验,是否忽略有RTS,软复位等,本章只使用其中的5位,后续UART编程会详细讲解。...正好默认值都为0满足我们的时钟需求,所以后续的编程实验,串口时钟这部分可以不设置,用默认值就可以了。 ​...**注明:**整个完整工程代码目录在裸机Git仓库 NoosProgramProject/(8_UART串口编程/002_uart_txd_char)文件夹下。...**注意:**整个完整工程代码目录在裸机Git仓库 NoosProgramProject/(8_UART串口编程/005_printf_test文件夹下,可用于其它程序使用串口来打印或接收字符串。

1.4K10

玩转 PHP 网络编程全套阻塞与非阻塞 IO

阻塞IO与非阻塞IO 我觉得光解释不行的,你得撸上代码去体验 阻塞IO【阻塞的文件描述符】: 执行系统调用【读写请求】时不会立即返回,需要等待就绪事件【读写事件】发生,操作系统会让程序挂起来【SLEEPING...】 非阻塞IO: 执行系统调用后,程序会立即返回,如果事件没有发生会返回-1,同时会带有出错信息如EAGAIN,EWOULDBLOCK,EINPROGRESS 那我们下面来写一个非阻塞的TCP服务 非阻塞的...IO【非阻塞的文件描述符】 设置非阻塞的函数 ps:在c语言里一般用fcntl去控制文件描述符 socket_set_nonblock($socket); stream_set_blocking( resource...sleep(1); } } } socket_close($sockefd); socket_close($connfd); 测试的结果【非常建议动手撸,不然没法体会阻塞与非阻塞...同样的我们不设置为非阻塞模式时,它默认是阻塞IO

1.3K20

编程基础】Windows下如何玩转串口编程

在windows下,各种外设都被看成文件,这个跟Linux下看成设备节点类似,所以串口当然是被看成是一个文件。既然被看成文件,所以打开和读写都跟文件类似。...串口发送其实就是串口作为文件的写操作,API函数是WriteFile,比如下面的实例就向同步模式打开的串口发送buffer中的数据: WriteFile(hComm, buffer, dwSendLen..., &dwActlen, NULL); 同步模式发送数据时,是阻塞式的,也就是没有发送完是不会返回来。...串口接收其实就是串口作为文件的读操作,API函数是ReadFile,下面就是同步模式下的将串口数据读到buffer中: ReadFile(hComm, buffer, dwReadLen, &dwActlen..., NULL); 同步模式接收数据时,也是阻塞式的,在希望读取的字节数没有完成时是不会返回的。

2.8K50

Java网络编程--NIO非阻塞网络编程

从Java1.4开始,为了替代Java IO和网络相关的API,提高程序的运行速度,Java提供了新的IO操作非阻塞的API即Java NIO。...核心代码示例片段: // 创建网络服务端 ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); // 设置为非阻塞模式...Selector实现一个线程处理多个通道的核心在于事件驱动机制,非阻塞的网络通道下,开发者通过Selector注册对于通道感兴趣的事件类型,线程通过监听事件来触发相应的代码执行。...处理连接的逻辑 } if (key.isReadable()) { //处理读数据的逻辑 } iterator.remove(); } } NIO网络编程完整代码...服务端代码示例: // 结合Selector实现的非阻塞服务端(放弃对channel的轮询,借助消息通知机制) public class NIOServer { public static void

86020

linux系统编程之信号(三):信号的阻塞与未决

进程可以选择阻塞(Block)某个信号,SIGKILL 和 SIGSTOP 不能被阻塞。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。...虽然它的处理动作是忽略,但在没有解除阻塞之前不能忽略这个信号,因为进程仍有机会改变处理动作之后再解除阻塞。 3....阻塞信号集也叫做当前进程的信号屏蔽字(Signal Mask),这里的“屏蔽”应该理解为阻塞而不是忽略。...;         flag = 1;     } } 如果将程序中的37,57,58,75关于flag变量的语句注释掉,则输出如下: simba@ubuntu:~/Documents/code/linux_programming...参考:《APUE》、《linux c 编程一站式学习》

2K00

python串口编程整理(更新完)

python的串口网上有很多例子,这里了只是把认为好的整理到一起。 首先,应该安装serial模块,还能开始后续的操作。...我用的python2.6,serial模块可以在这里下载安装serial模块下载 1,字符串的发送接收 短接串口的2、3脚,创建一个文本,如: import serial t = serial.Serial...list.decode("hex") print hexer 需要注意一点,如果字符串list的长度为奇数,则decode会报错,可以按照实际情况,用字符串的切片操作,在字符串的开头或结尾加一个'0' 假如在串口助手以十六进制发送字符串...那么,串口方面的就整理完了。 源代码 额外一个小知识: 索引:也称作是下标操作,那么python就会为你抓取序列中对应位置的项目。

2.5K20
领券