Waarom zoveel geheugengebruik met ESP8266 t.o.v. Arduino?

Hoihoi.

Deze vraag ook al gesteld op het esp8266 forum, maar geen reactie gekregen.

Behalve een Arduino Uno he ik sinds kort ook de Sparkfun WiFi Shield.
Pas na een paar dagen ontdekte ik wat een retegeil apparaatje dat is.

Ik programmeer de esp8266 met de Arduino IDE, en wat dat betreft werkt alles zoals verwacht.

Maar waarom gebruikt de Sparkfun zoveel geheugen t.o.v. de Arduino?

Een lege sketch op de Arduino Uno.

Dezelfde sketch op de esp8266.

450 bytes tegenover bijna 200 kBytes, dat is echt wel een significant verschil.
En 9 Bytes tegenover 32K variabelen vind ik ook erg veel.

En het resultaat van deze sketch:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println();
  Serial.println("Flash memory:     "+String(ESP.getFlashChipSize())+" Bytes.");
  Serial.println("Free heap memory: "+String(ESP.getFreeHeap())+" Bytes.");
  Serial.println("Chip speed:       "+String(ESP.getFlashChipSpeed())+" Hz.");
  
}
void loop() {
  // put your main code here, to run repeatedly:
  while( 1==1) {
    delay(10);
  }
}

Is bij mij:

Flash memory:     524288 Bytes.
Free heap memory: 46080 Bytes.
Chip speed:       40000000 Hz.

40 MHz? Ik dacht dat de cpu op mijn Shield op 80Mhz draaide.
In de Arduino IDE heb ik ook alleen 80/160MHz als board klok opties voor de 8266.

En op het schema van de Sparkfun Shield zie ik een 26MHz resonator/kristal.

In het geval van een verkeerd opgegeven klok lopen dingen als timers etc toch niet goed meer?
Bizar, want ik gebruik de Time Library en die werkt prima.

Confused...

Een esp8266 gebruikt meer programma en geheugen omdat

  1. het een 32 bitter is en geen 8 bitter (kort door de bocht *4)
  2. Het een nieuwer product is en er dus nog(?) geen doorgedreven geheugenbeheer is gedaan.
  3. Omdat er meer functionaliteit in de esp8266 zit en er dus waarschijnlijk al een paar dingen in je code zitten die je nog(?) niet gebruikt.
  4. Als ik me niet vergis: omdat de esp8266 meer geheugen heeft en er dus zo niet moet beknibbeld worden
  5. Omdat de processor architectuur tussen de esp8266 en de ARM totaal verschillend is.
  6. andere

Reden te over maar om te zeggen "dat is het echt in dit geval" is heel intensief en niet relevant.
Want wat maakt het uit? Wat ga je doen met het overgebleven geheugen? Waarom tijd steken in een minimale sketch als je er toch alles weer moet instoppen vanaf dat je een echte sketch gebruikt?

Met vriendelijke groet
Jantje

De code die gemaakt wordt voor de ESP8266 bevat ook alle hardware libraries die zitten op een vast stuk geheugen (vanaf adres=0 dacht ik). Die libraries zijn in principe nog steeds propriety. Dwz dat de SDK van de leverancier alleen een gecompileerde library heeft toegevoegd. Daarvan heb je niet het source. Tijdens het linken wordt deze lib toegevoegd en krijg de finale code. En vergis je niet in de hardware libraries die erbij zitten.
Maar voor jezelf heb je iets van 40Kb RAM en met de laatste varianten al ruim 1-2Mb Flash geheugen. Zie die eerst maar eens vol te krijgen

Alweer goede uitleg.

Dus zeg maar de firmware is een binary blob die meegecompileerd word?

yep. Het mooie ervan is dat je ze dus ook rechtstreeks vanuit de Arduino code kan aanroepen.

Dan nog de vraag over de frequentie. Kun je daar iets over zeggen?

80 of 160 mhz maar dat had je zelf ook kunnen uitzoeken

@nicoverduin

Flink google gebruikt, maar geen enkel resultaat gevonden.

Misschien kun je me de juiste richting op wijzen?

Nog een keer het 'probleem':

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println();
  Serial.println("Flash memory:     "+String(ESP.getFlashChipSize())+" Bytes.");
  Serial.println("Free heap memory: "+String(ESP.getFreeHeap())+" Bytes.");
  Serial.println("Chip speed:       "+String(ESP.getFlashChipSpeed())+" Hz.");
  
}
void loop() {
  // put your main code here, to run repeatedly:
  while( 1==1) {
    delay(10);
  }
}

Geeft deze output:

Flash memory:     524288 Bytes.
Free heap memory: 46080 Bytes.
Chip speed:       40000000 Hz.

Het menu van Arduino met de board keuze:

Ik snap er niks van. Ik heb alleen de opties 80 en 160Mhz en toch meld mijn Sparkfun bordje zich als 40Mhz?

Zoals gezegd, google kon me ook niks wijzer maken.

Ik zie dat ik hierboven abusievelijk een ss van de Wemos D1 heb gepost.

Net even de sketch van hierboven op de D1 gedraaid, en die geeft dezelfde output.

Me confused...

Ik heb hetzelfde programma gedraaid op een nodeMCU ESP8266-12E 4M en die geeft dit:

Flash memory:     4194304 Bytes.
Free heap memory: 46008 Bytes.
Chip speed:       40000000 Hz.

Ik vermoed dat de Chip speed die snelheid is van het crystal en niet van de PLL. De frequentie wordt via de PLL omhoog geslingerd.

Dank je voor de uitleg.

Nou moet ik weer naar google om PLL te leren.

cellie:
Dank je voor de uitleg.

Nou moet ik weer naar google om PLL te leren.

En nu niet meer zeuren :grin:. En als je het begrijpt mag je ons uitleggen : http://www.delroy.com/PLL_dir/tutorial/PLL_tutorial_slides.pdf