Serial.flush() returns before last character is transmitted (Still not working)

Hello,

After reading Issue:
https://code.google.com/p/arduino/issues/detail?id=871&can=1&q=Serial.flush
I still don't get it working. (I'm back to the beginning code for HardwareSerial::flush.)

Now working with

  • Arduino 1.6.4.
  • Arduino Due + RS-485 module for Arduino (MAX485 )
  • Arduino Uno + RS485 Shield V2
  • With HardwareSerial::flush(code) ->
    void HardwareSerial::flush()
    {
    // If we have never written a byte, no need to flush. This special
    // case is needed since there is no way to force the TXC (transmit
    // complete) bit to 1 during initialization
    if (!_written)
    return;

while (bit_is_set(_ucsrb, UDRIE0) || bit_is_clear(_ucsra, TXC0)) {
if (bit_is_clear(SREG, SREG_I) && bit_is_set(_ucsrb, UDRIE0))
// Interrupts are globally disabled, but the DR empty
// interrupt should be enabled, so poll the DR empty flag to
// prevent deadlock
if (bit_is_set(
_ucsra, UDRE0))
_tx_udr_empty_irq();
}
// If we get here, nothing is queued anymore (DRIE is disabled) and
// the hardware finished tranmission (TXC is set).
}

The configuration is working, but the last character is wrongly received.
From Due -> Uno:
helloUno -> helloUnĂ¿ (See last character )

Can anybody give me a hint/tip?

Tnx!

HardwareSerial.cpp (7.85 KB)

hacoustodion:
The configuration is working, but the last character is wrongly received.

Maybe the receiving code is at fault ? Have a look at serial input basics ?

Why is there any need to use Serial.flush()

...R

Also, would you be so kind as to... USE CODE TAGS... thank you

Why is there any need to use Serial.flush()

If you want the sender to sleep, using Serial.flush() is necessary. Without it, the serial data does not get send until the Arduino wakes up again.

How do you know that error character y-umlaut isn't caused by a bug at the receiver. What code are you using at the receiving end ?

hacoustodion:
Can anybody give me a hint/tip?

Tnx!

Where is your code? We all have a copy of HardwareSerial.

PaulS:
If you want the sender to sleep, using Serial.flush() is necessary. Without it, the serial data does not get send until the Arduino wakes up again.

I do know what Serial.flush() is for. I just did not realize the OP wanted to put his Arduino to sleep after the data was sent..

...R

PaulS:
If you want the sender to sleep, using Serial.flush() is necessary. Without it, the serial data does not get send until the Arduino wakes up again.

If ever. If it shuts down the serial hardware the byte might get partially sent.

The OP, who seems himself/herself to also have gone to sleep, is very light on details about this issue.