Wie kann man mit der Anweisung millis() herausfinden, wie lange es etwa dauert, ein Zeichen auf den seriellen Monitor zu schreiben?

4 Antworten

Das einfachste ist, eine große Anzahl von Zeichen zu senden, also z.B. 10.000, und millis() beim Start aufzurufen, Wert speichern, dann man Ende wieder millis() aufrufen, Differenz dieses Wertes zum gespieicherten Wert, dividieren durch 10.000, und man hat die Zeit pro Zeichen.


12345678557 
Beitragsersteller
 14.03.2025, 16:52

Ok.

Ich denke, das ist gar nicht so leicht...

Der normale Aufruf Serial.write() ist nämlich nicht blockierend, das heißt, es werden nachfolgende Anweisungen ausgeführt, noch bevor die Zeichen wirklich gesendet sind.

stststDu kannst aber mit Serial.availableForWrite() prüfen, wie viele Bytes noch gesendet werden müssen. Am Schluss sollte es in etwa so gehen:

start = millis();
Serial.write("Das ist eine längere Zeichenkette, umso länger desto genauer");
while(Serial.availableForWrite()){}
Dauer=millis()-start;

12345678557 
Beitragsersteller
 24.02.2025, 07:33

Ok.

uint32_t startTime = millis();
Serial.Write("Hello World");
uint32_t duration = millis() - startTime;

Ich habe hier einen längeren String genommen weil bei den meisten Settings das Senden von einem Zeichen sicher unter einer Millisekunde liegt.

Ansonsten kannst du natürlich micros() verwenden.


12345678557 
Beitragsersteller
 23.02.2025, 23:40

Ok.

Grob gesagt:

  • Millis aufrufen, Wert speichern
  • Serial Print aufrufen
  • Millis erneut aufrufen und die Differenz zum ersten Aufruf bilden
Woher ich das weiß:Studium / Ausbildung – Masterstudium Elektrotechnik - Schwerpunkt Embedded Systems

12345678557 
Beitragsersteller
 23.02.2025, 23:39

Ok.