Arduino Codegröße

#7260218
Lesenswert?

Peter schrieb:
> Gibt es in der Arduino IDE Compileroptionen, die helfen, den Code noch
> etwas zu komprimieren?

Nicht wirklich, da wird schon auf minimale Codegröße optimiert. Wie 
sieht dein Programm aus? Spaghetticode oder viele Funktionen?

AVR-GCC-Codeoptimierung

Hinter der Arduino-IDE steckt der avr gcc, also sind viele der 
Vorschläge machbar, wenn gleich nicht immer sinnvoll.
Beitrag #7260296 wurde von einem Moderator gelöscht.
#7260336
Lesenswert?

Beitrag #7260539 wurde von einem Moderator gelöscht.
Gast #7260574
Lesenswert?

Alt G. schrieb im Beitrag #7260539:
> Wäre mir neu dass die arduino ide den eprom löscht.

Tut es nicht!
Tut es doch!

Beides ist wahr.
Zuständig, für das Verhalten, ist die EESAVE Fuse.
Also nicht die Arduino IDE.
Gast #7260587
Lesenswert?

Bei Arduino Nanos verhilft der Optiboot Bootloader zu etwas mehr 
Programmspeicher.

In einer Endversion des Sketches kann man z.B. nicht unbedingt nötige 
serielle Ausgabe abschalten, die vorher zum Debuggen erforderlich waren.

Manchmal hilft auch ein Blick in die Libraries und deren Entschlacken.
Und direkte Portmanipulation statt digitalWrite() etc.

Hardcore wäre dann noch, auf Assembler umzusteigen 🥳
#7260803
Lesenswert?

Joachim B. schrieb:
> immer das 6-polige Kabel
> suchen den Prommer.

und darum hab ich beim freundlichen Chinesen gleich 3 Stück davon 
bestellt und alle auf die letzte verfügbare FW geflasht und die Jumper 
eingelötet, um auch den Speed drosseln zu können, weil neue Prozzis ab 
Werk mit 1 MHz takten. Zu "Friedenszeiten" haben die Dinger unter 2€ p. 
Stck gekostet. Eins davon taucht immer irgendwo auf. ;-)
Gast #7260935
Lesenswert?

EAF schrieb:
> Martin schrieb:
>> Bei Arduino Nanos verhilft der Optiboot Bootloader zu etwas mehr
>> Programmspeicher.
> Leider nicht!

Verstehendes Lesen ist nicht Dein Ding?

> Nur, wenn man den UNO Bootloader auf den Nano spielt.

Genau das wird Martin gemeint haben, den Bootloader austauschen.
Gerüchteweise soll es auch Nanos geben, wo ab Werk der Optiboot drauf 
ist.

Ob das helfen könnte, wissen wir aber nicht, Peter (Gast) hat nicht 
geschrieben, welchen Arduino er benutzt.

noiasca schrieb:
> Peter schrieb:
>> bei 80% Flash.
> für ungenutzten Flash bekommst du kein Geld zurück.

Es scheint da noch andere Mechanismen zu geben, die Ärger machen. Ich 
habe erst diesen Nachmittag aufgegeben, eine Anwendung mit 83% 
Auslastung, stabil und über 'zig Tage erprobt. Sobald ich weitere 
Funktionen hinzufüge, klemmt das Gebilde. Nehme ich einige serial.print 
raus, läuft es wieder - also eindeutig ein Problem des freien Flash.

Andere Anwendungen funktionieren bei deutlich höherer Auslastung, eine 
mit 99% Flash!

EAF schrieb:
> Joachim B. schrieb:
>> stimmt, ich finde ISP Programmierung lästig, immer das 6-polige Kabel
>> suchen den Prommer.
> Ist das eine Nebelkerze, oder nur ein arg schräges Argument?
Wo Joachim recht hat, hat er recht. Ich baue keine 
Steckbrett-Lose-Selbstzweck-Dinge, sondern benutzbare Geräte, also 
Gehäuse drum und Deckel zu. Es macht wenig Aufwand, den USB von außen 
zugänglich zu machen, dass man später noch eine Korrektur einspielen 
kann.
Angehängte Dateien:
Gast #7260951
Lesenswert?

