使用硬件通信进行高级编程

Posted

技术标签:

【中文标题】使用硬件通信进行高级编程【英文标题】:High-level programming with hardware communication 【发布时间】:2013-06-15 15:33:53 【问题描述】:

在控制实际硬件运动的 C# 应用程序中,通信是如何进行的?

如果 PC 通过 USB 连接到其他硬件并且已经为设备完成了低级编程(假设使用 C),高级 C# 如何发送和接收来自设备?是否只是连接到 C 代码的 DLL 并以这种方式执行的情况?

我正在寻找关于驱动程序场景的这种高级编程的一般性讨论。然而,这更像是一个假设场景,因此我无法提供任何细节来为您提供线索。

谢谢。

【问题讨论】:

【参考方案1】:

是的,通常有一个带有您调用的 C 导出的 .DLL。

有时您可能会发现很难使用 P/Invoke 直接从 C# 调用某些导出。在这种情况下,您通常可以编写一个简单的 C DLL 来包装调用并提供与 P/Invoke 更兼容的替代接口。

我还必须与看似文件的设备进行交互。在这些情况下,您必须使用特殊的文件名语法通过 Windows API CreateFile() 函数打开文件:

"\\.\deviceName"

我还不得不使用 P/Invoke 来使用一些 Windows API USB 函数,例如描述的here。

如您所见,有几种方法可以访问硬件库。

【讨论】:

【参考方案2】:

与硬件的通信通常涉及分层堆栈。

application
---------------------------------------------------
glue code (assembly) (managed code)
---------------------------------------------------
user space library (static or DLL) (unmanaged code)
---------------------------------------------------
user space driver interface
---------------------------------------------------
kernel space driver
---------------------------------------------------
hardware

其中一些层可能是可选的。

【讨论】:

以上是关于使用硬件通信进行高级编程的主要内容,如果未能解决你的问题,请参考以下文章

Java高级特性 第8节 网络编程技术

Unix环境高级编程(十六)进程间通信

Java自用高级编程-7.网络编程

学习shell第三天

Rust编程语言入门之高级特性

编程的发展史及Python简介