FTDI 写入功能 永无止境
Posted
技术标签:
【中文标题】FTDI 写入功能 永无止境【英文标题】:FTDI Write function Never ending 【发布时间】:2015-04-03 17:35:56 【问题描述】:我有一个 FTDI 写入功能,该功能在程序为 .net3.5 时正在工作,但我一直在更新它,因此它现在可以在 .net 4.0 上运行,现在我的 FTDI 写入功能在进入后没有返回。
private FT_HANDLE portHandle = 0;
public unsafe int Write(byte[] buffer, int offset, int count)
if (portHandle == 0)
throw new IOException("Port Closed");
try
uint bytesWritten = 0;
Status status = Status.FT_OTHER_ERROR;
byte[] data = new byte[count];
for (int i = 0; i < count; i++)
data[i] = buffer[i + offset];
fixed (byte* pBuffer = data)
status = FT_Write(portHandle, pBuffer, (uint)count, ref bytesWritten);// the line that never returns
if (status == Status.FT_OK)
return (int)bytesWritten;
throw new IOException("Failed To Write: " + status.ToString());
catch (DllNotFoundException ex)
throw new NotSupportedException("Driver not installed", ex);
portHandle
如果检查,则不会陷入相当于 0 的情况。
我的问题是什么可能导致此问题,我该如何解决。
【问题讨论】:
工作正常吗?如果没有,你可能有一个被 FTDI 驱动程序砖化的假芯片。 是的,该设备已经使用了 8 年多,该软件应该每年更新一次,当我更改为 .net 4.0 时,它就停止工作了 那么它可以与 HyperTerm 一起正常工作吗?如果是这样,您是否尝试过其他 USB 端口?您是否将调试器设置为混合模式并查看本机堆栈? 它适用于超级终端(如果这就是你的意思)和混合模式你的意思是任何 cpu 设置吗?如果是的话,它确实如此,并且调用 satck 顶部项目是[Managed to Native transition]
而之前的项目是 [FTDI.Write(with the parameters)]
在项目属性中,选择调试。选中“启用本机调试”。当它“挂起”时,中断调试器。在调用堆栈中,您可能应该启用查看所有代码。可能是您需要使用的工具、选项、调试下的其他选项。这会告诉你它在等待什么。
【参考方案1】:
在 dot net3.5 到 4.0 中,他们更改了此类设备的计时器和设置,首先将您的计时器设置为您想要的,但是不要使用变量、getter 和 setter,因为它们无法工作,因为 windows 使用它们的方式使用常量和 uints 并确保你给了足够的时间来读写(读通常比写长)记住时间以毫秒为单位这应该可以工作,因为我在切换时遇到了同样的问题
所以要点设置读写超时
不要使用 getter 和 setter
确保它们是常量单位
【讨论】:
以上是关于FTDI 写入功能 永无止境的主要内容,如果未能解决你的问题,请参考以下文章