Forum: Compiler & IDEs Arduino IDE 1.74 <-> 1.89


von Manfred (Gast)


Lesenswert?

Ich habe eine Idee, die vom Speicherplatz her eng werden könnte und muß 
erstmal gucken, bevor ich Hardware aufbaue, erstmal Nano eingestellt.

Es sind die libraries für OLED, SD-Karte und AD-Wandler notwendig, dazu 
etwas eigener Code, um zyklisch Werte zu holen und auf die Karte / in 
das Display zu schreiben.
1
#include <SPI.h>
2
#include <Wire.h>
3
#include <Adafruit_GFX.h>
4
#include <Adafruit_SSD1306.h>
5
#include <Adafruit_ADS1015.h>
6
#include <SD.h>

Kompiliere ich mit der IDE 1.7.4, habe ich 93% Speicherbedarf:
1
Der Sketch verwendet 28.824 Bytes (93%) des Programmspeicherplatzes.
2
Das Maximum sind 30.720 Bytes.
3
4
Globale Variablen verwenden 1.424 Bytes (69%) des dynamischen Speichers,
5
624 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.

Kompiliere ich mit der 1.8.9, zeigt die nur 84%:
1
Der Sketch verwendet 26008 Bytes (84%) des Programmspeicherplatzes.
2
Das Maximum sind 30720 Bytes.
3
4
Globale Variablen verwenden 1354 Bytes (66%) des dynamischen Speichers,
5
694 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Ich sehe natürlich, dass <SPI.h>, <Wire.h> und <SD.h> mit der IDE 
mitgeliefert wurden und unterschiedliche Versionen sind, also tausche 
ich die testweise mal aus - ändert nichts am Ergebnis, die 1.8.9 will 
weniger Platz als die 1.7.4 brauchen.

Die 1.8.9 zeigt mir "runtime.tools.avr-gcc-5.4.0-atmel3.6.1", eine 
gleichartige Ausgabe macht die 1.7.4 leider nicht.

Hat jemand schon mal ähnliches beobachtet und eine Erklärung dafür?

---

Des weiteren fällt mir auf, dass ich in der 1.8.9 'old Bootloader' 
auswählen kann, aber egal ob alt oder neu, es werden immer "30720 Bytes" 
als verfügbar anzeigt. Ist das die Sache mit den falschen Fuses, die IDE 
setzt lediglich eine andere Baudrate für den Upload?

von Manfred (Gast)


Angehängte Dateien:

Lesenswert?

Noch keine [---] Kommentare?

von Nico W. (nico_w)


Lesenswert?

Entweder guckt man, wo die Arduino-Umgebung den GCC hinpackt und testet 
die Version; du bist ja selbst zumindest bei der neueren 1.8.9 
draufgekommen.

Oder du machst es wie ich, der keine Arduino-Umgebung installiert hat 
bzw. nur am Handy gerade sitzt und guckt sich die Release-Notes an.

https://www.arduino.cc/en/Main/ReleaseNotes
> ARDUINO 1.8.6 2018.08.23
> ...
> [core]
> * Updated toolchain to gcc 5.4.0

Da kannst jetzt auch weiter runterscrollen und die GCC-Version vor der 
1.8.6 finden.

von Manfred (Gast)


Lesenswert?

Nico W. schrieb:
> Entweder guckt man, wo die Arduino-Umgebung den GCC hinpackt
> und testet die Version;
> du bist ja selbst zumindest bei der neueren 1.8.9 draufgekommen.

Du gehst davon aus, dass der gcc-5.4.0 rund 10% effizienter kompiliert 
als der gcc-4.8.3 ?

> guckt sich die Release-Notes an

Meine 1.7.4 stammt aus der Zeit, wo Arduino in zwei Gruppen zerstritten 
war (.org / .cc) und kommt in den Release-Notes bei A*.cc nicht vor. 
Klar, im Verzeichnis nach 'gcc' gesucht, findet sich die Compilerversion 
4.8.3.

Auf jeden Fall muß meine 1.7.4 erhalten bleiben, ältere Geräte mit I2C 
wollen unter der 1.8.9 nicht funktionieren, inkompatibles Bastelzeugs.

von Joachim B. (jar)


Lesenswert?

Manfred schrieb:
> Kompiliere ich mit der IDE 1.7.4, habe ich 93%
Manfred schrieb:
> Kompiliere ich mit der 1.8.9, zeigt die nur 84%:

das ist mir auch schon aufgefallen, bei anderen abweichenden Versionen, 
aber egal, das wäre nicht so mein Problem, aber bringt GCC austauschen 
was oder klemmts dann in der IDE beim Aufruf?

