zur Zeit programmiere ich ein kleines Projekt (Lüftersteuerung mit Luftfeuchte-/Temperaturmessung).
Dazu verwendete ich die Arduino 1.0.5 IDE auf einem Laptop mit Win 8.1, seit heute auch Arduino 1.0.6.
Weil ich an einigen Stellen ziemlich kämpfen musste und ich auch nach dem Ausmerzen etlicher selbstgebauter Fallen und Fehler der Eindruck hatte, dass manche Schleifen nicht so laufen, wie sie sollten, nahm ich den kompletten Sketch samt DHT Library auf mein Netbook unter Linux (Mint).
Dort ist die Arduino IDE 1.0.5 installiert.
Ohne jegliche Änderung lief die Kompilierung durch, jedoch im Ergebnis mit deutlich kleinerer Größe!
Auf der Lüftersteuerungs-Hardware läuft die Software ebenso wie das Kompilat vom Windowrechner.
Um die Sache zu überprüfen, schrieb ich einen kleinen Testsketch "Flip-Flop" (eine Taste am digitalen Eingang, zwei Leuchtdioden, alles auf einen alten 2009er Arduino), wobei beim Drücken der Taste eine Leuchtdiode Aus -> Ein -> Aus geschaltet wird, eben "Flip-Flop", auf dem Netbook unter Linux und kopierte den Sketch auf den Windows Laptop.
Wenn Du vergleichen möchtest, ob in den Dateien tatsächlich etwas mit verschiedener Größe codiert ist, wendest Du am besten das Tool "avr-size" auf die hex-Datei an und siehst Dir an, was avr-size ausgibt!
Die Ausgabe von avr-size sieht beispielsweise bei einer 14025 Bytes großen hex-Datei ungefähr so aus:
text data bss dec hex filename
0 4978 0 4978 1372 C:\Users\Username\AppData\Local\Temp\build6489415861915120060.tmp\buttonDemo3.cpp.hex
Einfacher läßt sich die dezimale Dateigröße vergleichen, wenn Du die Ausgabe im Statusfenster beim Compilieren beachtest, die auf einem MEGA z.B. so aussieht:
Binäre Sketchgröße: 4.978 Bytes (von einem Maximum von 258.048 Bytes)
Dies wären dieselben 4978 Bytes, die auch das avr-size Tool anzeigt und diese Größe steht dafür, wieviele Bytes vom Programm tatsächlich im Flash-Speicher belegt werden.
ManfredH:
meine obige Angabe zu den Größen ist genau diese Angabe aus dem Statusfenster, das Du erwähnst.
Ob auf den verschiedenen Plattformen auch dieselben Versionsnummern des GCC-Compilers und der AVR-LIBC verwendet werden, kannst Du mit einem Programm direkt abfragen.
Falls die Unterschiede durch Unterschiede in den Arduino Core-Libraries oder Versionsunterschiede der im Compile- und Link-Prozess eingesetzten Tools bedingt sind, sieht man allerdings auch dort keine Unterschiede.
Bei den niedrigen Arduino Versionsnummern (1.0.*) sind unter Windows veraltete Compiler dabei. Unter Linux hängt es von der Distro ab. 1.5.8 und höher haben neuere Compiler an Board. Der neuere GCC liefert oft kompakteren Code. Ansonsten hängt es wie schon vermutet von Änderungen in den Libraries ab. Ich verwende fast nur noch 1.5.8 oder höher weil der Compiler dort VIEL besser ist.
Kann ich dir ein Lied von singen, was ich von dem neuen VIEL besserem Compiler habe...
Beim kompilieren zeigt der mir jedesmal ein Fehler an, USBasp läuft überhaupt nicht.
Nicht nur der Programmer kann Probleme bekommen. Der andere Teil von Problemen hat mit der bescheidenen Qualität einiger Arduino Libraries zu tun. Auf der anderen Seite ist der erzeugte Code wirklich viel besser. Ist ja alles open source, d.h. man kann auch die Libraries die man braucht aufräumen. Meine DCF77 lib ist neuerdings aufgeräumt
moin,
ich finde es jetzt auf Anhieb nicht mehr, aber kürzlich las ich (glaube ich, gelesen zu haben) im arduino.cc Umfeld, dass die Arduino IDE 1.5.x fü die YUN Nutzer zwingend erforderlich ist und für alle anderen Boards die aktuelle 1.0.x empfohlen wird.
Habe ich falsch gelesen oder falsch interpretiert?
Offiziell ja. Aber ich würde das so nicht unterschreiben.
Da wird so getan als ob 1.0.x fehlerfrei wäre, was bei weitem nicht der Fall ist. Es gibt inzwischen auch in den absoluten Standard-Klassen einige Verbesserungen, z.B. bei Serial.
Und wie Udo gesagt hat, hat man in 1.5.7 (nicht in 1.5.8 ) endlich mal die AVR Toolchain aktualisiert. Die war geradezu antik. Der Compiler selbst hatte da einige bekannte Bugs.
jurs:
Ob auf den verschiedenen Plattformen auch dieselben Versionsnummern des GCC-Compilers und der AVR-LIBC verwendet werden, kannst Du mit einem Programm direkt abfragen.
}
Falls die Unterschiede durch Unterschiede in den Arduino Core-Libraries oder Versionsunterschiede der im Compile- und Link-Prozess eingesetzten Tools bedingt sind, sieht man allerdings auch dort keine Unterschiede.
Das ist ja mal interessant:
Eben gerade auf beiden Rechnern (zur Erinnerung: Win8.1 und Arduino 1.06 / Linux Mint Arduino 1.0.5 + dfsg2-2) Dein Progrämmchen laufen lassen:
Dein Linux verwendet offenbar schon bei der Arduino-IDE 1.0.5 die deutlich modernere GCC-Version und auch die neuere AVR LIBC, die bei Windows erst ab der Arduino-IDE 1.5.7 enthalten sind.
Dann weißt Du ja, wo die Unterschiede und die kleinere Programmgröße herkommen.
Der GCC-Compiler 4.8.2 erzeugt bei fast allen Programmen deutlich kleineren Code als die alte GCC 4.3.2 Version, durch verbesserte Optimierung auf kleinere Programmgröße.