C# Win'7UART蓝牙在4000字节后静音

C# Win'7UART蓝牙在4000字节后静音,c#,bluetooth,uart,C#,Bluetooth,Uart,我有一个小的嵌入式系统,我已经装配了一个调试例程,通过蓝牙连接将完全相同的字节反复发送到PC 所讨论的速度为921600 bps 在成功接收大约4000字节后,我的应用程序从Win7中看不到更多内容 我完全相信,在流从我的应用程序中消失后,这些字节(即超过4000个字节)将继续被发送 我非常怀疑Windows出于某种原因没有提供蓝牙接收到的信息 我可以满怀信心地说 该应用程序确实正确地显示了前四千个奇数字节 应用程序在此之后不会显示任何内容 外部框继续发送字节 我对Win'7的怀疑加剧了,因为

我有一个小的嵌入式系统,我已经装配了一个调试例程,通过蓝牙连接将完全相同的字节反复发送到PC

所讨论的速度为921600 bps

在成功接收大约4000字节后,我的应用程序从Win7中看不到更多内容

我完全相信,在流从我的应用程序中消失后,这些字节(即超过4000个字节)将继续被发送

我非常怀疑Windows出于某种原因没有提供蓝牙接收到的信息

我可以满怀信心地说

该应用程序确实正确地显示了前四千个奇数字节 应用程序在此之后不会显示任何内容 外部框继续发送字节 我对Win'7的怀疑加剧了,因为

在我停止应用程序后,我的外部传输框继续运行。 两分钟后,我停止了外部传输箱 当时,PC和small box都没有交互 在两个系统都停止的情况下,我重新启动了PC应用程序几分钟 由于没有传输字节,应用程序收到了941字节,我真的不知道从哪里来的 这些字节来自上一个会话,我一遍又一遍地发送单字节0x37,这就是我在数据流中看到的 然后,我们再次启动小盒子生成数据,并看到了相同的行为:看到了4435个字节,之后我们从UART中没有得到任何字节,尽管在921600 bps时有两分钟的字节洪流

这是接收线程

 void RecieveThread()
  {
      int n;

      while (continueRecieving)
      {
          n = connectorPort.BytesToRead;

          byte[] bits = new byte[n];

          if (n > 0)
          {
              connectorPort.Read(bits, 0, n);
          }

          Write(bits);
      }
  }
以防有人觉得这很重要,这里是写息税惯例

 public void Write(byte[] b)
 {
     if (writting)
     {
         for (int i = 0; i < b.Length; i++)
         {
             storage[sPlace++] = b[i];

             pass += b[i].ToString("X2") + " ";

             if (sPlace % numericUpDown1.Value == 0)
             {
                 pass += "\r\n";
             }
         }
     }
 }
以前有没有人在使用C应用程序的Win7机器上体验过蓝牙字节消失的经历


有人能看到可能导致这种情况的明显或模糊的错误吗?

有几个提示可能有用,也可能没用:如果BytesToRead为零,您可能需要在那里进行睡眠。此外,即使n==0,也要分配一个数组并调用Write,这可能会不必要地烧掉周期。最后,您可能希望重用同一阵列,而不是在这样的高性能场景中一遍又一遍地重新创建它。@500 InternalServerError,我在数据突发之间添加了一点延迟。我现在在别处的软件中发现了一个错误;索引超出了界限。看来你是对的,或者至少离我很近,给了我一个想法。现在是越界索引。