.NET core 3.0 System.IO.Ports SerialPort все время использует 5-10% CPU на RPI - PullRequest
0 голосов
/ 27 февраля 2019

Когда я пытаюсь читать с последовательного порта (uart) в Linux на RaspberryPi, я всегда получаю нагрузку на процессор 5-10% в цикле.Поскольку SerialPorts должен блокировать, это не должно использовать слишком большую загрузку процессора, или я ошибаюсь?

Я пробовал два кода:

Простой код

var port = new SerialPort("/dev/ttyUSB0", 57600);
port.Open();
while (true)
{
    if (port.BytesToRead > 0)
    {
    while (port.BytesToRead > 0)
        Console.Write($"{port.ReadByte().ToString("X2")} ");
    Console.WriteLine("");
    }
    Thread.Sleep(100);
}

AdvancedКод

static int blockLimit = 100;
static void Main(string[] args)
{
    var port = new SerialPort("/dev/ttyUSB0", 57600);
    port.Open();
    byte[] buffer = new byte[blockLimit];
    Action kickoffRead = null;
    kickoffRead = delegate
    {
        port.BaseStream.BeginRead(buffer, 0, buffer.Length, delegate (IAsyncResult ar)
        {
        try
        {
            int actualLength = port.BaseStream.EndRead(ar);
            byte[] received = new byte[actualLength];
            Buffer.BlockCopy(buffer, 0, received, 0, actualLength);
            raiseAppSerialDataEvent(received);
        }
        catch (IOException exc)
        {
            handleAppSerialError(exc);
        }
        kickoffRead();
        }, null);
    };
    kickoffRead();

    while (true)
        Thread.Sleep(1000);
}

private static void handleAppSerialError(IOException exc)
{
    throw new NotImplementedException();
}

private static void raiseAppSerialDataEvent(byte[] received)
{
    Console.WriteLine(BitConverter.ToString(received));
}

Оба с одинаковым результатом: два процесса, которые используют вместе 5-10% загрузки процессора htop cpu%

Использование .NET Core 3.0 Preview 2 и System.IO.Ports 4.6.0-preview-19073.11 на RaspberryPi 3b+ работает с HypriotOS 1.10.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...