Problem:
Die Funktion DelayTicks (lange Ticks) wird verwendet, um präzise Verzögerungen zu erstellen:
Code: Select all
private void DelayTicks(long ticks)
{
var start = Stopwatch.GetTimestamp();
while (Stopwatch.GetTimestamp() - start < ticks)
{
// Busy wait
}
}
Umgebung:
Windows: Genaues Verhalten
Linux-ARM: Inkonsistentes Timing
.NET-Version: [Geben Sie die Version an, z. B. .NET 7]
Gerät: Orange PiWas ich versucht habe:
Verifiziertes Stopwatch.IsHighResolution – es gilt auf beiden Plattformen.
Berechnung der Tickdauer mithilfe von Stopwatch.Frequency angepasst.
Versuch, Task zu verwenden. Delay oder Thread.Sleep für Verzögerungen, aber sie bieten nicht die für die Anwendung erforderliche Präzision.
Fragen:
Gibt es ein bekanntes Problem mit Stopwatch oder hochauflösende Timer auf Linux-ARM-Plattformen?
Gibt es bessere Alternativen, um präzise Verzögerungen auf Linux-ARM zu erreichen?
Könnte dies damit zusammenhängen, wie der Linux-Kernel mit hochauflösenden Timern umgeht?
Jede Anleitung oder alternative Vorgehensweise wäre sehr dankbar!