Ich schreibe Code, der erfordert, dass ich bestimmten Code zu genauen Zeiten (wie eine Schleife, die 8ms dauert) auf einem Arduino Mega ausführen. Ich versuche herauszufinden, wie ich dies berechnen kann, indem ich herausfinde, wie lange es dauert, bis ein Mega eine Berechnung durchführt und sie mit der Anzahl der Berechnungen in einem bestimmten Codeblock multipliziert. Ist das der richtige Weg, dieses Problem anzugehen? Wie zähle ich überhaupt, wie viele Berechnungen durchgeführt werden?Wie kann ich messen, wie lange der Betrieb eines Arduino Mega dauert?
-3
A
Antwort
1
Eine der einfachsten Möglichkeiten, um einen Timer zu implementieren ist durch millis()
in Ihrer loop()
Funktion und gegen das letzte Mal Ihren Code lief, so etwas wie dieses zu vergleichen:
long loopTime = 0;
loop()
{
if (millis() - loopTime >= 8)
{
// Do the stuff here that you want to happen every 8ms
// ...
//
// Keep track of the last time this code ran, so we'll run it
// again 8 ms from now
loopTime = millis()
}
// Do other stuff here
}
Beachten Sie, dass dies nicht präzise sein , weil die millis()
Funktion keine genaue Zahl garantiert. Wenn Sie absolute Genauigkeit benötigen, müssen Sie einen externen Hardware-Timer verwenden, um alle 8 ms einen Interrupt zu generieren. Interrupt-Programmierung wird etwas komplexer, aber die oben gezeigte Timing-Loop-Technik sollte für die meisten Dinge funktionieren, die keine absolute Genauigkeit erfordern.
Sehr schlechter Ansatz mit CPU-Timing für solche langen Schleifen. Verwenden Sie einen Timer. – Olaf
Ich versuche hauptsächlich herauszufinden, wie ich sicherstellen kann, dass meine Schleife eine bestimmte Länge hat. Benutzt ich einfach einen Timer und vergesse den Code, bis es mir gefällt? Oder gibt es eine genauere Möglichkeit, das zu tun? – Samar
Was hast du selbst erforscht? Warum funktionieren die Möglichkeiten, die Sie im Internet finden können? Hast du ** irgendwelche ** Forschung gemacht? Was ist dein tatsächliches Problem? - Zu breit, das ist keine Beratungsseite. – Olaf