Peter schrieb:
> Gibt es in der Arduino IDE Compileroptionen, die helfen, den Code noch
> etwas zu komprimieren?

Es gibt die Option eine .lst-Datei anzulegen. Da sieht man dann recht 
gut welche Bibliotheken wieviel Flash-Speicher wofür benötigen ...

LG, Sebastian
#7260963
Lesenswert?

Manfred schrieb:
> Es scheint da noch andere Mechanismen zu geben, die Ärger machen. Ich
> habe erst diesen Nachmittag aufgegeben, eine Anwendung mit 83%
> Auslastung, stabil und über 'zig Tage erprobt. Sobald ich weitere
> Funktionen hinzufüge, klemmt das Gebilde. Nehme ich einige serial.print
> raus, läuft es wieder - also eindeutig ein Problem des freien Flash.

Ganz sicher nicht. Denn der Flash ist ROM, read only memory. Da kannst 
du lesen was und wie du willst, es wird IMMER funktionieren!
Ganz anders mit RAM, denn dort ist der echte Verbrauch zur Laufzeit 
dynamisch. Die Anzeige in der Arduino-IDE zeigt nur den statischen 
Verbrauch an. Der dynamische Teil ist unbekannt und man probiert es 
praktisch auf gut Glück. Meistens reicht es, manchmal nicht.
Gast #7261039
Lesenswert?

Manfred schrieb:
> EAF schrieb:
>> Martin schrieb:
>>> Bei Arduino Nanos verhilft der Optiboot Bootloader zu etwas mehr
>>> Programmspeicher.
>> Leider nicht!
>
> Verstehendes Lesen ist nicht Dein Ding?
>
>> Nur, wenn man den UNO Bootloader auf den Nano spielt.
>
> Genau das wird Martin gemeint haben, den Bootloader austauschen.
> Gerüchteweise soll es auch Nanos geben, wo ab Werk der Optiboot drauf
> ist.

Verstehendes Lesen ist wohl nicht so dein Ding.
Und kundig machen auch wohl nicht.
Der Bootloader ist beim "modernen" Nano der gleiche, wie beim UNO, aber 
nicht die Fuses Einstellungen.
Man fällt also auf die Fresse, wenn man die frei gewordenen 1,5kB nuten 
will, weil der Bootloader Einsprungspunkt dann ins Ende von der 
Anwendung zeigt.
Doofe Konstruktion, aber ist so.

Erst wenn man den UNO Bootloader brennt, werden die Fuses auch so 
gesetzt, dass man den Speicher nutzen kann.



--------------



Manfred schrieb:
> EAF schrieb:
>> Joachim B. schrieb:
>>> stimmt, ich finde ISP Programmierung lästig, immer das 6-polige Kabel
>>> suchen den Prommer.
>> Ist das eine Nebelkerze, oder nur ein arg schräges Argument?
> Wo Joachim recht hat, hat er recht. Ich baue keine
> Steckbrett-Lose-Selbstzweck-Dinge, sondern benutzbare Geräte, also
> Gehäuse drum und Deckel zu. Es macht wenig Aufwand, den USB von außen
> zugänglich zu machen, dass man später noch eine Korrektur einspielen
> kann.
Hat das was mit der EESAVE Fuse zu tun?
Nein!
Also hat Ihm nicht recht.
Bedenke über den "kleinen" Bootloader kann man das EEPROM nicht 
beschreiben.
Zusätzlich:
Beim UNO ist die EEFUSE gesetzt, das EEPROM wird nicht automatisch mit 
gelöscht.
Beim Mega ist die Fuse im Auslieferungszustand. Das EEPROM wird beim 
Erase mit gelöscht.
Gast #7261041
Lesenswert?

