Я хотел создать тестовую утилиту, которая постоянно отправляет 0xAA через последовательный порт, без пробелов, навсегда. Меня не волнует RX.
Я использовал таймер, чтобы сохранить буфер заполненным, и следил за тем, чтобы BytesToWrite ожидал ниже его значения ниже порогового значения, прежде чем записывать больше данных в буфер.
В качестве альтернативы я мог бы не использовать таймер, но обновил последовательный порт в AsyncCallback, но я хотел сделать это так для развлечения. Вы можете просмотреть label11, чтобы увидеть заполненный и пустой буфер.
Обратите внимание, что вы можете обойтись без BeginWrite без EndWrite в течение короткого времени, но в итоге у вас закончатся ресурсы. Я в основном просто вставляю фиктивный 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);
}
}