Was stimmt denn Arduino nicht :-(

Gast #5197177
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.
Gast #5197187
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...
Gast #5197194
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.
Gast #5197282
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.
Gast #5197581
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.
Gast #5197592
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 ;-)
Gast #5197605
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.
#5198257
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 ;)

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