IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Impossible de lire mes fichiers SPIFFS


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    J'avais oublié le changement d'écran aussi


    oui si vous avez changé le file system sous jacent et utilisez LittleFS ou SPIFF, il faut envoyer les requêtes correctes car vous n'adressez pas la même partition sinon

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 034
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 034
    Par défaut
    merci Jay M

    oui si vous avez changé le file system sous jacent et utilisez LittleFS ou SPIFF, il faut envoyer les requêtes correctes car vous n'adressez pas la même partition sinon
    ok, je vais donc changer les appels

    J'aurais une dernière requête à savoir
    j'ai toujours cette alerte à compilation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ....func.ino:1019:17: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
     1019 |   print_define ("openw", 0);
    Que signifie svp ce message ?

  3. #3
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    Citation Envoyé par cobra38 Voir le message
    Que signifie svp ce message ?
    je suppose que vous avez défini votre fonction print_define() comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void print_define(char * s, int v) {
      ...
    }
    (ou quelque chose d'approchant)

    vous dites alors au compilateur que les caractères pointés par le premier paramètre pourraient être modifiés par la fonction puisque pas constants.

    Quand vous appelez print_define ("openw", 0);, le premier paramètre est une chaîne non modifiable (un const char *) ==> le compilateur vous dit que vous passez une chaîne non modifiable à une fonction qui voudrait peut être la modifier... donc il n'est pas content.

    il faut déclarer la fonction comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void print_define(const char * s, int v) {
      ...
    }
    ainsi vous promettez de ne pas modifier la chaîne pointée par s

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 034
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 034
    Par défaut
    Merci
    j'ai pu corriger la fonction ' void print_define(const char * s, int v) {} '
    et j'ai voulu appliquer le même démarche pour cette fonction là mais .....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    .....\func.ino: In function 'void scr_pack()':
    .... \func.ino:330:36: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
      330 |   char *scr_name_tmp[scr_count] = {""}; //def
    ...\func.ino:334:19: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
      334 |     scr_name[i] = "";
     
     ../..
    voici la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    /====================================================
    //                    scr_pack()
    //===================================================
    void scr_pack( )
    {
      Serial.println(F("void scr_pack"));
      Serial.println(F("init scr"));
      char *scr_name_tmp[scr_count] = {""}; //def   
     
      for (byte i = 0; i < scr_count; i++)
      {
        scr_name[i] = "";
        scr_name_tmp[i] = "";
      }
     
    #ifdef S0
      scr_name[0] = "S0";
      Serial.println(F("scr_name[0]=S0"));
    #endif
     
    #ifdef S1
      scr_name[1] = "S1";
      Serial.println(F("scr_name[1]=S1"));
    #endif
     
    #ifdef S2
      scr_name[2] = "S2";
      Serial.println(F("scr_name[2]=S2"));
    #endif
     
    #ifdef S3
    #ifndef tft2_S3
      scr_name[3] = "S3";
      Serial.println(F("scr_name[3]=S3"));
    #endif
    #endif
     
    #ifdef S4
    #ifndef tft2_S4
      scr_name[4] = "S4";
      Serial.println(F("scr_name[4]=S4"));
    #endif
    #endif
     
    #ifdef S5
      scr_name[5] = "S5";
      Serial.println(F("scr_name[5]=S5"));
    #endif
     
     
    #if defined (pin_sd) && defined (Sf)
      scr_name[6] = "Sf";
      Serial.println(F("scr_name[6]=Sf"));
    #endif
     
    #ifdef Sg
    #ifndef tft2_Sg
      scr_name[7] = "Sg";
      Serial.println(F("scr_name[7]=Sg"));
    #endif
    #endif
     
    #ifdef Sn //last
      scr_name[9] = "Sn";
      Serial.println(F("scr_name[9]=Sn"));
    #endif
     
     
      byte i_in = 0;
     
     
      for (byte i = 0; i < scr_count; i++)
      {
        #ifdef debug
         Serial.print(F("scr_name=="));
         Serial.println(scr_name[i]);
         Serial.print(F(" i="));
         Serial.println(i);
        #endif
     
        if (scr_name[i] != "")
        {
          //Serial.println("ADD");
          scr_name_tmp[i_in] = scr_name[i];
          i_in++;
          scr_count_pack = i_in;
     
        }
     
        scr_name[i] = "";
      }
     
    #ifdef debug
      Serial.print("scr_count_pack=");
      Serial.println(scr_count_pack);
    #endif
      for (byte i = 0; i < scr_count; i++)
      {
        scr_name[i] = scr_name_tmp[i];
        Serial.print("SCR["); Serial.print(i); Serial.print("]=");
        Serial.println(scr_name[i]);
      }
     
    }

  5. #5
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    quand vous faites ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      char *scr_name_tmp[scr_count] = {""}; //def
    vous essayez de mettre le pointeur vers une chaine de caractère constants (le "") dans un pointeur qui dit que le contenu peut varier.

    il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const  char *scr_name_tmp[scr_count] = {""}; //def
    attention rien n'interdirait au compilateur de mettre la chaîne "S1" (c'est une variable locale à votre fonction) sur la pile et donc le pointeur que vous obtenez ne sera plus valable à la sortie de la fonction (souvent les chaînes constantes sont en mémoire flash suivant l'arduino donc ça fonctionnera)

  6. #6
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 034
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 034
    Par défaut
    mille mercis Jay M

    vous essayez de mettre le pointeur vers une chaine de caractère constants (le "") dans un pointeur qui dit que le contenu peut varier.
    je l'avais fait au départ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char *scr_name[scr_count] = {""};
    mais j'avais oublié de la faire là

    const char *scr_name_tmp[scr_count] = {""}; //def
    et çà plantait à la compilation lors de la comparaison (logique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scr_name_tmp[i_in] = scr_name[i];
    maintenant çà marche mieux

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    Oui

    Attention cela dit à la comparaison de pointeurs pour comparer leur contenu
    Ça ne fonctionne que si les chaînes sont allouées globalement par le compilateur et jamais libérées
    Le plus propre serait d’avoir un tableau global de ces chaînes et un enum dans le même ordre
    Dans le code vous utilisez l’énumération pour représenter l’état et s’il y a besoin d’imprimer le texte vous allez le chercher dans le tableau global à l’index de l’énum.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const char * const lesTextes[] = {"v1", "v2", "v3"};
    enum : byte {v1, v2, v3};
    Dans le code il suffit d’un byte pour représenter la valeur et tester (c’est plus rapide)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    byte v = v2;
    …
      if (v == v3)
    Et l’impression du texte associé c’est simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Serial.println(lesTextes[v]);

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 034
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 034
    Par défaut
    Ok merci bien Jay M

    pour l'info

Discussions similaires

  1. [UBUNTU] Impossible de compiler mes fichiers
    Par Death83 dans le forum Ubuntu
    Réponses: 32
    Dernier message: 15/01/2010, 18h16
  2. impossible d'ouvrir mes fichiers
    Par Maria1505 dans le forum Windows XP
    Réponses: 8
    Dernier message: 25/10/2007, 14h18
  3. Impossible de recupere mes fichiers.dbx
    Par ohi111 dans le forum Outlook
    Réponses: 3
    Dernier message: 19/04/2007, 18h24
  4. Réponses: 1
    Dernier message: 19/12/2005, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo