Um Kundenwünsche zu erfüllen und Kundenberichte über das Gerät auszufüllen, gibt es auch einen Abschnitt über die CPU-Auslastung. Da ich eine solche Aufgabe noch nie gemacht habe, habe ich einige Artikel zur "Google-Suche" im Überblick. Viele der Artikel stehen in direktem Zusammenhang mit der Linux-Programmierung, viele sprechen allgemein über CPU-Auslastung (nur theoretisch) und ich habe keinen Artikel über die Methode gefunden, wie das gemacht werden kann. Ok, es gibt einige: embedded.com .
Mich interessiert, wie DU solche Task-Timing-Jobs schon einmal gemacht hast? Mich interessiert die Methode und auch womit welches Tool gemacht wurde? Mit einer direkten Messung auf dem Oszilloskop (oder Logikanalysator) oder der Erfassung von Daten vom Oszilloskop und deren Nachbearbeitung? Welchen Zeitrahmen muss die CPU-Auslastung berechnen - der "geschäftigste Moment", wenn alle Interrupts vorhanden sind, da in diesem Fall die CPU-Auslastung viel größer ist als vielleicht 1 Millisekunde oder 1 Mikrosekunde später, wenn nur die Hintergrundschleife ausgeführt wird?
Vielleicht als Referenz, wie ich meinen ersten Ansatz zur CPU-Auslastung gemacht habe (ich weiß nicht, ob es der richtige Ansatz ist): Jeder Interrupt beim Start der Ausführung hat eine dedizierte PIN, die hoch geht, wenn der Interrupt beginnt, und niedrig wird, wenn der Interrupt endet. Es gibt auch die gleichen Ausbreitungsverzögerungen. Ich exportiere diese Signale über das Oszilloskop in eine Datei und bearbeite sie mit Oktave. Es ist immer noch ein Problem, welcher Zeitrahmen zu nehmen ist.
Bei Fragen schreiben Sie bitte in den Kommentarbereich
Die CPU-Auslastung ist wirklich nur ein grobes Maß für die Gesamtausfallsicherheit eines Echtzeitsystems. Daher ist die Antwort auf Ihre Frage, dass es sich in der Regel um einen langjährigen Durchschnittswert handelt.
Das eigentliche Kriterium ist, ob alle Softwareaufgaben ihre Fertigstellungstermine einhalten. Beachten Sie, dass dies sowohl Aufgaben umfasst, die durch Interrupts ausgelöst werden, als auch Aufgaben, die durch andere Arten von Ereignissen ausgelöst werden. Wenn sich die CPU-Auslastung 100 % nähert, wird die Zeit für die Ausführung von Aufgaben mit niedrigerer Priorität tendenziell willkürlich groß.
Die Verwendung von GPIO-Pins zur Angabe der Laufzeit einzelner Aufgaben ist eine gute Möglichkeit, um zu überprüfen, ob diese Fristen jemals überschritten werden.
Ein anderer Ansatz besteht darin, den Code selbst zu instrumentieren. Wenn Sie Zugriff auf einen freilaufenden Zähler haben (vielleicht ein Ersatz-Hardware-Zähler/Timer-Modul), können Sie zu Beginn jeder Aufgabe einen Schnappschuss seines Werts machen und am Ende der Aufgabe einen weiteren Schnappschuss machen und berechnen Sie die Differenz. Wenn dies jemals den erforderlichen Wert für diese Aufgabe überschreitet, geben Sie einen Fehler an.
Eine etwas andere Frage wäre, die erwartete CPU-Auslastung eines Systems zu berechnen, bevor es implementiert wird.
In diesem Fall betrachten Sie jede Aufgabe einzeln und schätzen, wie lange sie ausgeführt wird, wenn sie ausgelöst wird, und wie oft sie ausgelöst wird. Die Laufzeit dividiert durch die Auslöseperiode ergibt die CPU-Auslastung für diese Aufgabe allein.
Wenn Sie alle einzelnen Auslastungswerte addieren und einen Wert erhalten, der 100 % erreicht oder überschreitet, müssen Sie über Möglichkeiten nachdenken, die Arbeit neu zu verteilen – schnellere CPU, mehr CPUs, dedizierte Hardware für einige Aufgaben usw.
Bora
Pukaai
Mattman944
Bora
Pukaai