Was bedeutet das ....workaround for issue #527

Hallo,

ich versuche eine RTC 1307 mit dem Uno zu verbinden und das klappt soweit auch gut. Den Code habe ich gleich einmal vom Internet kopiert und es funktioniert. Trotz einer kleinen Recherche im Netz ist mir diese Zeile allerdings komplett mysteriös:

byte zero = 0x00; //workaround for issue #527

Kann mir hier irgenwer erklären was das macht und für was man das eigentlich braucht?

Vielen Dank!

get_you:
byte zero = 0x00; //workaround for issue #527

Kann mir hier irgenwer erklären was das macht

Damit wird ein Null-Byte in eine Byte-Variable namens "zero" gepackt.

get_you:
und für was man das eigentlich braucht?

Eine Null kann man doch immer gut gebrauchen, oder?

Issue #527 is a bug. Writing data to the DS1307 works better when the clock is stopped. In the code the value zero is written to stop the clock.

A "workaround" is a way around a bug to make it work.

Eine Null kann man doch immer gut gebrauchen, oder?

:wink:

Früher haben wir nur mit Nullen und Einsen programmiert. Und meine erste Datenbank bestand komplett aus Nullen.

byte zero = 0;

macht aus

    Serial.write(0);  // ging früher mal

das fehlerfreie

   Serial.write((byte) 0);

indem man

  Serial.write(zero);

schreibt.

Wuhuuu! Das ging ja schnell. Vielen Dank!!!

Ein Workaround ist ein "Umweg" um etwas zu machen, das auf eine einfache, erwartete Weise zB wegen eines Fehlers nicht funktioniert. Die Nummer 527 ist einfach die Stelle, an der dieser Fehler in der Fehlerliste, die zu beheben ist, eingetragen wurde. Das erleichtert die Organisation der gemeldeten oder gefundenen Fehler.

https://code.google.com/p/arduino/issues/detail?id=527
David Mellis schreibt:

Wire.write(0x00);

gives the following error:

error: call of overloaded 'write(int)' is ambiguous
Wire.h:55: note: candidates are: virtual void TwoWire::write(uint8_t)
Wire.h:56: note: virtual void TwoWire::write(const char*)

I solved it with an ugly hack, like so:

byte zero = 0x00;
Wire.write(zero);

A better solution would be nice.

als Lösung des Fehlers, wenn man versucht
"Wire.write(0x00);"
zu verwenden.
So gehts:
"byte zero = 0x00;
Wire.write(zero);"

Grüße Uwe

Deutlich besser wäre

const byte zero = 0x00;

Ein Quantensprung, was das RAM-Sparen angeht.

Es geht nicht nur darum RAM zu sparen. Mit const kann der Compiler in der Regel besser optimieren und die Semantik ist auch klarer.