[ESP32] Problème avec pointeur et file.read()

Bonjour,
Je souhaite lire un fichier et le mettre dans un buffer PSRAM.

La taille du fichier est de 503 Bytes contenu dans la variable size.

(Le problème ne vient pas du buffer psram).

 byte * psBuf = (byte *)ps_calloc(size, sizeof(byte));
  memset(psBuf, 0, size );
  while (file.available()) {
   // *(psBuf++) = file.read();
     byte ch = file->read();
  }

Je ne l'ai pas mis ici mais je libère le buffer après avec un free(psBuf).

quand je commente la ligne psBuff ca fonctionne, pas de plantage.

Quand je la décommente et je commente l'autre ligne ca plante, reboot.
Normalement un calloc c'est l'équivalent d'un tableau.

j'ai essayé ce code et ca plante toujours.

byte * psBuf = (byte *)ps_calloc(size, sizeof(byte));
  memset(psBuf, 0, size );
  size_t ipos = 0;
  while (file.available()) {
    psBuf[ipos++] = file.read();
   //  byte ch = file->read();
  }

J'ai fait le test aussi en activant PSRAM dans l'ide arduino ca n'a rien donné.

Avez vous une idée ?

Je n'ai plus de plantage en utilisant calloc au lieu de ps_calloc.

Avez vous vérifié que la PSRAM est activée ? (ou même que votre module en dispose)

Avez vous dans le setup


if(psramInit()) Serial.println("PSRAM OK");
else Serial.println("PSRAM KO");

Notez que calloc() initialise la mémoire a 0, ce n’est pas nécessaire puisque vous la remplissez ensuite, autant donc utiliser un malloc() (et dans le cas présent ps_malloc())

Je n'ai pas activé la PSRAM car sinon certains programme de ne peuvent pas fonctionner, sinon on peut utilisé la psram, sans l'activer dans le menu, en le faisant manuellement.

mon module en dispose, 16MB/4MB PSRAM, et une autre avec 16MB/8MB PSRAM.

Je crois que par defaut malloc utilise la psram. J'tilise le core 1.0.6 peut être qu'avec la 2.0.1 ca peut fonctionner.

oui je crois que par défaut la config du heap_caps_malloc() utilise MALLOC_CAP_SPIRAM

j'ai fait des tests et en fait le malloc ne fonctionne pas.
par contre ps_malloc fonctionne maintenant, en enlevant la ligne suivante que j'avais mis.

esp_spiram_init_cache();
J'ai activé l'option enable dans l'interface arduino.

[EDIT1]
J'ai testé un fichier de 1,5MB et sa passe, par contre ca met du temps à remplir la psram, je pensais que ca plantait au départ, car sur mon terminal ca ne faisait rien pendant 15 sec.
C'est un buffer que je remplis avec le contenu d'un fichier.

Je devrais limiter à 512ko.

[EDIT2]
Donc je confirme, quand on met à disable la psram, sur l'arduino ca plante lorsqu'on utilise ps_malloc

Est ce que je peux laisser à enable la psram même si je n'utilise pas ?
sauf pour des cas particuliers, ou il faut impérativement l'enlever.

J'ai un module WROVER-E avec 16MB/4MB, j'ai sélectionné quand même ESP32 Dev Module sur l'arduino au lieu de ESP32 Wrover Module.

oui, je crois que par défaut vous laissez alors le compilo décider où stocker les variable

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.