统一因使用系统而冻结.IO.ports.serialport

本文关键字:冻结 IO ports serialport 系统 | 更新日期: 2023-09-27 18:22:51

我正在使用一个c#脚本通过串行发送东西。一切都很顺利。另一端是获取所有正确的数据。问题是,它只工作了大约110到30秒,然后团结就冻结了。我知道这更适合团结论坛,但我似乎没有收到任何回复,所以我来到了这里。

以下代码:

 using UnityEngine;
 using System.Collections;
 using System.IO.Ports;
 public class NewBehaviourScript : MonoBehaviour {
byte[] StepperAngle = new byte[1];
short servoAngle = 0;
byte[] servoArray = new byte[2];
SerialPort sp = new SerialPort("COM4", 9600);
// Use this for initialization
void Start () {
    sp.Open();
    sp.ReadTimeout = 1;
}
// Update is called once per frame
void Update () {
    StepperAngle[0] = (byte)(transform.localEulerAngles.y * 50/360);
    servoAngle = (short)(transform.localEulerAngles.z* 10e8); // turn fl2oat      into short. short is split right down center
    servoArray[0] = (byte)(servoAngle/10e8);
    servoArray[1] = (byte)(servoAngle % 10e8);
    sp.Write(StepperAngle,0,1); 
    //try{
        //print(StepperAngle[0]);
    //}catch(System.Exception){
        //print("stupid  " + stepperAngle);
    //}
  }
 }

而且,罪魁祸首是sp.Write线(StepperAngle[0]);当评论出来时,一切都很好。

统一因使用系统而冻结.IO.ports.serialport

Yaay。看起来问题实际上并不是sp.Write();调用,但实际上是输入缓冲区溢出。看来arduino代码在写,而unity代码没有在读。这导致团结冻结。如何删除sp.Write(StepperAngle,0,1);修好了,我不知道。