Ich baue ein Gerät auf der AVR-Plattform. Das Gerät benötigt einige Timing-Informationen, daher dachte ich daran, die Arduino- millis
ähnliche Funktionalität neu zu implementieren (wenn auch nicht genau so ). Nachdem ich jedoch einige Hüllkurvenberechnungen durchgeführt hatte (teilweise basierend auf diesem Beitrag ), schien es mir, dass millis
mindestens 5% der CPU-Zeit auf einem 20-MHz-Prozessor und proportional mehr als auf einem 16-MHz-Prozessor verbraucht werden:
millis
PUSH
+ POP
plus CLR
, IN
, undRETI
Ich brauche keine millis
Präzision, also denke ich darüber nach, Prozessorzyklen für andere Dinge zu implementieren centis
oder sogar zu sparen. decis
Ist das unvernünftig? Sind meine Berechnungen falsch? Es scheint eine seltsame Designwahl zu sein, oder übersehe ich etwas?
50 Takte sind bei 16 MHz nicht 50 us, sondern etwa 3 us. Also 0,3 % Overhead, nicht 5 %. Sie können das sicherlich tun, aber ich hatte noch nie Probleme damit, einen kleinen ISR bei 1 kHz so zu betreiben. Es könnte eine gute Idee sein, es neu zu implementieren, nur damit Sie mehr Dinge hinzufügen können, die bei jedem Timer-Tick ausgeführt werden, oder Dinge planen können, die bei zukünftigen Ticks ausgeführt werden. Eine Methode, die ich ziemlich oft verwende, ist, etwas so zu planen, dass es z. Wenn ein Tick übersprungen wird, wird der aktuelle Anruf nur um einen Tick verzögert. Es wäre sehr einfach, diese Methode zu verwenden, um Dinge in 10-ms- oder 100-ms-Intervallen auszuführen.
Ignacio Vazquez-Abrams
Tom L.
Engelgroß
Engelgroß
Ignacio Vazquez-Abrams
Engelgroß
Tom L.
Tom L.