Stellen Sie sicher, dass serial geschrieben wurde, bevor Sie die nächste Zeile ausführen

Beim Ausführen des folgenden Codes auf meinem Arduino Micro wird nur die erste Zeile gedruckt:

void crash(void) {
    abort();
}

void setup(void) {
    Serial.begin(9600);

    while(!Serial.available()) {
        Serial.println("Please input something to begin");
        delay(500);
    }

    Serial.println("First"); // Gets printed
    delay(500); // Make sure Arduino is done writing to the serial connection

    Serial.println("Second"); // Doesn't get printed
    crash(); // Makes the Arduino device crash
}

void loop(void) {

}

Ich möchte so etwas tun, damit die zweite Zeile gedruckt wird, bevor das Gerät abstürzt:

void setup(void) {
    Serial.begin(9600);

    while(!Serial.available()) {
        Serial.println("Please input something to begin");
        delay(500);
    }

    Serial.println("First"); // Gets printed
    delay(500); // Make sure Arduino is done writing to the serial connection

    Serial.println("Second"); // Doesn't get printed

    wait_for_serial_write(); // Not really a function

    crash(); // Makes the Arduino device crash
}

void loop(void) {

}

Welche Funktion kann ich anstelle von verwenden wait_for_serial_write?

Der Grund, warum ich dies tun möchte, ist, dass mein Arduino "zufällig" abstürzt, also habe ich einige Debug- Serial.printlnAnweisungen eingefügt, die ich sehen möchte, bevor das Gerät abstürzt.

Ich kann es auch nicht in meinem echten Code verwenden delay, da der Absturz während eines Timer-Interrupts auftritt, wo es delaynicht funktioniert.

Ich bin neugierig, was macht crashgenau?
@KevinMark Ruft aborteine Funktion auf, die "den aktuellen Prozess abbricht und eine abnormale Programmbeendigung erzeugt". Ich weiß nicht, wie es implementiert ist, aber weder in der Timer- noch in der Loop-Funktion wird Code ausgeführt. Der Arduino wird auch nicht zurückgesetzt.

Antworten (1)

Serial.flush()ist genau das, was Sie suchen.