gpt4 book ai didi

c# - 使用 DMA 访问高速串口

转载 作者:太空狗 更新时间:2023-10-30 00:31:03 25 4
gpt4 key购买 nike

我在 C# 中使用串行端口组件,它运行良好!但问题是如何才能更快地处理高速(例如 2 Mbps)数据传输。

正如我对此所做的研究,我发现可以直接访问内存(使用像 this link 这样的 DMA)。谁能告诉我如何在我的应用程序中定义和使用它?

最佳答案

不,[c#] 标签使它遥不可及一百万英里。该网页上的代码片段不是真实的,它只是一个“模式”。它可以做 C# 做不到的事情,比如处理中断、获取缓冲区的物理内存地址、直接对设备寄存器进行编程。在那种可以执行C#代码的机器上,不算Micro Framework,这只能通过设备驱动来完成。

这将是一种可以在微 Controller 上运行的代码,一种不在保护模式操作系统上运行的处理器。即便如此,它仍然是拉伸(stretch)的,它通过未说明的魔法调用 DMA,例如从未真正开始传输。也没有 DMA Controller 的迹象,需要仲裁设备之间的总线访问。这是假代码。

当你使用真正的硬件时,你总是会得到一个设备驱动程序来负责与设备的对话。如果设备实际上支持 DMA,非常不寻常,那么设备驱动程序程序员就不会避免使用它。您在 C# 程序中使用的 SerialPort 类使用操作系统 api,它对任何类型的串行端口设备都是通用的。它将您的 I/O 请求传递给设备驱动程序以完成工作。

操作系统 api 和设备驱动程序之间的接口(interface)由 IOCTL 覆盖。 This MSDN page记录适用于 Windows 的那些。 IOCTL 和 api 之间的匹配非常接近,api 层非常薄。当您仔细观察时,很明显它们都与 DMA 没有任何关系。他们不能,这严格来说是一个驱动程序实现细节。

关于c# - 使用 DMA 访问高速串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30499210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com