请注意:虽然这个问题提到了Java,甚至是一个特定的Java库,但它实际上与Java无关,而是更多地涉及串行通信和设备驱动程序。因此,我认为任何在这些领域有经验的人都可以回答这个问题。
我已经在"Enterprise“工作了很长一段时间了,我正试图向低层次迈进,并了解更接近裸金属的东西。我试图理解串行端口和设备驱动程序,以及它们之间的关系,我只是没有在一些事情上从树中看到森林。
我花了很长时间思考如何在这里提出一个简洁的问题来解决我的主要精神障碍,我认为最好的方法就是用一个具体的例子来问,然后尝试概括这个解决方案(S)。
以下列例子为例:
有一个Java库,用于从串行端口读取/写入数据,称为JSerialComm。如果我想让我的Java应用程序直接与串口通信,我可以使用JSerialComm完成工作。
假设我是个电子学的家伙,我在面包板上做了一个令人印象深刻的电路。这个电路做什么并不重要,只是它有很多IO组件(LED,也许几个马达等等)。我想通过串口将这个电路连接到我的笔记本电脑上,然后通过JSerialComm (或一些类似的/替代库)从我的应用程序中控制它:
同样,我认为我们谈论的是哪种语言(Java、C++、Python等)并不重要。提前感谢!
发布于 2017-03-28 04:21:48
RS-232定义了信号的电气特性和定时,信号的含义,以及连接器的物理尺寸和引线。你的电路显然需要符合这一点。RS-232信号有从+3到+15的电压,和-3到-15的电压,如果你的组件不能处理+/-15 -例如,试图与它交谈可以释放神奇的烟雾。
要实现RS-232,由于信号级别几乎没有其他任何使用,您将需要一个信号转换器来将信号转换为您的MCU所使用的电压电平。MAX232就是这样的组件之一,它被用于用于该目的的大量设备中。有关如何工作的更多详细信息,请查看MAX232数据表。
至于驱动程序,您不需要创建一个,但是您必须编写应用软件来与它通信。您的计算机上的串口驱动程序指示操作系统如何与专用硬件对话。您的计算机可能不会有一个MAX232,但它将有其他组件,以实现类似的卷。操作系统驱动程序提供了访问一个小的发送和接收缓冲区的方法,以及一种检查诸如RTS和CTS等引脚状态的方法。我从未使用过JSerialComm,但它很可能是操作系统本机串口接口的简单包装器。
当您处于应用程序级别时,驱动程序主要公开输入和输出字节流。在许多方面,它可以被认为类似于网络流。您需要定义一个协议,您的设备将发言,这样您就可以发送信息,以打开您的马达和关闭您的LED。您不需要操作系统驱动程序,因为此时所有的通信都可以通过现有的串口驱动程序来完成。
https://softwareengineering.stackexchange.com/questions/345050
复制相似问题