FTDI 写函数永无止境
FTDI Write function Never ending
我有一个 FTDI 写入功能,当程序是 .net3.5 时,它可以工作,但我一直在更新它,所以它现在可以在 .net 4.0 上运行,现在我的 FTDI 写入功能没有 return进入后
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 if check。
我的问题是可能导致此问题的原因以及我该如何解决它。
在 dot net3.5 到 4.0 中,他们更改了此类设备的定时器和设置,首先将定时器设置为您想要的,但是不要使用变量和吸气剂以及 setter,因为它们将无法工作,因为windows 使用它们的方式 使用常量和 uint 并确保为读取和写入提供足够的时间(读取通常比写入长)记住时间以毫秒为单位完成这应该有效,因为我遇到了同样的问题当我做了一个开关
所以要点设置读写超时
不要使用 getter 和 setters
确保它们是常量单位
我有一个 FTDI 写入功能,当程序是 .net3.5 时,它可以工作,但我一直在更新它,所以它现在可以在 .net 4.0 上运行,现在我的 FTDI 写入功能没有 return进入后
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 if check。
我的问题是可能导致此问题的原因以及我该如何解决它。
在 dot net3.5 到 4.0 中,他们更改了此类设备的定时器和设置,首先将定时器设置为您想要的,但是不要使用变量和吸气剂以及 setter,因为它们将无法工作,因为windows 使用它们的方式 使用常量和 uint 并确保为读取和写入提供足够的时间(读取通常比写入长)记住时间以毫秒为单位完成这应该有效,因为我遇到了同样的问题当我做了一个开关
所以要点设置读写超时
不要使用 getter 和 setters
确保它们是常量单位