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 :

Un warning sur un tableau de constantes


Sujet :

Arduino

  1. #1
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut Un warning sur un tableau de constantes
    Bonjour,

    Mon sketch passe à la compilation mais le compilateur me retourne quand même le Warning suivant:

    \\DS1821\Datas\ELECTRONIQUE\TEENSY\Essais pgm\sketch_FIR_005\sketch_FIR_005.ino:62:13: warning: uninitialized const 'fir1_Coeffs' [-fpermissive]
    const short fir1_Coeffs[57]; // définition du tableau de constantes que l'on va calculer
    J'ai l'impression que le compilateur n'aime pas que je définisse un tableau de constantes que je remplis plus tard ?
    D'ailleurs j'avais défini une constante "length" à 57 et l'expression "const short fir1_Coeffs[length];" n'était pas appréciée par le compilateur...

    Voici le code du programme:
    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
     
    /*
    \\DS1821\Datas\ELECTRONIQUE\TEENSY\Essais pgm\sketch_FIR_005\sketch_FIR_005.ino
    */
     
    #include <Audio.h>
    #include <Wire.h>
    #include <SPI.h>
    #include <SD.h> 
    #include <SerialFlash.h>
    #include <Bounce.h>
    #include <filter_fir.h>
     
    //This section has been copied from the Teensy FIR example
    // If this pin is grounded the FIR filter is turned off
    // which just passes the audio sraight through
    // Don't use any of the pins listed above
    #define PASSTHRU_PIN 1	//donc si je comprends bien il faut mettre la pin 1 à +3.3V ??
    // If this pin goes low the next FIR filter in the list
    // is switched in.
    #define FILTER_PIN 0 //if I understand correctly, the input of the Filter is pin 0
    /*
    These lines are followed by two "debounce" instrutions that are unknown to me,
    // seem to manage the buttons, that I don't use in my project, so I remove the "bounce" lines
    */
     
    // GUItool: begin automatically generated code
    AsyncAudioInputSPDIF3    spdif_async1;   //xy=145.3333282470703,121.33333587646484
    AudioFilterFIR           fir1;           //xy=353.25,121.25
    AudioOutputI2S           i2s1;           //xy=569.25,126.25
    AudioConnection          patchCord1(spdif_async1, 0, fir1, 0);
    AudioConnection          patchCord2(fir1, 0, i2s1, 0);
    AudioControlSGTL5000     sgtl5000_1;     //xy=360.25,265.25
    // GUItool: end automatically generated code
     
    //LPF Coefficients provided by T-Filter
    // I got only 5 coefficients, that is not enough, but I don't know why !?!
     
    const short length = 57;	// définition de la longueur du filtre, i.e le nombre de coefficients
     
    // Liste des 57 coefficients bruts donnés par lesite arc.id.au de calcul des fltres
    float Coeffs_Bruts[] = { -0.000220, 0.000395, -0.000589, 0.000753, -0.000817, 0.000696, -0.000308,
     -0.000416, 0.001510, -0.002950, 0.004644, -0.006416, 0.008012, -0.009109, 0.009343, -0.008340, 
    0.005765, -0.001367, -0.004979, 0.013234, -0.023175, 0.034397, -0.046329, 0.058275, -0.069471, 
    0.079153, -0.086631, 0.091355, 0.907029, 0.091355, -0.086631, 0.079153, -0.069471, 0.058275, 
    -0.046329, 0.034397, -0.023175, 0.013234, -0.004979, -0.001367, 0.005765, -0.008340, 0.009343, 
    -0.009109, 0.008012, -0.006416, 0.004644, -0.002950, 0.001510, -0.000416, -0.000308, 0.000696, 
    -0.000817, 0.000753, -0.000589, 0.000395, -0.000220};
     
    // The declaration below seems similar to the "struct" declaration used in the Teensy FIR Filter example
    // but the "const" approach has been said to be more optimized than the éstruct" approach
    const short fir1_Coeffs[57]; // définition du tableau de constantes que l'on va calculer
    								// à partir de la liste "Coeffs_Bruts" du dessus
     
     
     
     
    //const int myInput = AUDIO_INPUT_MIC;  // remove from the Teensy FIR example
    const int myInput = AUDIO_INPUT_LINEIN; // because my correct input is not MIC
    			// d'autres exemples utilisent myInput = AUDIO_INPUT_LINEIN;
    			// avec un diagramme AudioDesignTool dans le domaine digital aussi
    			// par ex le prog "Invert Phase Audio Signal"
     
    unsigned long last_time = millis(); // copied from the Teensy FIR example
     
    void setup()
    {
    	Serial.begin(9600);	//copied from the Teensy FIR Filter example
    	delay(300);			//copied from the Teensy FIR Filter example
     
    	//transfère les Coeffs_Bruts dans le tableau LPF_Coeffs, sous forme "short"
    	for (int i=1 ; i<=length ; i++) {
    		fir1_Coeffs[i] == (short) (32768 * Coeffs_Bruts[i]);
     
    		/*
    		if (i=length){
    			Serial.println("Tableau fir1_Coeffs initialisé");
    			Serial.println("Length= ", length);
    		}
    		*/
     
    	} //fin du remplissage du tableau fir1_Coeffs
     
     
    	pinMode(PASSTHRU_PIN, INPUT_PULLUP); //probably activates the Pull-Up resistor because PASSTHRU_PIN is defined as an input
    	pinMode(FILTER_PIN, INPUT_PULLUP);   //probably activates the Pull-Up resistor because FILTER_PIN is defined as an input
     
    	//setup the audio shield
    	AudioNoInterrupts(); // added to the Teensy FIR example: recommended in the video 
    						 // what are the benefit ???
    					     // mentionned at the very beginning
     
    	AudioMemory(16); /*
    		The numberBlocks input specifies how much memory to reserve for audio data. 
    		Each block holds 128 audio samples, or approx 2.9 ms of sound. 
    		*/
    	// Enable the audio shield. select input. and enable output
    	sgtl5000_1.enable(); //added: was it missing in the Teensy example
    	//sgtl5000_1.InputSelect(myInput); 
    	/*
    							dois-je mettre spdif_async1 ou bien LINEIN comme dans la video ???
    							Je pense spdif_async1 puisque c'est le nom donné à AsyncAudioInputSPDIF3
    							qui remplace le AudioInputI2S de la video
    							Pas sûr car le pgm "Invert Phase Audio Signal" utilise bien
    							AUDIO_INPUT_LINEIN, donc je laisse myInput défini à 
    							AUDIO_INPUT_LINEIN
    							*/
    	sgtl5000_1.lineInLevel(5);
    	//sgtl5000_1.unmuteheadphone();
    	sgtl5000_1.volume(0.5); // I have a doubt about the parameter: is it correct ???
     
    	fir1.begin(fir1_Coeffs, 5); //initialize the fir filter 'fir1" declared before
    	AudioInterrupts();	//as recommended in the video
     
    	// Warn on the Serial Monitor if the passthru pin is grounded
    	if(!digitalRead(PASSTHRU_PIN)) {
    		Serial.print("PASSTHRU_PIN (");
    		Serial.print(PASSTHRU_PIN);
    		Serial.println(") is grounded");
    	}
     
    	// Warn if the filter pin is grounded: what for ??
    	//it is supposed to be the filter input, isn't it ?
    	if(!digitalRead(FILTER_PIN)) {
    		Serial.print("FILTER_PIN (");
    		Serial.print(FILTER_PIN);
    		Serial.println(") is grounded");
    	} 
     
    	//ADDED to the Teensy FIR example (as recommended by the video)
    	fir1.begin(fir1_Coeffs, 5); //Iniitialize the LPF filter as recommended by the AudioDesignTool
     
    	Serial.print("fir1 Filter: begin done"); // displays on the Serial Monitor
    	Serial.println("setup done");
     
    }	
     
    void loop()	//la video ne dit pas quoi faire dans cette boucle loop, 
    			//et l'exemple de Teensy pas grand chose !
    {
     
      // print information about resource usage
      // Proc = 18 (18),  Mem = 4 (5)
    	if (millis() - last_time >= 2500) {
    		Serial.print("Proc = ");
    		Serial.print(AudioProcessorUsage());
    		Serial.print(" (");    
    		Serial.print(AudioProcessorUsageMax());
    		Serial.print("),  Mem = ");
    		Serial.print(AudioMemoryUsage());
    		Serial.print(" (");    
    		Serial.print(AudioMemoryUsageMax());
    		Serial.println(")");
    		last_time = millis();
    	}
    }
    Que faudrait-il faire pour supprimer ce warning à a compilation ?

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 133
    Par défaut
    Bonjour,

    Si je ne me trompe, la valeur d'une constante doit être définie au moment de sa déclaration.
    Si on peut la modifier plus tard, c'est que ce n'est pas une constante.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    Voilà une réponse frappée au coin du bon sens !!

    Donc il faudrait que je transforme mon tableau "const short fir1_Coeffs[length]" en quelque chose du style "int short fir1_Coeffs[length]", et que j'initialise ce "int short fir1_Coeffs" dans le void setup ?

    Si tu penses que ça peut marcher, je voudrais savoir si, -*après l'initialisation faite dans le void setup*-, ça changera en terme de consommation processeur quand les valeurs seront manipulées ultérieurement ? en clair est-ce qu'un processeur consomme davantage de puissance pour manipuler des "int" que des "const" ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    Bon j'ai essayé de remplacer le "const" par "int" de façon supprimer le warning, mais dans ce cas j'ai une erreur de compilation (et non plus un simple warning) car plus loin dans le programme il y a une instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fir1.begin(fir1_Coeffs, length);
    qui réclame obligatoirement des arguments de type "const".

    L'intégralité du sketch est dans mon 1er post.

    Il faut donc que je conserve ma déclaration d'un tableau de constantes du type const short fir1_Coeffs[length];, mais chacune de ces constantes est calculée une fois pour toutes (et ne change évidemment plus dans tout le programme une fois calculée) et a pour valeur le résultat du calcul suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fir1_Coeffs[i] == (short) (32768 * Coeffs_Bruts[i]);
    Si je n'avais qu'une poignée de constantes, je pourrais les déclarer ligne par ligne, mais là j'en ai 57 et ce sera bien plus quand j'aurai passé la phase de test.

    J'ai donc besoin d'initialiser un tableau de constantes short, mais chacune des constantes est le résultat d'un calcul à partir d'un tableau de constantes float.

    Une solution Docteur ?

    Merci

  5. #5
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 884
    Par défaut
    comme expliqué vous devez fournir les constantes lors de la compilation puisqu'elles sont constantes. Si elles sont calculées plus tard il faut vraiment mettre en non constant .

    sur la question coût, un const est parfois remplacé littéralement par sa valeur quand le compilateur peut déduire l'index de ce que vous faites. Sinon dans les deux cas c'est un accès mémoire.

    normalement une fonction n'impose pas un const, quand on dit const sur un paramètre ça veut dire que la fonction ne va pas modifier ce que l'on passe donc il ne devrait pas y avoir d'erreur la dessus. Ce serait bien de poster le message du compilateur dans son intégralité

    sinon vu ce que vous faites, pourquoi ne pas calculer directement les valeurs une fois pour toutes au moment de la déclaration plutôt que de le faire dans le setup?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const short fir1_Coeffs[] = {32768*-0.000220, 32768*0.000395, 32768*-0.000589, 32768*0.000753, ...};

  6. #6
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    Bonjour JayM,

    Effectivement je suis arrivé aux mêmes conclusions en creusant, et j'ai compris le rôle du const.

    En modifiant légèrement le programme, j'arrive à ce qu'il passe à la compilation: pas d'erreur mais il me génère quand même un Warning relatif l'initialisation du tableau fir1_Coeffs:

    "warning: uninitialized const 'fir1_Coeffs' [-fpermissive]"
    certainement parce que le compilateur ne doit pas aimer que je déclare un tableau de constantes (const que vous mentionnez) et que je l'initialise par calcul ensuite...
    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
     
     
    #include <Audio.h>
    #include <Wire.h>
    #include <SPI.h>
    #include <SD.h> 
    #include <SerialFlash.h>
    #include <Bounce.h>
    #include <filter_fir.h>
     
    //This section has been copied from the Teensy FIR example
    // If this pin is grounded the FIR filter is turned off
    // which just passes the audio sraight through
    // Don't use any of the pins listed above
    #define PASSTHRU_PIN 1	//donc si je comprends bien il faut mettre la pin 1 à +3.3V ??
    // If this pin goes low the next FIR filter in the list
    // is switched in.
    #define FILTER_PIN 0 //if I understand correctly, the input of the Filter is pin 0
    /*
    These lines are followed by two "debounce" instrutions that are unknown to me,
    // seem to manage the buttons, that I don't use in my project, so I remove the "bounce" lines
    */
     
    // GUItool: begin automatically generated code
    AsyncAudioInputSPDIF3    spdif_async1;   //xy=145.3333282470703,121.33333587646484
    AudioFilterFIR           fir1;           //xy=353.25,121.25
    AudioOutputI2S           i2s1;           //xy=569.25,126.25
    AudioConnection          patchCord1(spdif_async1, 0, fir1, 0);
    AudioConnection          patchCord2(fir1, 0, i2s1, 0);
    AudioControlSGTL5000     sgtl5000_1;     //xy=360.25,265.25
    // GUItool: end automatically generated code
     
     
    const int length = 57;	// définition de la longueur du filtre, i.e le nombre de coefficients
     
    // Liste des 57 coefficients bruts donnés par lesite arc.id.au de calcul des fltres
    float Coeffs_Bruts[] = { -0.000220, 0.000395, -0.000589, 0.000753, -0.000817, 0.000696, -0.000308,
     -0.000416, 0.001510, -0.002950, 0.004644, -0.006416, 0.008012, -0.009109, 0.009343, -0.008340, 
    0.005765, -0.001367, -0.004979, 0.013234, -0.023175, 0.034397, -0.046329, 0.058275, -0.069471, 
    0.079153, -0.086631, 0.091355, 0.907029, 0.091355, -0.086631, 0.079153, -0.069471, 0.058275, 
    -0.046329, 0.034397, -0.023175, 0.013234, -0.004979, -0.001367, 0.005765, -0.008340, 0.009343, 
    -0.009109, 0.008012, -0.006416, 0.004644, -0.002950, 0.001510, -0.000416, -0.000308, 0.000696, 
    -0.000817, 0.000753, -0.000589, 0.000395, -0.000220};
     
    // The declaration below seems similar to the "struct" declaration used in the Teensy FIR Filter example
    // but the "const" approach has been said to be more optimized than the éstruct" approach
    const short fir1_Coeffs[length]; // définition du tableau de constantes que l'on va calculer
    								// à partir de la liste "Coeffs_Bruts" du dessus
     
     
     
     
    //const int myInput = AUDIO_INPUT_MIC;  // removed from the Teensy FIR example
    const int myInput = AUDIO_INPUT_LINEIN; // because my correct input is not MIC
    			// d'autres exemples utilisent myInput = AUDIO_INPUT_LINEIN;
    			// avec un diagramme AudioDesignTool dans le domaine digital aussi
    			// par ex le prog "Invert Phase Audio Signal"
     
    unsigned long last_time = millis(); // copied from the Teensy FIR example
     
    void setup()
    {
    	Serial.begin(9600);	//copied from the Teensy FIR Filter example
    	delay(300);			//copied from the Teensy FIR Filter example
     
    	//transfère les Coeffs_Bruts dans le tableau LPF_Coeffs, sous forme "short"
    	for (int i=1 ; i<=length ; i++) {
    		fir1_Coeffs[i] == (short) (32768 * Coeffs_Bruts[i]);
     
    		/* cette boucle if ne passe pas à la compilation, faudra demander pourquoi
    		if (i == length){
    			Serial.println("Tableau fir1_Coeffs initialisé");
    			Serial.println("Length= ", length);
    		}
    		*/
     
    	} //fin du remplissage du tableau fir1_Coeffs
     
     
    	pinMode(PASSTHRU_PIN, INPUT_PULLUP); //probably activates the Pull-Up resistor because PASSTHRU_PIN is defined as an input
    	pinMode(FILTER_PIN, INPUT_PULLUP);   //probably activates the Pull-Up resistor because FILTER_PIN is defined as an input
     
    	//setup the audio shield
    	AudioNoInterrupts(); // added to the Teensy FIR example: recommended in the video 
    						 // what are the benefit ???
    					     // mentionned at the very beginning
     
    	AudioMemory(16); /*
    		The numberBlocks input specifies how much memory to reserve for audio data. 
    		Each block holds 128 audio samples, or approx 2.9 ms of sound. 
    		*/
    	// Enable the audio shield. select input. and enable output
    	sgtl5000_1.enable(); //added: was it missing in the Teensy example
    	sgtl5000_1.inputSelect(myInput); //il faut un "i" minuscule à inputSelect...
    	/*
    							dois-je mettre spdif_async1 ou bien LINEIN comme dans la video ???
    							Je pense spdif_async1 puisque c'est le nom donné à AsyncAudioInputSPDIF3
    							qui remplace le AudioInputI2S de la video
    							Pas sûr car le pgm "Invert Phase Audio Signal" utilise bien
    							AUDIO_INPUT_LINEIN, donc je laisse myInput défini à 
    							AUDIO_INPUT_LINEIN
    							*/
    	sgtl5000_1.lineInLevel(5);
    	sgtl5000_1.unmuteHeadphone(); 
    	sgtl5000_1.volume(0.5); // I have a doubt about the parameter: is it correct ???
     
    	fir1.begin(fir1_Coeffs, length); //initialize the fir filter 'fir1" declared before
    	AudioInterrupts();	//as recommended in the video
     
    	// Warn on the Serial Monitor if the passthru pin is grounded
    	if(!digitalRead(PASSTHRU_PIN)) {
    		Serial.print("PASSTHRU_PIN (");
    		Serial.print(PASSTHRU_PIN);
    		Serial.println(") is grounded");
    	}
     
    	// Warn if the filter pin is grounded: what for ??
    	//it is supposed to be the filter input, isn't it ?
    	if(!digitalRead(FILTER_PIN)) {
    		Serial.print("FILTER_PIN (");
    		Serial.print(FILTER_PIN);
    		Serial.println(") is grounded");
    	} 
     
    	//ADDED to the Teensy FIR example (as recommended by the video)
    	fir1.begin(fir1_Coeffs, 57); //Iniitialize the LPF filter as recommended by the AudioDesignTool
     
    	Serial.print("fir1 Filter: begin done"); // displays on the Serial Monitor
    	Serial.println("setup done");
     
    }	
     
    void loop()	//la video ne dit pas quoi faire dans cette boucle loop, 
    			//et l'exemple de Teensy pas grand chose !
    {
     
      // print information about resource usage
      // Proc = 18 (18),  Mem = 4 (5)
    	if (millis() - last_time >= 2500) {
    		Serial.print("Proc = ");
    		Serial.print(AudioProcessorUsage());
    		Serial.print(" (");    
    		Serial.print(AudioProcessorUsageMax());
    		Serial.print("),  Mem = ");
    		Serial.print(AudioMemoryUsage());
    		Serial.print(" (");    
    		Serial.print(AudioMemoryUsageMax());
    		Serial.println(")");
    		last_time = millis();
    	}
    }
    Le Warning n'est pas bloquant mais ce n'est pas "beau", donc pour le supprimer je ne vois que 2 solutions:

    1-faire un programme à part qui me calcule les constantes short à partir des coefficients flottants, (j'ai eu la même idée que toi cette nuit dans mes rêves...); mais ce qui me gêne c'est que ça me fait un programme séparé, et pour mes tests ce sera plus long que si tout se fait à partir d'un seul programme
    2-partir du tableau des valeurs flottantes pour générer un tableau de "int short" (si c'est accepté car la fonction n'accepte que des arguments de type short, mais ça devrait)

    Je vais faire quelques essais cet après-midi, mais toi personnellement tu ferais quoi ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    Essai fructueux puisque désormais la compilation est parfaite, j'ai remplacé le "const short fir1_Coeffs[length];" par "int short fir1_Coeffs[length];", j'initialise ce tableau par calcul dans le void setup, et ça passe nickel.

    Mon erreur venait donc du fait sur je croyais que la fonction n'acceptait que des constantes alors qu'elle n'accepte que des short: je n'avais pas pigé ce que signifiait "const"...

    Une fois de plus merci pour ton éclairage, et je passe le sujet en "résolu",

    A+

  8. #8
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 884
    Par défaut
    OK

    au fait - on utilise généralement juste short, pas besoin de rajouter le int

  9. #9
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    OK merci JayM , je saurai pour la prochaine fois !

    Encore merci pour votre aide,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Warning sur type générique et tableau
    Par alex'l dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 27/07/2007, 20h46
  2. Réponses: 5
    Dernier message: 05/06/2004, 13h12
  3. Réponses: 2
    Dernier message: 08/04/2004, 16h30
  4. Comment faire un Drag&Drop sur un tableau
    Par Stef.web dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2003, 13h12
  5. [VBA-E] Dim dynamique sur un tableau
    Par Vince69 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/12/2002, 13h32

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