Bedeutung des ARM SysTick Timers gegenüber anderen Timern?

Ich komme von 8-Bit-MCUs und habe einen Systemtimer verwendet, um einen periodischen Interrupt zu generieren, der die Motivation hinter dem Cortex M SysTick-Timer zu sein scheint.

Gibt es eine architektonische Bedeutung für die Verwendung des SysTick-Timers im Vergleich zu anderen Timern auf den Cortex-M-MCUs?

Ist es nur eine Frage der Codierungspräferenz, dass Programmierer den SysTick-Timer als primären alle paar ms-Timer verwendet haben?

Das 800-seitige Referenzhandbuch ist ziemlich still zu SysTick, abgesehen davon, wie Sie Post-/Preskalare anwenden.

Ich sehe, dass es sich um einen Standard-Interrupt mit hoher Priorität handelt, also ist es der Weg des geringsten Widerstands für den System-Tick. Aber die Unterbrechungspriorität ist einstellbar.

(Der Ursprung dieser Frage ist, dass ich den STM32CubeMX verwende, um eine Projektvorlage zu generieren, und wenn Sie FreeRTOS hinzufügen, generiert der Cube eine Warnung, dass FreeRTOS einen separaten Timer von SysTick verwenden sollte ... was mich wundert, wenn es spielt hier noch etwas anderes eine Rolle? Ich habe nur angenommen, Sie würden den SysTick verwenden, weil das "wie die Dinge gemacht werden" ...).

SysTick ist ein standardmäßiger ARM-definierter Timer. Während die anderen Peripheriegeräte sind, die für die MCUs spezifisch sind und nicht Teil des Kerns sind.
Hat es eine bessere Latenz als ein peripherer Timer? Da es bei jedem Cortex M Standard ist, ist die Motivation die Portabilität des Codes?
Ich würde vermuten, dass der Latenzunterschied vernachlässigbar ist. Es ist ein Teil der Kerndefinition. Ich würde sagen, dass ein Kern in seinem Minimum einen minimalen Satz von HW haben sollte, um minimale SW ausführen zu können. Ganz ohne Timer geht es nicht.
Und ich denke, dies ist immer mit Blick auf ein Betriebssystem konzipiert. Man kann also einen einigermaßen universellen portablen Kernel haben und nur "Treiber" für die variable Hardware haben.
@Leroy105 Mit anderen Worten, Sie müssen verstehen, dass ARM ein Unternehmen ist (vor einem Jahr verkauft?), das KEINE CPUs herstellt, sondern stattdessen geistiges Eigentum (Masken und/oder synthetisierbare Quellen) für diejenigen anbietet, die solche Geräte direkt herstellen werden oder Vermittlung zur Fertigung. Dort halten sie sich aus dem Wettbewerb heraus. Diejenigen, die die IP von ARM kaufen, werden ihre eigenen Peripheriegeräte hinzufügen, um sich von anderen abzuheben. Der SysTick ist Teil der ARM CORE IP. Also alle ARM-Hersteller haben es. Nicht alle ARM haben jedoch etwas anderes. Das macht SysTick einzigartig. Sinn ergeben?
Ja das macht Sinn. Ich wurde mit dem FreeRTOS-Fehler von der Würfelsache erschreckt. Ich bin davon ausgegangen, dass FreeRTOS von SysTick getaktet wird. Vielleicht ist es das, und der Fehler bedeutet wirklich etwas anderes. Ich portiere etwas Code, um ein RTOS zu lernen und mich mit Cortex M vertraut zu machen. Das eigentliche Produkt wird immer noch ein 8051 sein.
Ich glaube fest daran, dass FreeRTOS von SysTick getaktet wird
@Jonk - ja, das verstehe ich total. Mir war nicht klar, dass es sich um eine definierte Kernfunktionseinheit jedes Cortex M handelt. Ich sehe nur einen 24-Bit-Timer, den jedes Anfängerbeispiel verwendet, und Sie beginnen sich zu fragen, ob mit diesem Timer eine magische Kraft oder etwas zusammenhängt ...
@ Leroy105 Wenn ich ein O / S schreiben würde (und das tue ich oft), dann würde ich SysTick auf der Grundlage dessen beurteilen, was ich zu erreichen versuche. Wenn ich die Verwendung verschiedener Timer nicht unterstützen, sondern einen Timer "hart codieren" wollte, auf den ich mich verlassen kann, dann würde ich den SysTick verwenden. Aber wenn ich "Konfigurierbarkeit" bieten wollte, würde ich jedem, der das O/S kompiliert, erlauben, einen zu verwenden, der es ihm erlaubt, herstellerspezifische Timer nach Belieben zu verwenden.
Eines Tages werde ich mein O/S sozusagen in die Wildnis schicken müssen. Es wurde entwickelt, um alle Arten von Konfigurationsoptionen zu ermöglichen, die nicht einmal FreeRTOS bietet, und es unterstützt extrem kleine Chips mit fast keinem RAM (indem einige der konstanten Daten pro Prozess stattdessen im Flash gehalten werden). Prioritäten werden unterstützt, Zum Beispiel. Aber wenn Sie die Anzahl der tatsächlichen Prozesse zur Kompilierzeit kennen und dann ihre Prioritäten angeben können, gibt es keinen Grund, warum diese Werte nicht im Flash sein können. Ich werde es sowieso veröffentlichen, wenn ich jemals die Zeit finde, es besser zu dokumentieren.
@jonk OT: Ist es ein kommerzielles/proprietäres Projekt? Oder persönlich/Open Source?
@EugenSch. Es ist meine eigene, mit deren Entwicklung ich um 1990 herum begann, als 32-Bit-CPUs nicht oft in eingebetteten Geräten zu finden waren. Als Ergebnis musste ich jedes einzelne Stück sorgfältig isolieren. Sie können sogar konfigurieren, ob Sie einzelne oder doppelt verknüpfte Listen (RAM vs. Einfüge-/Löschgeschwindigkeits-Kompromiss) wünschen oder nicht, indem Sie einfach ein #define verwenden, um auszuwählen, welchen Weg Sie gehen möchten. Es unterstützt Nur-Kooperation oder Preemption (obwohl Preemption Auswirkungen auf die Bibliotheken hat.) usw. Alles ist bis auf Byte-Ebene konfigurierbar. Ich besitze es, fühle mich aber nicht zugehörig.
@EugenSch. FreeRTOS wird oft von SysTick getaktet, aber nicht immer. Ich arbeite an einer Low-Power-Anwendung, bei der SysTick in einigen Zuständen heruntergefahren wird, sodass FreeRTOS von einem der anderen Timer getaktet wird.
@brhans Ist es eine Out-of-the-Box-Funktionalität oder mussten Sie den Kernel erweitern?
@EugenSch. Einen kleinen Überblick können Sie unter Übersicht lesen, geschrieben im Jahr 2008 .
@jonk Cool, danke. Allerdings nicht so klein :)
@EugenSch. Sie finden es auch "teilweise bearbeitet". Es ist einfach etwas, das ich angefangen habe zu schreiben, weil ich dachte, ich könnte es dann veröffentlichen. Dann kam die Arbeit ins Stocken und ich hörte mit der Anstrengung auf. (Sie werden zum Beispiel „Notizen an mich selbst“ darin sehen, die einer weiteren Diskussion und Erweiterung bedürfen.) Teilweise wurde dies während meiner Arbeit an medizinischen Instrumenten, bei denen ich kein kommerzielles O/ kaufen oder verwenden konnte, stark erweitert. S, da es sich um kritische Geräte handelte, die einen Nachweis der Ausübung JEDER CODEZEILE erforderten.
Völlig off-topic, kann sich jemand dazu äußern: Was ist effizienter, einen Cortex M mit der niedrigsten erforderlichen Frequenz für die Aufgabe zu betreiben und ihn in den Ruhezustand zu versetzen (unter der Annahme einer optimalen Peripherieabschaltung usw.) oder Cortex M mit höchster Geschwindigkeit zu betreiben? und es schlafen legen. Auf meinem 8051 fand ich mehr Effizienz bei langsamster Uhr. PICs schnellere Geschwindigkeiten. Kortex Ms?
@ Leroy105 Besser als eine andere Frage formulieren, aber vorher "effizient" definieren.
@EugenSch. Erweitert vom Mikrocontroller-Anbieter (SiLabs) als Teil ihres „Stacks“.
@ Leroy105 was hat das Datenblatt für das Teil gesagt? Ein Cortex-m ist nur der Kern, Arm stellt keine Chips her, sondern IP, der Chipanbieter kauft diese Logik und stellt einen Chip in einer Gießerei mit einem gewissen Prozess, Leckage usw. her.

