Je travaille actuellement sur un projet où je calcule la moyenne des 10 à 20 dernières mesures. Pour ce faire, je sauvegarde les 10 dernières valeurs dans un tableau. droite déplacer les éléments pour mettre à jour les données.Le décalage des éléments du tableau laisse vide les derniers éléments
Le code que j'utilise pour changer les valeurs:
void shiftvals() {
memmove(&val[1], &val[0], (sizeof(val)/sizeof(val[0]))-1);
for (unsigned int i = 0; i < (sizeof(val)/sizeof(val[0])); i++)
{
Serial.print(val[i]);
Serial.print(",");
}
Serial.println();
}
Le code appelant la fonction:
#define ARR_SIZE 10
uint16_t val[ARR_SIZE];
void loop(){
Serial.print("Size of the array:\t");
Serial.println(sizeof(val)/sizeof(val[0]));
shiftvals();
val[0] = (analogRead(A0));
}
Maintenant, le problème est que les dernières sorties seront toujours 0, même si le tableau se remplit bien. Lorsque j'augmente la taille du tableau, la quantité d'espaces vides augmente également.
Sortie:
396,396,381,462,503,195,0,0,0,0,
472,472,396,381,462,247,0,0,0,0,
495,495,472,396,381,206,0,0,0,0,
435,435,495,472,396,125,0,0,0,0,
Je suis vraiment confus, ce que je fais mal dans le memmove
?
Veuillez fournir un [mcve], et que voulez-vous dire par * tableau remplit bien * –
Pensez au troisième paramètre de 'memmove'. Le chercher. – molbdnilo
le troisième paramètre de memmove est Size_t, j'ai pensé que le dimensionnement était éteint, mais je ne pensais pas de prendre la taille définie du tableau comme size_t comme expliqué par michael @ passer, je crois que la sortie clarifie ce point –