C# FTDI写入功能永不终止
我有一个FTDI写函数,它在程序运行.net3.5时起作用,但我一直在更新它,因此它现在在.NET4.0上运行,现在我的FTDI写函数在输入后不会返回C# FTDI写入功能永不终止,c#,.net-4.0,.net-3.5,ftdi,C#,.net 4.0,.net 3.5,Ftdi,我有一个FTDI写函数,它在程序运行.net3.5时起作用,但我一直在更新它,因此它现在在.NET4.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")
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);
}
}
private FT_HANDLE portHandle=0;
公共不安全整数写入(字节[]缓冲区、整数偏移量、整数计数)
{
if(portHandle==0)
{
抛出新IOException(“端口关闭”);
}
尝试
{
uint字节写入=0;
Status Status=Status.FT_其他_错误;
字节[]数据=新字节[计数];
for(int i=0;i
portHandle
在检查时不会陷入与0等价的状态。
我的问题是,是什么导致了这种情况,我该如何修复它。在dot net3.5到4.0中,他们会更改计时器和此类设备的设置,首先将计时器设置为所需的值,但是,不要使用变量、getter和setter,因为它们不会工作,因为windows使用它们的方式是使用常量和uint,并确保您为读和写(读通常比写长)提供足够的时间记住时间是以毫秒为单位的,这应该可以工作,因为我在切换时遇到了相同的问题 因此,要点设置读取和写入超时 不要使用getter和setter
确保它们是恒定的它工作正常吗?如果不是的话,你可能有一个被FTDI驱动程序屏蔽的假芯片。是的,这个设备已经使用了8年多,软件应该每年更新一次,当我改成.net 4.0时,它就停止工作了,所以它可以正确地与HyperTerm一起工作?如果是,您是否尝试过其他USB端口?您是否已将调试器设置为混合模式并查看本机堆栈?它在超级终端上工作(如果您的意思是这样的话)和混合模式您是指任何cpu设置?如果是,则调用satck top项是
[管理到本机转换]
,之前的项是[FTDI.Write(带参数)]
,请在项目属性中选择调试。选中“启用本机调试”。当它“挂起”时,中断调试器。在调用堆栈中,您可能应该启用查看所有代码。可能是您需要使用的“工具”、“选项”、“调试”下的其他选项。这会告诉你它在等什么。