Manfred schrieb:
> Es scheint da noch andere Mechanismen zu geben, die Ärger machen. Ich
> habe erst diesen Nachmittag aufgegeben, eine Anwendung mit 83%
> Auslastung, stabil und über 'zig Tage erprobt. Sobald ich weitere
> Funktionen hinzufüge, klemmt das Gebilde. Nehme ich einige serial.print
> raus, läuft es wieder - also eindeutig ein Problem des freien Flash.

Symptom mag stimmig sein, aber deine Diagnose ist Müll, bzw. ein Irrtum.
Gast #7261043
Lesenswert?

> man probiert es praktisch auf gut Glück.

Wir hätten beim 6510 bleiben sollen.

Bei 256 Byte Stack konnten wir noch berechnen, ob es im ungünstigsten 
Fall ausreicht. Und alle anderen Variablen hatten einen festen 
Speicherplatz.
Beitrag #7261140 wurde von einem Moderator gelöscht.
#7261143
Lesenswert?

Manfred schrieb:
> Nehme ich einige serial.print
> raus, läuft es wieder - also eindeutig ein Problem des freien Flash.

Eindeutig nicht.
Deine serial.print vernichten CPU-Zeit wie blöde, wenn der FIFO voll 
ist. D.h. Dein CPU dreht Däumchen, während die Bytes raus tröpfeln.

Ist ein gern gemachter Anfängerfehler, überall Debugausgaben rein und 
sich wundern, warum es an allen Ecken klemmt. Ganz böses Foul sind dann 
noch serial.print in Interrupts, das ergibt einen Deadlock, sobald der 
FIFO nicht mehr genug Platz hat.
Gast #7261157
Lesenswert?

Fn schrieb im Beitrag #7261140:
> EAF schrieb:
>> Symptom mag stimmig sein, aber deine Diagnose ist Müll, bzw. ein Irrtum.
>
> Er hat ein ram-grössen problem. Richtig?

Keine Ahnung!
Wir haben hier eine Ursachenbehauptung(Flash Mangel), ohne 
Reproduzierbarkeit(Code geheim).
Sogar die Hardware ist Geheim.

Wie schon gesagt, ich glaube ihm, dass ihm da ein Problem hat, aber 
darüber nachzudenken, welches das sein könnte?

Eigentlich nicht!

Einen möglichen Grund habe ich schon genannt:
Nano mit dem moderne Bootloader aber der falschen Fuseeseinstellung, 
dann startet es nicht mehr, wenn der Code die unteren 1,5K des 
Bootloaderbereiches nutzt.
Das kann nur passieren, wenn man ohne Wissen in der platform.txt 
rumpfuscht, oder den Nano als UNO anspricht, ohne die Fuses zu ändern.
Gast #7261247
Lesenswert?

Kleiner Hinweis.

Wenn der Compiler Variablen-Warnung ausgibt, dann passe höllisch auf.

Ich habe gemerkt das das Programm eigentlich sauber läuft, aber die 
Variablen am spinnen sind.

k.a. wie die das Handhaben. Mir wäre ein Absturz lieber gewesen. So habe 
ich 2 Wochen gesucht. Dann mal aus irgend einer Idee in der Badewanne 
ein Mega gekauft und das selbe Programm ohne Änderung drauf geknallt und 
keine Variable spinnt.
#7261257
Lesenswert?

Schlaumaier schrieb:
> Wenn der Compiler Variablen-Warnung ausgibt, dann passe höllisch auf.

Worauf soll er da aufpassen.
Er muß die Warnung lesen, verstehen und den Code entsprechend 
korrigieren.
Warnungen bestehen nämlich aus lesbarem Text und der Zeilennummer, die 
angewarnt wird.

In seltenen Fällen kann trotz Warnung der Code arbeiten, wie gewünscht. 
Dann kann man mit einem Cast die Warnung unterdrücken.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren