linux下串口编程之困惑
最近准备做一个GNome下的应用程序,是与一个外部设备通过串口通信。对于linux下的串口通信,小弟有一些困惑,希望大家能够指点。
1,我做的这个应用程序是希望独占一个串口,请问我用fopen的函数打开串口后,别的程序可以操作它吗?有没有独占打开串口的方法,既不让别的程序打开串口。
2,我对串口的理解是,由于串口有rx与tx,所以读写是相对独立的,所以读写并不需要遵循相应的时序,即我在读串口的同时,其实也可以写串口,写串口的同时,也可以读串口,对吗?
3,由于外部设备可以独立地向PC通过串口发送数据,所以,PC端需要在串口有数据到达就接受,但数据合适到达并不确定,我想用异步的模式来操作串口,并不想不断地去读串口数据。我打算用select方法来做。
我想代码应该如下:
while(1)
{
...
ret = select(serialPort, &rdfds, NULL, NULL, NULL);
...
}
但我想的问题是,如果调用了上述接收函数,它就会一直在while循环中,这时程序的其它代码都不能执行,比如PC向串口发送数据到设备,比如GNome窗口的响应,对吧?
我想到的方法有二:
一,将ret = select(serialPort, &rdfds, NULL, NULL, NULL);这段代码加到GNome中的事件轮询机制中去,但我还不晓得方法。
二,fork一个子进程,专门负责接收串口数据。这时,父进程依然可以向串口写数据,并不需要与子进程同步,对吗?
我希望大家能够给些建议。
4,有没有别的方法,既可以实现串口的异步接收数据,又不用新的进程或线程的方法,并且不影响程序其它部分的功能?
1,我做的这个应用程序是希望独占一个串口,请问我用fopen的函数打开串口后,别的程序可以操作它吗?有没有独占打开串口的方法,既不让别的程序打开串口。
2,我对串口的理解是,由于串口有rx与tx,所以读写是相对独立的,所以读写并不需要遵循相应的时序,即我在读串口的同时,其实也可以写串口,写串口的同时,也可以读串口,对吗?
3,由于外部设备可以独立地向PC通过串口发送数据,所以,PC端需要在串口有数据到达就接受,但数据合适到达并不确定,我想用异步的模式来操作串口,并不想不断地去读串口数据。我打算用select方法来做。
我想代码应该如下:
while(1)
{
...
ret = select(serialPort, &rdfds, NULL, NULL, NULL);
...
}
但我想的问题是,如果调用了上述接收函数,它就会一直在while循环中,这时程序的其它代码都不能执行,比如PC向串口发送数据到设备,比如GNome窗口的响应,对吧?
我想到的方法有二:
一,将ret = select(serialPort, &rdfds, NULL, NULL, NULL);这段代码加到GNome中的事件轮询机制中去,但我还不晓得方法。
二,fork一个子进程,专门负责接收串口数据。这时,父进程依然可以向串口写数据,并不需要与子进程同步,对吗?
我希望大家能够给些建议。
4,有没有别的方法,既可以实现串口的异步接收数据,又不用新的进程或线程的方法,并且不影响程序其它部分的功能?
...全文
相关推荐
linux下串口编程简单实例
本文将基于提供的文件信息,深入探讨Linux下的串口编程基础,包括串口设备的基本概念、配置方法以及实际编程中的应用实例。
Linux c++多线程串口编程demo
本示例"Linux c++多线程串口编程demo"聚焦于利用多线程技术实现串口通信,这是一种常见的硬件接口,用于设备之间的数据交换。下面我们将深入探讨这个demo涉及的知识点。1.
linux串口编程实例
在Linux系统中,串口通信是一种常见的硬件接口技术,用于设备间的双向数据传输。本教程主要探讨的是如何在Linux环境下进行串口编程,通过提供的源码实现串口的基础配置,并根据配置文件动态调整串口设置。
Linux串口编程详解
Linux串口编程详解串口编程是计算机科学中的一种重要技术,它允许计算机与外部设备进行通信。编程语言中串口编程的实现方式有多种,包括使用C语言、Java语言等。
linux串口编程
总结来说,Linux串口编程涉及硬件接口的理解、设备文件的访问控制、编程接口的使用、串口参数的配置以及错误处理和流控机制。掌握这些知识点,能让你在需要进行串口通信的项目中游刃有余。