Manfred schrieb:
> Des weiteren fällt mir auf, dass ich in der 1.8.9 'old Bootloader'
> auswählen kann

Das scheint mir ein 'bug' oder Sicherheitsdenken zu sein, ich habe alle 
meine Nano328p und miniPRO328p im Bootloader angepasst und auch die 
Fuses und die board.txt korrigiert.

Bootloder Optiboot, Fuses gesetzt, upload auf 57k6 wieder reduziert, die 
115k klemmten zu oft mit wUSB und am USBwebserver.

eine größere als 1.8.9 ist unter win7 x64 immer noch nicht verfügbar, 
somit ist nur der raspi up to date, leider aber zu schwach dafür!

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

die Arduino IDE Version 1.8.12 gibts schon eine Weile und läuft ab Win7.

Seit ein paar Versionen davor hat die IDE den avr-gcc 7.3 standardmäßig 
aktiv. Konnte man davor nachinstallieren für die Leute die es wußten 
bzw. sich dafür interessiert haben. Das alles geht leider aus der 
Release Note nicht hervor. Man könnte denken die IDE hat immer noch den 
avr-gcc 5.4 dabei.

Vermutlich kann gcc 7.3 deinen Code besser optimieren. Das muss nicht 
immer so sein. Nur wenn du die SD Lib und eine grafische Display Lib 
nutzt, kann es eng mit dem RAM werden. Der Compiler kann nur globale und 
static lokale Variablen vorab addieren und dir anzeigen. Ich möchte 
damit nur sagen, falls es zwar kompiliert aber unerklärlichen Mist zur 
Laufzeit macht, könnte es am RAM liegen. Hast ja nur 2kB. Die vollen 
32kB Flash kannste auch nicht nutzen, weil der Bootloader noch 2kB 
wegnimmt.

Möchte damit weiter sagen, falls du diese Grenzen sprengst, kannste auf 
einen "Arduino Mega2560" wechseln oder wenn die Bauform zu groß ist zu 
einem "Arduino Nano Every". Letztere hätte den neuen ATmega4809 drauf, 
auch mit deutlich mehr RAM/Flash.

von Joachim B. (jar)


Lesenswert?

Veit D. schrieb:
> die Arduino IDE Version 1.8.12 gibts schon eine Weile und läuft ab Win7.

nicht 64 bit!

schrieb ich aber auch!

Joachim B. schrieb:
> eine größere als 1.8.9 ist unter win7 x64 immer noch nicht verfügbar,
habe es ja gerade letzte Woche probiert!

Veit D. schrieb:
> Vermutlich kann gcc 7.3 deinen Code besser optimieren.

die Unterschiede waren immer marginal und änderten nichts am Ergebnis!
Am schlimmsten ist die Verschwendung der Adafruit LIB für das Display, 
am ESP egal, am nano ein no go!

Veit D. schrieb:
> falls es zwar kompiliert aber unerklärlichen Mist zur
> Laufzeit macht, könnte es am RAM liegen. Hast ja nur 2kB

ich weiss mit der LCD5110-Basic habe ich locker 900 Byte und mehr übrig, 
das läuft rund!

Veit D. schrieb:
> falls du diese Grenzen sprengst, kannste auf
> einen "Arduino Mega2560" wechseln

never, dann würde ich mir die restlichen ATmega1284p aufbauen mit 16KB 
SRAM
https://www.mikrocontroller.net/attachment/244383/m1284p_m328p.jpg
https://www.mikrocontroller.net/attachment/240970/strafarbeit_web.jpg
https://github.com/JChristensen/mini1284
doppelt so viel wie der m2560 hat

aber mit dem ESP32 hat auch Charme!

von Manfred (Gast)


Lesenswert?

Joachim B. schrieb:
> Manfred schrieb:
>> Kompiliere ich mit der IDE 1.7.4, habe ich 93%
> Manfred schrieb:
>> Kompiliere ich mit der 1.8.9, zeigt die nur 84%:
>
> das ist mir auch schon aufgefallen, bei anderen abweichenden Versionen,

Mir ist es eher per Zufall aufgefallen, aber der geringere Bedarf an 
Programmspeicher käme mir entgegen.

> aber egal, das wäre nicht so mein Problem, aber bringt GCC austauschen
> was oder klemmts dann in der IDE beim Aufruf?

Die Antwort kann ich nicht liefern, ich habe nicht vor, komplettes 
revers engineering der A*-IDE zu betreiben.

> Manfred schrieb:
>> Des weiteren fällt mir auf, dass ich in der 1.8.9 'old Bootloader'
>> auswählen kann
>
> Das scheint mir ein 'bug' oder Sicherheitsdenken zu sein, ich habe alle
> meine Nano328p und miniPRO328p im Bootloader angepasst und auch die
> Fuses und die board.txt korrigiert.

