Forum: Mikrocontroller und Digitale Elektronik Was stimmt denn Arduino nicht :-(


von asdf (Gast)


Lesenswert?

Hallo,

habe gerade auf einem NODEMCU das Blink-Beispiel geladen. Es tut was es 
soll, nur ist der Speicherverbrauch enorm...
1
/*
2
 ESP8266 Blink by Simon Peter
3
 Blink the blue LED on the ESP-01 module
4
 This example code is in the public domain
5
 
6
 The blue LED on the ESP-01 module is connected to GPIO1 
7
 (which is also the TXD pin; so we cannot use Serial.print() at the same time)
8
 
9
 Note that this sketch uses LED_BUILTIN to find the pin with the internal LED
10
*/
11
12
void setup() {
13
  pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
14
}
15
16
// the loop function runs over and over again forever
17
void loop() {
18
  digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage level
19
                                    // but actually the LED is on; this is because 
20
                                    // it is acive low on the ESP-01)
21
  delay(500);                      // Wait for a second
22
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
23
  delay(500);                      // Wait for two seconds (to demonstrate the active low LED)
24
}


er Sketch verwendet 222201 Bytes (21%) des Programmspeicherplatzes. Das 
Maximum sind 1044464 Bytes.
Globale Variablen verwenden 31576 Bytes (38%) des dynamischen Speichers, 
50344 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 
Bytes.

Wie schlecht ist denn der Compiler, der muss doch kapieren das da quasi 
kein Code für gebraucht wird.

von Bastler (Gast)


Lesenswert?

Da ist noch ein ganzes Framework im Hintergrund das mit kompiliert wird. 
Kompilier mal ein leeren Sketch. Und dann nimm die Differenz zu deinem. 
Das ist realistischer.

Kannst ja auch mal ein seitenlangen Sketch nehmen und kompilieren, der 
wird kaum länger werden als deiner jetzt...

von Horst (Gast)


Lesenswert?

asdf schrieb:
> Wie schlecht ist denn der Compiler, der muss doch kapieren das da quasi
> kein Code für gebraucht wird.

Wie schlecht bist Du denn, daß Du einen Prozessor aussuchst, bei dem der 
komplette WLan-Stack mit gebaut wird, auch wenn Du ihn garnicht 
brauchst?

Auf einem Uno sieht das so aus:
Der Sketch verwendet 928 Bytes (2%) des Programmspeicherplatzes. Das 
Maximum sind 32256 Bytes.
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, 2039 
Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Sicher geht es noch kleiner, aber Dein Problem hast Du verursacht, nicht 
der Compiler.
Arduino-Bashing ist ja ganz schön, aber bitte nicht so plump.

von Ochnee (Gast)


Lesenswert?

asdf schrieb:
> Wie schlecht ist denn der Compiler, der muss doch kapieren das da quasi
> kein Code für gebraucht wird.

Wie schlecht ist denn der Programmierer, dass er den ESP nicht kapiert 
und die Arduino-IDE verwenden muss?

von Stefan F. (Gast)


Lesenswert?

Seid ihr fertig mit ablästern? Darum hat euch der TO nicht gebeten. Ich 
seid so armselig im Kopf!

Der ESP8266 Core von Arduino basiert auf dem Non-OS SDK von Espressif. 
Da ist der ganze WLAN Treiber und ein TCP/IP Stack drin. Wobei der WLAN 
Teil ca 90% davon ausmacht.

Die Basis Firmware von Espressif belegt je nach Version zwischen 200 und 
250k Byte. Insofern sind die von Dir genannten Zahlen ganz normal.

> Wie schlecht ist denn der Compiler, der muss doch kapieren das da quasi
> kein Code für gebraucht wird.

Er wird aber gebraucht. Der Code wird beim Start ausgeführt. Er 
initialisiert die WLAN Komponenten und reagiert auf Interrupts 
(empfangene Pakete). Die Firmware von Espressif ist nicht so modular, 
dass man sie einfach weg lassen könnte.

Bedenke, wie billig das Ding ist. Richtig gut durchdate Produkte mitsamt 
Software bekommst du nicht ab 2 Euro.

Im übrigen liegt es nicht am Compiler, der kann ungenutzten Code 
durchaus entfernen. Und das tut er auch - gerade beim Arduino Framework.

von asdf (Gast)


Lesenswert?

Vielen Dank Bastler und Stefan Us für die erklärenden Worte. Das war mir 
nicht klar jetzt versteh ichs.

von Horst (Gast)


Lesenswert?

Stefan U. schrieb:
> Seid ihr fertig mit ablästern? Darum hat euch der TO nicht gebeten. Ich
> seid so armselig im Kopf!

Ah ja, bei dieser verstümmelten Frage als Überschrift und dem

asdf schrieb:
> Wie schlecht ist denn der Compiler, der muss doch kapieren das da quasi
> kein Code für gebraucht wird.

sieht das für Dich nicht nach sinnlosem Arduino-Bashing aus? Dann bist 
Du vielleicht doch nicht so 'armselig' wie Du behauptest.

von Wolfgang (Gast)


Lesenswert?

Stefan U. schrieb:
> Er wird aber gebraucht. Der Code wird beim Start ausgeführt. Er
> initialisiert die WLAN Komponenten und reagiert auf Interrupts
> (empfangene Pakete).

Wofür wird der Code gebraucht? Um eine einzige LED blinken zu lassen?

Die braucht kein WLAN und der ganze ESP8266 mit seinen 80/160MHz und 
ein/vier  Mbit ist da etwas überzogen. Dafür täte es ein NE555 oder ein 
kleiner ATtiny ;-)

