Problème `dram0_0_seg' overflowed by 4800 bytes ESP32

Bonjour,
j'ai voulu importer mon programme Epaper dans mon gros programme sauf que lorsque je souhaite téléverser j'ai le message d'erreur suivant :
je suis sur ESP32 et c'est un écran epaper 7 color de waveshare

c:/users/com/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-97-gc752ad5-5.2.0/bin/../lib/gcc/xtensa-esp32-elf/5.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\COMMER~1\AppData\Local\Temp\arduino_build_555339/epaper_glob_lib.ino.elf section `.dram0.bss' will not fit in region `dram0_0_seg'
c:/users/com/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-97-gc752ad5-5.2.0/bin/../lib/gcc/xtensa-esp32-elf/5.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: DRAM segment data does not fit.
c:/users/com/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-97-gc752ad5-5.2.0/bin/../lib/gcc/xtensa-esp32-elf/5.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: region `dram0_0_seg' overflowed by 4800 bytes

J'ai réussi à trouver le problème c'est lorsque je note ceci :

#include "GxEPD2_display_selection_new_style.h"

J'ai regardé sur internet et je crois comprendre que c'est un problème de place.
Comment je pourrait ragrandir et comment diminuer le stockage.
Vous remerciant

Mon programme :



// uncomment next line to use class GFX of library GFX_Root instead of Adafruit_GFX
//#include <GFX.h>

#include <GxEPD2_BW.h>
#include <GxEPD2_3C.h>
#include <GxEPD2_7C.h>


//#include "bitmaps/Bitmaps3c200x200.h" // 1.54" b/w/r
//#define ENABLE_GxEPD2_GFX 1

#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>

//#include "dataimage.h"

// select the display class and display driver class in the following file (new style):
#include "GxEPD2_display_selection_new_style.h"



// alternately you can copy the constructor from GxEPD2_display_selection.h or GxEPD2_display_selection_added.h to here
// e.g. for Wemos D1 mini:
//GxEPD2_BW<GxEPD2_154_D67, GxEPD2_154_D67::HEIGHT> display(GxEPD2_154_D67(/*CS=D8*/ 15, /*DC=D3*/ 33, /*RST=D4*/ 32, /*BUSY=D2*/ 19)); // GDEH0154D67
//GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=5*/ 15, /*DC=*/ 33, /*RST=*/ 32, /*BUSY=*/ 19)); // Waveshare 5.65" 7-color

void setup()
{
  display.init();
  Gaz();

  display.hibernate();
}


const char HelloWorld[] = "Hello World!";

void Gaz()
{
  display.setRotation(4);
  display.setFont(&FreeMonoBold9pt7b);
  display.setTextColor(GxEPD_BLACK);
 /* int16_t tbx, tby; uint16_t tbw, tbh;
  display.getTextBounds(HelloWorld, 0, 0, &tbx, &tby, &tbw, &tbh);
  // center the bounding box by transposition of the origin:
  uint16_t x = ((display.width() - tbw) / 2) - tbx;
  uint16_t y = ((display.height() - tbh) / 2) - tby;*/
  display.setFullWindow();
  display.firstPage();
  do
  {


    /* display.setTextColor(GxEPD_GREEN);
      display.setCursor(50, 50);
      display.print("HelloWorld1");

      display.setTextColor(GxEPD_ORANGE);
      display.setCursor(50, 100);
      display.print("HelloWorld2");

      display.setTextColor(GxEPD_RED);
      display.setCursor(50, 150);
      display.print("HelloWorld3");*/

    display.fillRoundRect(90, 370, 410, 70, 30, GxEPD_BLUE);
    display.fillCircle(110, 110, 90, GxEPD_GREEN);
    display.fillCircle(490, 110, 90, GxEPD_RED);
    display.fillRect(255, 110, 90, 90, GxEPD_GREEN);
    display.fillRect(100, 235, 90, 90, GxEPD_GREEN);
    display.fillRect(400, 235, 90, 90, GxEPD_GREEN);
    //display.fillCircle(300, 250, 100, GxEPD_ORANGE);


    display.setTextColor(GxEPD_BLACK);
    display.setFont(&FreeMonoBold24pt7b);
    display.setCursor(70, 120);
    display.print("5");
    display.setCursor(450, 120);
    display.print("4");
    display.setCursor(415, 295);
    display.print("3");
    display.setCursor(115, 295);
    display.print("2");
    display.setCursor(270, 170);
    display.print("1");
   



  }
  while (display.nextPage());
}

void loop() {};

De mémoire, cette librairie permet de gérer différents afficheurs et il faut commenter les afficheurs non utilisés. As-tu configuré correctement la librairie pour ne conserver que le driver spécifique à ton afficheur (il y a, il me semble, plusieurs .h à modifier)?

D'accord mais mon programme fonctionne très bien quand je lance seul .
Oui j'ai modifié le .h pour qu'il fonctionne avec mon esp32

Puisque ça marche sans, qu'est-ce cet include est supposé apporter en plus?

Il y a deux façons de procéder à la sélection d'un type d'afficheur , l'ancienne et la nouvelle (évolution de l a librairie et compatibilité ascendante)

On le voit dans le code qui mentionne clairement une alternative :

// select the display class and display driver class in the following file (new style):
#include "GxEPD2_display_selection_new_style.h"

// alternately you can copy the constructor from GxEPD2_display_selection.h or GxEPD2_display_selection_added.h to here

c'est quand je l'incorpore à mon gros programme que ça fonctionne plus.
j'ai essayé avec l'ancienne version @al1fch mais j'avais une valeur plus grande "dram0_0_seg' overflowed by 6400 bytes"

Quel est le modèle de ta carte à ESP32 ? (avec ou sans PSRAM ?)

Si tu dispose d'une carte dotée de PSRAM , par exemple une carte avec un module WROVER , ça donne quoi ?
(on pourrait espérer que ça libère de la RAM interne, le buffer pour l'écran ePaper 7 couleurs est sans doute volumineux)

ESP32-DevKitCVE -> 8 MB Flash + 8 MB PSRAM
ESP32-DevKitC Board I Espressif
Dommage c'est dommage car avec l'autre librairie pour mon epaper 7 color j'ai pas ce problème. Donc pour le moment je suis repassé sur l'ancienne librairie

ESP32-DevKitCVE -> 8 MB Flash + 8 MB PSRAM

Dans l'IDE tu as bien mis "PSRAM : Enabled" pour la carte ESP32 Dev Module ?

pour le moment je suis repassé sur l'ancienne librairie

L'essentiel est d'en avoir une opérationnelle pour ton application !
La librairie de JM Zingg progresse à son rythme..... quand l'auteur sera disponible il proposera une amélioration de la prise en charge des ePaper 7 couleurs. Comme il a choisi de faire une librairie ePaper 'universelle' on comprend bien que le travail ne manque pas pour gérer la diversité des affciheurs.

C'est ou que j'active PSRAM ?
image

avec 'WROVER' sélectionnée il me semble que PRAM est activé de façon implicite, le choix n'apparaît pas dans le menu.

D'accord merci