我想创建一个测试实用程序,它可以不断地从串行端口发送 0xAA,没有间隙,永远。我不在乎RX。
在我将更多数据写入缓冲区之前,我使用了一个计时器来保持缓冲区满,并监控 BytesToWrite 等待低于阈值。
我也可以不使用计时器,而是刷新 AsyncCallback 中的串行端口,但我想这样做是为了好玩。您可以查看 label11 以查看缓冲区的填充和清空。
请注意,您可以在短时间内在没有 EndWrite 的情况下使用 BeginWrite,但最终您将耗尽资源。我基本上只是放入一个虚拟的 EndWrite。
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
timerFill.Enabled = checkBox2.Checked;
}
private void timerFill_Tick(object sender, EventArgs e)
{
GenerateSquareWave();
}
int const bufferSize = 256;
void GenerateSquareWave()
{
int k = serialPort1.BytesToWrite;
label11.Text = k.ToString();
if (k < bufferSize)
{
byte[] data = new byte[bufferSize];
for (int i = 0; i < bufferSize; i++)
{
data[i] = 0xAA;
}
serialPort1.BaseStream.BeginWrite(data, 0, data.Length, new AsyncCallback((IAsyncResult ar) => serialPort1.BaseStream.EndWrite(ar)), null);
}
}