Я пытаюсь отправить данные плавания с платы STM32 на компьютер через UART. Im, отправляющий данные по плаванию через UART как 4 кадра - 4x8бит. Я уже создал функцию, которая преобразует эти кадры обратно в float.C# сохранение данных COMport в файл
Мой вопрос заключается в том, что я должен сделать, чтобы складывать как 1000 поплавков в массив, чтобы впоследствии использовать его - вне Handler.
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);
}
}
Используйте экземпляр коллекции (например, List), чтобы сохранить полученные данные. 'Список list = new Список ();' и в RxHandler 'list.Add (ToFloat (....));' –
Как я могу ссылаться на «список», когда в RxHandler Ошибка «Требуется ссылка на объект для нестатического поля, метода или свойства «Program.list». – Jejh
. В этой связи вам необходимо наложить некоторое действие протокола (т. е. кадр сообщения с проверкой целостности). В вашем текущем коде не используется ничего для поддержки кадрирования сообщений. потерять байт, и вы начнете преобразовывать неверные данные в значения поплавка мусора. См. http://stackoverflow.com/questions/16177947/identification-of-packets-in-a-byte-stream для одной схемы. – sawdust