In der 1.8.9 haben Nano und Nano-Old die gleichen Fuses. Ich meine, das 
wurde vor Jahren hier schon einmal diskutiert: Optiboot eingeführt, aber 
die Anpassung der High Byte Fuses verpennt.

> Bootloder Optiboot, Fuses gesetzt, upload auf 57k6 wieder reduziert, die
> 115k klemmten zu oft mit wUSB und am USBwebserver.

Mir fällt nicht ein, warum man nicht einfach UNO auf Nano oder ProMini 
flashen können sollte, es ist der gleiche Professor. Ich habe mal 
testweise einen Nano auf Optiboot umgeflasht, aber noch keinen Grund 
gesehen, das generell zu tun.

Veit D. schrieb:
> Vermutlich kann gcc 7.3 deinen Code besser optimieren.

Du meinst, noch besser als der 5.4.0, der in der IDE 1.8.9 steckt?

> Nur wenn du die SD Lib und eine grafische Display Lib
> nutzt, kann es eng mit dem RAM werden.

Das sehe ich gelassen, mit der SD-Lib hatte ich noch keinen Ärger. Neu 
wird jetzt das OLED Display, aber ich habe nur wenig Daten zu 
verarbeiten. Solange die IDE bis 70..75% RAM anzeigt, wird das gutgehen.

> Möchte damit weiter sagen, falls du diese Grenzen sprengst, kannste auf
> einen "Arduino Mega2560" wechseln oder ..

In meiner konkreten Idee soll es einen erträglichen Stromverbrauch 
haben, mechanisch halbwegs klein werden und am Akku laufen - das wird 
ein ProMini mit 8 MHz werden. Wenn der Programmplatz nicht reicht, muß 
ich den Optiboot drauf flashen.

Arduino Nano Every kannte ich noch nicht, der hat zumindest mal eine 
vernünftige Bauform, im Gegensatz zu Uno und Mega. Meine IDE kennt den 
noch nicht. Da muß ich aber schon fast überlegen, ob nicht ein ESP32 die 
bessere Wahl wäre.

von Michael U. (amiga)


Lesenswert?

Hallo,

Joachim B. schrieb:
> Veit D. schrieb:
>> die Arduino IDE Version 1.8.12 gibts schon eine Weile und läuft ab Win7.
>
> nicht 64 bit!
>
> schrieb ich aber auch!
>
> Joachim B. schrieb:
>> eine größere als 1.8.9 ist unter win7 x64 immer noch nicht verfügbar,
> habe es ja gerade letzte Woche probiert!

übersehe ich jetzt irgendwas ? Die 1.8.12 läuft natürlich auf Win7 
64Bit? Auch alle vorigen laufen ohne Probleme.

Gruß aus Berlin
Michael

von Joachim B. (jar)


Lesenswert?

Manfred schrieb:
> Da muß ich aber schon fast überlegen, ob nicht ein ESP32 die
> bessere Wahl wäre.

denke ich auch!

headless ist wlan genial, OTA auch, läuft an jeden USB Steckernetzteil 
bei mir, flash und RAM im Überfluß, nervig nur die I2C Pegelwandlung für 
5V Boards, aber das ist leicht lösbar.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

>> die Arduino IDE Version 1.8.12 gibts schon eine Weile und läuft ab Win7.
> nicht 64 bit!

Ich kann das nicht nachvollziehen. Die IDE läuft schon seit Jahren auf 
64 Bit Windows 7, 8 und 10.

> Arduino Nano Every kannte ich noch nicht, der hat zumindest mal eine
> vernünftige Bauform, im Gegensatz zu Uno und Mega. Meine IDE kennt den
> noch nicht.

Du musst in der Boardverwaltung "Arduino megaAVR Boards" 
nachinstallieren, aktuell v1.8.5

Wegen avr-gcc 7.3 mit der IDE. Ab IDE v1.8.12 wird das Paket "Arduino 
AVR Boards" automatisch installiert, aktuell v1.8.2. In älteren IDEs 
kann man das selbst nachinstallieren und hat den aktuelleren avr-gcc.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

und wegen der Display Lib. Mag sein das die Lib von Adafruit nicht 
gerade optimal ist. Ich meine die funktionieren zwar, sind meistens aber 
nur lieblos hingerotzt. Ihre Produkte müssen damit "nur" funktionieren.

Die Eierlegendewollmilchsau ist derzeit:
https://github.com/olikraus/u8g2

Nur sollte man wissen das jede "Spielerrei" mit Grafikdisplay 
zusätzlichen Speicher benötigt. Ohne gehts nun einmal nicht. Das heißt 
alle Features mit Bedacht auswählen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.