von Stefan F. (Gast)


Lesenswert?

Der Compiler sieht mur einen Haufen Code der durch die Interrupt Vektor 
Tabelle eingebunden ist. Wenn er den Code rausschmeissen soll, muss man 
diese Tabelle ändern. Genau das ist im Espressif SDK nicht vorgesehen.

von Wolf W. (pansensuppe)


Lesenswert?

Wolfgang schrieb:
> Stefan U. schrieb:

> Wofür wird der Code gebraucht? Um eine einzige LED blinken zu lassen?
>
> Die braucht kein WLAN und der ganze ESP8266 mit seinen 80/160MHz und
> ein/vier  Mbit ist da etwas überzogen. Dafür täte es ein NE555 oder ein
> kleiner ATtiny ;-)

zum Blinken lassen braucht man auch keinen 555er. Dafür reichen zwei ab 
isolierte Kabel, die man dann rhythmisch zusammenhält.

Es sollte sich rumgesprochen haben, dass das 'Blinken' das 'Hello World' 
der HW-Programmierer ist ;)

von Andi (Gast)


Lesenswert?

Wolf W. schrieb:
> zum Blinken lassen braucht man auch keinen 555er. Dafür reichen zwei ab
> isolierte Kabel, die man dann rhythmisch zusammenhält.

Also ich betätige einfach diesen kleinen Hebel neben dem Lenkrad damit 
es blinkt...

von Stefan F. (Gast)


Lesenswert?

> Also ich betätige einfach diesen kleinen Hebel neben dem
> Lenkrad damit es blinkt...

Dafür arbeitet in meinem Auto ein Mikrocontroller, der noch wesentlich 
größer ist, als der ESP8266.

von Carl D. (jcw2)


Lesenswert?

Andi schrieb:
> Wolf W. schrieb:
>> zum Blinken lassen braucht man auch keinen 555er. Dafür reichen zwei ab
>> isolierte Kabel, die man dann rhythmisch zusammenhält.
>
> Also ich betätige einfach diesen kleinen Hebel neben dem Lenkrad damit
> es blinkt...

Deutlich teuerer als ein ESP-Modul ;-)

Aber jedem sein eigenes Spielzeug.

: Bearbeitet durch User
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.