Antworten (1)

Wie in den Kommentaren beantwortet.

Der SysTick, falls vorhanden, ist Teil des ARM-Kerns, die anderen Timer stammen vom Chiphersteller. SysTick hat ein direkteres Ereignis (denken Sie an Interrupt) zum Kern, wo die anderen Zeiten durch Interrupts eingehen, nicht dass das wichtig wäre. Und andere Timer haben tendenziell mehr Funktionen.

Sie haben Cortex-M markiert, also ist dies wahrscheinlich ein Mikrocontroller, was bedeutet, dass Sie möglicherweise Baremetal verwenden, was bedeutet, dass Sie tun können, was Sie wollen, Sie entscheiden, welche Timer was tun. Wenn Sie einige bereits erstellte RTOS oder OS für diesen Chip nehmen, haben sie entschieden, welche Ressourcen sie verbrauchen möchten und warum. In erster Linie meinungsbasiert, soweit das geht.

Der Systick-Timer ist viel einfacher und einfacher in Gang zu bringen und ist nicht immer vorhanden, einige Kerne haben ihn überhaupt nicht als Option und einige als Option (für den Chiphersteller zur Kompilierzeit zu entscheiden), also hat er diesen Vorteil , obwohl es einige Timer in einigen Chips geben kann, die ebenso einfach sind.

Chiphersteller-Timer können manchmal I/O-Pins ansteuern oder eine externe Beteiligung haben, wenn der Systick AFAIK im Kern enthalten ist.