私はSTM32ボードからUART経由でコンピュータにフロートデータを送信しようとしています。 私はUART経由で4フレーム - 4x8bitsとしてフロートデータを送信しています。私はすでにこれらのフレームを浮動小数点に変換する関数を作成しました。c#COMportデータをファイルに保存
私の質問は、1000浮動小数点型のようにスタックに入れて、後で使用できるようにするためです。既存のToFloat方法スルー
class Program
{
static void Main()
{
SerialPort com = new SerialPort("Com3");
com.BaudRate = 9600;
com.Parity = Parity.None;
com.StopBits = StopBits.One;
com.DataBits = 8;
com.Handshake = Handshake.None;
com.RtsEnable = true;
com.DataReceived += new SerialDataReceivedEventHandler(RxHandler);
com.Open();
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
com.Close();
}
private static void RxHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
int bytes = sp.BytesToRead;
byte[] buffer = new byte[bytes];
sp.Read(buffer, 0, bytes);
Console.WriteLine(ToFloat(new byte[] { buffer[0], buffer[1], buffer[2], buffer[3] }));
}
static float ToFloat(byte[] input)
{
byte[] fArray = new[] { input[0], input[1], input[2], input[3] };
return BitConverter.ToSingle(fArray, 0);
}
}
は、受信したデータを格納するコレクション(例えばリスト)のインスタンスを使用します。 –
RxHandler内で "list"を参照するにはどうすればいいですか? エラー "オブジェクトの参照が必要です(リスト参照は必要ありません):リスト list = new List ();およびRxHandler' list.Add(ToFloatメソッドまたはプロパティ 'Program.list' –
Jejh
このデータリンクには何らかのプロトコル(つまり、完全性チェック付きのメッセージフレーム)を課す必要があります。現在のコードでは、メッセージフレーミングを維持するために何も使用されていないようです。あなたは1バイトを失います。そして、ミスアライメントされたデータをガーベッジフロート値に変換し始めます.1つのスキームについては、http://stackoverflow.com/questions/16177947/identification-of-packets-in-a-byte-streamを参照してください。 – sawdust