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 :

Arduino - Problème pointeur pour remplir tableau 2D


Sujet :

Arduino

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2020
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Arduino - Problème pointeur pour remplir tableau 2D
    Bonjour,

    je suis novice en programmation et j'esssaye de développer un programme en Arduino. Malheureusement je rencontre un soucis pour remplir un tableau à 2 dimensions via une fonction. J'ai lu pas mal de tuto concernant l'utilisation de pointeur mais je ne parviens malheureusement pas à résoudre mon problème.

    Voici le code:

    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
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    /////////////////////////////////////////
    //         CONSTANTE DEFINITION        //
    /////////////////////////////////////////
     
     
    const int SM_SPEED=100 ;                  // SERVOMOTOR TIME IN MILISECONDS (100=HIGH , 1000=LOW)
    const float L1=42.4;                      // "CUISSE" LENGTH
    const float L2=53.3;                      // "MOLLET" LENGTH
    const float L3=75.5;                      // FEET LENGTH
    const float COORD_INIT [3] = {60,0,125};  // COORDINATE X,Y,Z OF INITIAL POSITION
     
    // DEFINE PIN NUMBER FOR EACH DDL (GAMMA, ALPHA, BETA) AND EACH LEG. 
     
    const int PIN [6][3] = {      
      {29,30,31},                 // LEG 1 (LEFT FRONT) 
      {25,26,27},                 // LEG 2 (LEFT MIDDLE)
      {18,17,16},                 // LEG 3 (LEFT REAR)
      {13,14,15},                 // LEG 4 (RIGHT FRONT) 
      {9,10,11},                  // LEG 5 (RIGHT MIDDLE) 
      {2,1,0},                    // LEG 6 (RIGHT REAR) 
    };
     
    // DEFINE POSITION 0° FOR EACH DDL (GAMMA, ALPHA, BETA) AND EACH LEG. 
     
    const int POSITION_0 [6][3] = { 
      {1700,1950,2500},           // LEG 1 (LEFT FRONT) 
      {1400,1400,2450},           // LEG 2 (LEFT MIDDLE)
      {800,1900,2500},            // LEG 3 (LEFT REAR)
      {800,1450,2500},            // LEG 4 (RIGHT FRONT) 
      {1250,1400,2200},           // LEG 5 (RIGHT MIDDLE) 
      {2000,1300,2400},           // LEG 6 (RIGHT REAR) 
    };
     
     
     
    /////////////////////////////////////////
    //          VARIABLE DEFINITION        //
    /////////////////////////////////////////
     
    float ANGLE [3]={0};                      // VECTOR (GAMMA,ALPHA,BETA)
    int POSITION [6][3]={{0}};                // POSITION MATRIX WITH SM COMMAND FOR EACH LEG AND DLL
     
     
     
     
     
     
    // DEFINE ROTATION SIGN FOR POSITIVE ANGLE GAMMA, ALPHA, BETA. 
     
    const int SIGN [6][3] = { 
      {-1,-1,-1},           // LEG 1 (LEFT FRONT) 
      {-1,-1,-1},           // LEG 2 (LEFT MIDDLE)
      {-1,-1,-1},           // LEG 3 (LEFT REAR)
      { 1,-1,-1},           // LEG 4 (RIGHT FRONT) 
      { 1,-1,-1},           // LEG 5 (RIGHT MIDDLE) 
      { 1,-1,-1},           // LEG 6 (RIGHT REAR) 
    };
     
     
    void setup()
    {
      Serial.begin(9600); 
     
    }
     
     
    void loop() {
     
    COORD_CALCUL(COORD_INIT[0],COORD_INIT[1],COORD_INIT[2],ANGLE);   // Calculate gamma, alpha and beta angles for initial position x,y and z
     
    POSITION_MAT (ANGLE,SIGN,POSITION_0,POSITION[6][3]);             // Calculate matrix of command servomotors for intial position from ANGLE
     
       Serial.println("Sortie de la boucle");
     
     
     
     
    stop();
    }
     
     
    void stop()
    {
     while(1);
    }
     
    ////////////////////////////////////////////////////////////////////////
    // FUNCTION : CALCULATE GAMMA,ALPHA AND BETA VERSUS COORDINATE X,Y,Z  //
    ////////////////////////////////////////////////////////////////////////
     
    void COORD_CALCUL (float x, float y, float z,float *ANGLE) {
        float xx=pow((pow(x,2)+pow(y,2)),0.5);
        float r= pow(pow((xx-L1),2)+pow(z,2),0.5);
        float alpha3=(atan(z/(xx-L1)))*180/3.14116;
        float alpha4=(acos((pow(r,2)+pow(L2,2)-pow(L3,2))/(2*r*L2)))*180/3.14116;
        float alpha= alpha3 - alpha4;
        float beta1=(acos((pow(L2,2)+pow(L3,2)-pow(r,2))/(2*L2*L3)))*180/3.14116;
        float beta =180-beta1;
        float gamma=(asin(y/(pow(pow(x,2)+pow(y,2),0.5))))*180/3.14116;
     
        ANGLE [0]= gamma;
        ANGLE [1]= alpha; 
        ANGLE [2]= beta;
    }
     
    ///////////////////////////////////////////////////////////////////////////////////
    // FUNCTION : CALCULATE POSITION MATRIX VERSUS ANGLE, SIGN AND INITIAL POSITION  //
    ///////////////////////////////////////////////////////////////////////////////////
     
    void POSITION_MAT (float ANGLE [3], int SIGN[6][3], int POSITION_0[6][3], int *POSITION[6][3]) {
     
     
     
       for(int ii = 0 ; ii < 3 ; ii++)
          {
             for(int jj = 0 ; jj < 6 ; jj++)
               {
                int dd = int(( POSITION_0 [jj] [ii] + SIGN [jj] [ii] * (ANGLE [ii]) *2000/180));
                Serial.println(dd);
                POSITION [jj] [ii]= int(dd);
     
               }      
           }
     
    }
     
     
    //////////////////////////////////////////////
    // FUNCTION : MOVE EACH DLL IN 0° POSITION  //
    //////////////////////////////////////////////
     
    void SM_POSITION(int PIN[6][3],int POSITION[6][3], int SM_SPEED ) {
        for(int ii = 0 ; ii < 3 ; ii++)
           { 
            for(int jj = 0 ; jj < 6 ; jj++)
              {
                SERVO((PIN [jj] [ii]),(POSITION [jj] [ii]),SM_SPEED);
              }      
           }
    }
     
     
    //////////////////////////////////////////////
    // FUNCTION : SEND A COMMAND TO MOVE SM     //
    //////////////////////////////////////////////
     
    void SERVO(int servo, int position, int time) {
       Serial.print("#");
       Serial.print(servo);
       Serial.print("P");
       Serial.print(position);
       Serial.print("T");
       Serial.println(time);
       delay(time);
    }

    A la ligne 41, je déclare le tableau de 6x3 "POSITION".
    A la ligne 71, je lance une fonction "POSITION_MAT" qui doit me remplir le tableau "POSITION" à l'aide d'autres tableaux ("ANGLE", "POSITION_0" et "SIGN").
    A la ligne 110, j'écris la fonction "POSITION_MAT".

    Le problème est que le calcul se fait correctement (les valeurs de "dd" semblent correctes) mais au moment d'écrire les valeurs de "dd" dans le tableau "POSITION", les résultats devienent n'importe quoi. Je pense que j'ai un problème dans l'utilisateur des pointeurs.

    Si quelqu'un a une idée. Et je m'excuse si ce problème est trivial.

    Merci

    Jérôme

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Le tableau POSITION est désigné par l'identifiant POSITION, il ne faut pas utiliser en paramètre POSITION[6][3] qui désigne une case du tableau (qui même en dehors du tableau car la dernière case est POSITION[5][2]).

    La fonction POSITION_MAT reçoit un moyen d'accéder au tableau POSITION, c'est bien un pointeur qui est reçu, mais on peut utiliser la notation tableau dans ce cas (et la taille dans le 1er crochet est ignorée donc inutile) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void POSITION_MAT(float ANGLE[], int SIGN[][3], int POSITION_0[][3], int POSITION[][3])
    // ou bien en notation pointeur
    void POSITION_MAT(float* ANGLE, int (*SIGN)[3], int (*POSITION_0)[3], int (*POSITION)[3])
    Et attention les fonctions doivent être déclarées avant leur premier point d'utilisation.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2020
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup. Ca a l'air de fonctionner.

    Si je comprends bien, je n'ai pas besoin d'utiliser de pointeur car un tableau est en quelque sorte déjà un pointeur. Je me trompe?

    Par contre, je ne comprend pas bien pourquoi on doit déclarer la 2ème dimension du tableau (le nombre de colonne) et pas le nombre de ligne.

    En tous cas, merci encore de ton aide.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2020
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je me permets de ré-ouvrir le sujet car un message d'erreur s'affiche désormais et il semble qu'il s'agit d'une erreur de pointeur (même si le message n'est pas vraiment explicite).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp:51:1: error: unable to find a register to spill in class 'POINTER_REGS'"
    et j'ai des warning du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    note: initializing argument 9 of 'void MOVE_SM(float*, float*, float (*)[3], int (*)[3], int (*)[3], int (*)[3], int (*)[3], int, int (*)[3])'

    Est-ce que je fais une erreur dans l'utilisation des tableaux dans les fonctions?


    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
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    /////////////////////////////////////////
    //         CONSTANT DEFINITION        //
    /////////////////////////////////////////
     
     
    const int SM_SPEED=100 ;                  // SERVOMOTOR TIME IN MILISECONDS (100=HIGH , 1000=LOW)
    const float L1=42.4;                      // "CUISSE" LENGTH
    const float L2=53.3;                      // "MOLLET" LENGTH
    const float L3=75.5;                      // FEET LENGTH
    const float COORD_INIT [3] = {80,0,100};  // COORDINATE X,Y,Z OF INITIAL POSITION
    const float XYZ_1 [3] = {80,60,80};       // COORDINATE X,Y,Z OF WALK STEP 1
    const float XYZ_2 [3] = {80,60,100};      // COORDINATE X,Y,Z OF WALK STEP 2
     
     
    // DEFINE PIN NUMBER FOR EACH DDL (GAMMA, ALPHA, BETA) AND EACH LEG. 
     
    const int PIN [6][3] = {      
      {29,30,31},                 // LEG 1 (LEFT FRONT) 
      {25,26,27},                 // LEG 2 (LEFT MIDDLE)
      {18,17,16},                 // LEG 3 (LEFT REAR)
      {13,14,15},                 // LEG 4 (RIGHT FRONT) 
      {9,10,11},                  // LEG 5 (RIGHT MIDDLE) 
      {2,1,0},                    // LEG 6 (RIGHT REAR) 
    };
     
     
    // DEFINE SM POSITION FOR ANGLE 0° FOR EACH DDL (GAMMA, ALPHA, BETA) AND EACH LEG. 
     
    const int POSITION_0 [6][3] = { 
      {1700,1950,2500},           // LEG 1 (LEFT FRONT) 
      {1400,1400,2450},           // LEG 2 (LEFT MIDDLE)
      {800,1900,2500},            // LEG 3 (LEFT REAR)
      {800,1450,2500},            // LEG 4 (RIGHT FRONT) 
      {1250,1400,2200},           // LEG 5 (RIGHT MIDDLE) 
      {2000,1300,2400},           // LEG 6 (RIGHT REAR) 
    };
     
     
    // DEFINE ROTATION SIGN FOR POSITIVE ANGLE GAMMA, ALPHA, BETA. 
     
    const int SIGN [6][3] = { 
      {-1,1,-1},           // LEG 1 (LEFT FRONT) 
      {-1,1,-1},           // LEG 2 (LEFT MIDDLE)
      {-1,1,-1},           // LEG 3 (LEFT REAR)
      { 1,1,-1},           // LEG 4 (RIGHT FRONT) 
      { 1,1,-1},           // LEG 5 (RIGHT MIDDLE) 
      { 1,1,-1},           // LEG 6 (RIGHT REAR) 
    };
     
     
    // DEFINE CORRECTION GAMMA ANGLE FOR LEG 1,3,4 AND 6 
     
    const float CORRECTION [6][3] = { 
      {45,0,0},                // LEG 1 (LEFT FRONT) 
      {0,0,0},                 // LEG 2 (LEFT MIDDLE)
      {-45,0,0},                // LEG 3 (LEFT REAR)
      {45,0,0},                // LEG 4 (RIGHT FRONT) 
      {0,0,0},                 // LEG 5 (RIGHT MIDDLE) 
      {-45,0,0},                // LEG 6 (RIGHT REAR) 
    };
     
    // DEFINE ACTIVE PINS FOR WALK SEQUENCE
    const int ACTIVE_PIN_1 [6][3] = {      
      {1,0,0},                // LEG 1 (LEFT FRONT) 
      {0,0,0},                // LEG 2 (LEFT MIDDLE)
      {1,0,0},                // LEG 3 (LEFT REAR)
      {0,0,0},                // LEG 4 (RIGHT FRONT) 
      {1,0,0},                // LEG 5 (RIGHT MIDDLE) 
      {0,0,0},                // LEG 6 (RIGHT REAR) 
    };
     
     
    // DEFINE ACTIVE PINS FOR WALK SEQUENCE
    const int ACTIVE_PIN_2 [6][3] = {      
      {0,0,0},                // LEG 1 (LEFT FRONT) 
      {1,0,0},                // LEG 2 (LEFT MIDDLE)
      {0,0,0},                // LEG 3 (LEFT REAR)
      {1,0,0},                // LEG 4 (RIGHT FRONT) 
      {0,0,0},                // LEG 5 (RIGHT MIDDLE) 
      {1,0,0},                // LEG 6 (RIGHT REAR) 
    };
     
     
    /////////////////////////////////////////
    //          VARIABLE DEFINITION        //
    /////////////////////////////////////////
     
    float ANGLE [3]={0};                      // VECTOR (GAMMA,ALPHA,BETA)
    int POSITION [6][3]={{0}};                // POSITION MATRIX WITH SM COMMAND FOR EACH LEG AND DLL
     
     
     
     
     
     
     
     
     
     
     
    ////////////////////////////////////////////////////////////////////////
    // FUNCTION : CALCULATE GAMMA,ALPHA AND BETA VERSUS COORDINATE X,Y,Z  //
    ////////////////////////////////////////////////////////////////////////
     
    void COORD_CALCUL (float x, float y, float z,float *ANGLE) {
        float xx=pow((pow(x,2)+pow(y,2)),0.5);
        float r= pow(pow((xx-L1),2)+pow(z,2),0.5);
        float alpha3=(atan(z/(xx-L1)))*180/3.14116;
        float alpha4=(acos((pow(r,2)+pow(L2,2)-pow(L3,2))/(2*r*L2)))*180/3.14116;
        float alpha= alpha3 - alpha4;
        float beta1=(acos((pow(L2,2)+pow(L3,2)-pow(r,2))/(2*L2*L3)))*180/3.14116;
        float beta =180-beta1;
        float gamma=(asin(y/(pow(pow(x,2)+pow(y,2),0.5))))*180/3.14116;
     
        ANGLE [0]= gamma;
        ANGLE [1]= alpha; 
        ANGLE [2]= beta;
     
        // Serial.println(gamma);
        // Serial.println(alpha);
        // Serial.println(beta);
    }
     
     
     
    /////////////////////////////////////////////////////////////////////////////////////////////////
    // FUNCTION : CALCULATE SM COMMAND MATRIX VERSUS ANGLE, SIGN, CORRECTION AND INITIAL POSITION  //
    /////////////////////////////////////////////////////////////////////////////////////////////////
     
    void POSITION_MAT (float ANGLE [],float CORRECTION [][3], int SIGN[][3], int POSITION_0[][3], int POSITION[][3], int ACTIVE_PIN [][3]) {
       for(int ii = 0 ; ii < 3 ; ii++)
          {
             for(int jj = 0 ; jj < 6 ; jj++)
               {
                POSITION [jj] [ii] = int(( POSITION_0 [jj] [ii] + SIGN [jj] [ii] * ACTIVE_PIN [jj][1] * ((ANGLE [ii])+ (CORRECTION [jj][ii])) *2000/180));
                //Serial.println(POSITION [jj] [ii]);
               }      
           }
     
    }
     
     
    //////////////////////////////////////////////
    // FUNCTION : MOVE EACH DLL IN 0° POSITION  //
    //////////////////////////////////////////////
     
    void SM_POSITION(int PIN[][3],int POSITION[][3], int SM_SPEED ) {
        for(int ii = 0 ; ii < 3 ; ii++)
           { 
            for(int jj = 0 ; jj < 6 ; jj++)
              {
                SERVO((PIN [jj] [ii]),(POSITION [jj] [ii]),SM_SPEED);
              }      
           }
    }
     
     
    //////////////////////////////////////////////
    // FUNCTION : SEND A COMMAND TO MOVE SM     //
    //////////////////////////////////////////////
     
    void SERVO(int servo, int position, int time) {
       Serial.print("#");
       Serial.print(servo);
       Serial.print("P");
       Serial.print(position);
       Serial.print("T");
       Serial.println(time);
       delay(time);
    }
     
    /////////////////////////////////////////////////////
    // FUNCTION : MOVE ACTIVE SM FROM XYZ coordinate   //
    /////////////////////////////////////////////////////
     
    void MOVE_SM(float XYZ [], float ANGLE [], float CORRECTION[] [3], int SIGN[] [3],int POSITION_0[][3],int POSITION[] [3], int PIN[] [3],int SM_SPEED, int ACTIVE_PIN[][3]) {
     
    COORD_CALCUL(XYZ[0],XYZ[1],XYZ[2],ANGLE);                                       // Calculate gamma, alpha and beta angles for initial position x,y and z
     
    POSITION_MAT (ANGLE,CORRECTION,SIGN,POSITION_0,POSITION, ACTIVE_PIN);           // Calculate matrix of command servomotors for intial position from ANGLE
     
    SM_POSITION(PIN,POSITION,SM_SPEED );                                            // Move SM in accordance with POSITION matrix command
    }
     
     
     
     
     
     
     
     
    void setup()
    {
      Serial.begin(9600); 
     
    }
     
     
    void loop() {
     
     MOVE_SM(XYZ_1, ANGLE, CORRECTION, SIGN,POSITION_0, POSITION, PIN, SM_SPEED, ACTIVE_PIN_1);
     
     
     
    stop();
    }
     
     
    void stop()
    {
     while(1);
    }

  5. #5
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Je n'ai jamais rencontré la première erreur. Difficile de t'aider sans plus d'info.

    Il manque le début de la phrase pour le warning. Néanmoins, je ne vois pas un warning mais une erreur sur le 9ième paramètre. Le paramètre est indiqué comme un tableau qui serait modifié, mais le tableau passé en argument est constant ce qui n'est pas acceptable. Il faut indiquer que le paramètre reçu ne sera pas modifié en ajoutant le mot const devant le paramètre. Cette erreur est présente à plusieurs endroits.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2020
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci Dalfab. Le fait de rajouter le terme "const" devant les paramètres non modifiés a permis de supprimer tous les warnings.

    Il ne reste plus "que" l'erreur de compilation:

    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
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp: In function 'main':
     
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp:51:1: error: unable to find a register to spill in class 'POINTER_REGS'
     
     }
     
     ^
     
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp:51:1: error: this is the insn:
     
    (insn 321 320 507 5 (set (reg:SF 155 [ D.2197 ])
     
            (mem:SF (post_inc:HI (reg:HI 2 r2 [orig:145 ivtmp.98 ] [145])) [10 MEM[base: _126, offset: 0B]+0 S4 A8])) C:\Users\Jerome & Isa\Documents\Jerome\SW\Mini_HEXAPODE\Arduino\Hexa_V2\Hexa_V2.ino:135 100 {*movsf}
     
         (expr_list:REG_INC (reg:HI 2 r2 [orig:145 ivtmp.98 ] [145])
     
            (nil)))
     
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp:51: confused by earlier errors, bailing out
     
    lto-wrapper: C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-gcc returned 1 exit status
     
    c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.9.2/../../../../avr/bin/ld.exe: error: lto-wrapper failed
     
    collect2.exe: error: ld returned 1 exit status
     
    exit status 1
    Erreur de compilation pour la carte Arduino/Genuino Mega or Mega 2560
    Est-ce que certains ont déjà rencontré ce message?

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2020
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Après plusieurs tests, je viens de trouver une solution mais je ne sais pas pourquoi ça fonctionne désormais et d'où provenait l'erreur.

    Dans la fonction "POSITION_MAT", j'ai simplement ajouter une ligne "Serial.println("");" avant que la fonction ne remplisse le tableau "POSITION". Si quelqu'un à une explication, je suis preneur...

    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
    /////////////////////////////////////////////////////////////////////////////////////////////////
    // FUNCTION : CALCULATE SM COMMAND MATRIX VERSUS ANGLE, SIGN, CORRECTION AND INITIAL POSITION  //
    /////////////////////////////////////////////////////////////////////////////////////////////////
     
    void POSITION_MAT (const float ANGLE [],const float CORRECTION [][3], const int SIGN[][3], const int POSITION_0[][3], int POSITION[][3], const int ACTIVE_PIN [][3]) {
       for(int ii = 0 ; ii < 3 ; ii++)
          {
             for(int jj = 0 ; jj < 6 ; jj++)
               {
                Serial.println("");
                POSITION [jj] [ii] = int( POSITION_0 [jj] [ii] + SIGN [jj] [ii] * ACTIVE_PIN [jj][1] * ((ANGLE [ii])+ (CORRECTION [jj][ii])) *2000/180);
               }      
           }
     
    }

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/10/2016, 11h59
  2. [Toutes versions] Problème condition pour filtre tableau croisé dynamique VBA
    Par Mikamac dans le forum Excel
    Réponses: 0
    Dernier message: 07/09/2014, 17h23
  3. Réponses: 3
    Dernier message: 19/09/2009, 16h37
  4. problème code pour remplir un fichier Excel
    Par ririrourou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/07/2008, 09h51
  5. pointeur pour un tableau 2d
    Par olive14 dans le forum C
    Réponses: 6
    Dernier message: 07/05/2005, 15h02

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