Frage

Ich suche Hilfe zur eingebetteten Anwendung auf dem 16-Bit-Gerät. Ich muss mehrere einfache "Tasks / Funktionen" über Funktionszeiger ausführen.Diese Aufgaben, die in vorherrschenden Intervallen ausgeführt werden. generasacodicetagpre.

Ich habe die Möglichkeit, den Timer-Interrupt bei 1 ms auszuführen. generasacodicetagpre.

Jede Idee, wie man die verstrichene Zeit berechnet?So stellen Sie sicher, dass% (MODULO) in definierter Rate funktioniert, wenn die Zeit überläuft.Wie auch immer, wie Sie den Zeitüberlauf vermeiden und über% (MODULO) korrekten Timing haben?

War es hilfreich?

Lösung

Ich würde so etwas tun: generasacodicetagpre.

Dies sollte funktionieren, solange Sie garantieren können, dass a) keine Periode größer als die Hälfte der Rollover-Zeit (0x8000 ms) ist, und b) Sie können alle Funktionen innerhalb kürzester Zeit ausführen.

Andere Tipps

Hier ist ein Teil von einer sehr ähnlichen App von mir, die für kleine MCU-Anwendungen geeignet ist, und Misra-C-konformes.Es basiert auf der Zuteilung von "Software-Timers" statisch in der anrufenden App.Mehrere Module in Ihrem Projekt können das gleiche Timer-Modul verwenden, da er innen eine verknüpfte Liste verwendet, um alle Timer zu verfolgen.

call tim_traverse_timers () von Ihrem 1MS-Interrupt.Wenn Sie sehr hohe Genauigkeitsanforderungen haben, müssen Sie möglicherweise die Interruptquelle löschen, bevor Sie die Funktion aufrufen, so dass der "Code Jitter" von der Funktion selbst den Timer nicht beeinträchtigt.

Wenn Sie für längere Verzögerungen benötigen, ändern Sie dann 65535 ms, wechseln Sie einfach den Zähler und das Intervall nach UINT32. generasacodicetagpre.


generasacodicetagpre.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top