【发布时间】:2017-01-12 01:36:28
【问题描述】:
我正在尝试通过 UART 将浮点数据从 STM32 板发送到计算机。 我通过 UART 发送浮点数据为 4 帧 - 4x8bits。我已经制作了一个将这些帧转换回浮点数的函数。
我的问题是我应该怎么做才能将 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<Single> list = new List<Single>();和 RxHandler 中的list.Add(ToFloat(....) ); -
在 RxHandler 错误“非静态字段、方法或属性 'Program.list' 需要对象引用时如何引用“列表”
-
您需要在此数据链路上施加某种协议(即带有完整性检查的消息帧)。您当前的代码似乎没有使用任何东西来维护消息框架。例如。丢失一个字节,然后您开始将未对齐的数据转换为垃圾浮点值。一种方案见stackoverflow.com/questions/16177947/…
-
对不起,因为你使用静态方法它必须被定义为静态(在
static Main前面的类Program中:static Listlist = new List ();跨度> -
如果您想在读取所有值后将列表写入(人类可读)文件,请将
File.WriteAllLines(filename, list.Select(p => p.ToString()));放在com.Close();之后
标签: c# serial-port uart rs