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 写入功能 永无止境的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个打字稿程序永无止境?

写入立体声后 WAV 写入功能无法同步

计划的 Firebase 功能 - 不写入 Firestore

为啥我的追加功能不再写入文件

云功能有时会在触发另一个云功能后写入 FireStore

波形写入功能不起作用,我做错了啥?