Probleme avec une structure

Bonjour,
j’essaie d'écrire un programme et je ne comprend le résultat que me fournie mon code.
Je vous met le code et le résultat.

struct StrucPosBra
{
  unsigned int Servo1;
  unsigned int Servo2;
  unsigned int Servo3;
  unsigned int Servo4;
  unsigned int Servo5;
  unsigned int Servo6;
  unsigned int Divers1;
  unsigned int Divers2;
  unsigned int Divers3;
  unsigned int Divers4;
};
 
StrucPosBra PosOld= {0,0,0,0,0,0,1000,0,0,0}; 
StrucPosBra PosBra;


setup 

 position (0,100);
 

void position (byte a, int vitesse) {
Serial.println ("Dans fonction position *-*-*");

EEPROM.get ((a * NbOcPos * 10), PosBra); // car 2 octets *10  par position
Serial.println (PosBra.Servo1);
Serial.println (PosOld.Servo1);
Serial.println ("*-*-*");
Serial.println (PosBra.Divers1);
Serial.println (PosOld.Divers1);
Serial.println ("*-*-*");  
Serial.println ((PosOld.Servo1)-(PosBra.Servo1));
Serial.println (abs(PosOld.Servo1-PosBra.Servo1));
}

J'ai mis uniquement ce qui me semblais pertinent.

et le résultat :

Dans fonction position --*
2
0
--*
0
1000
--*
65534
65534
0

Je n arrive pas a comprendre l'obtention de 65534

Une idée

Merci pour votre aide.

les calculs sur unsigned int se font de manière non signée.. donc votre soustraction ne fait sans doute pas ce que vous pensez qu'elle fait

je ne comprends pas trop non plus le commentaire ici

EEPROM.get ((a * NbOcPos * 10), PosBra); // car 2 octets *10  par position

c'est quoi ce "car 2 octets *10 par position" ?

Bonjour,
merci pour votre aide.
En effet , votre analyse est la bonne.

Concernant mon commentaire, en fait il s agit d'un morceau de code d'un programme beaucoup plus grand.
Initialement la ligne été:
EEPROM.get ((a * 2* 10), PosBra); // car 2 octets *10 par position
ce qui me permet que chaque incrémentation de "a" écrive la structure en EEPROM au bon endroit.

OK - au lieu de 2*10 vous devriez utiliser sizeof(StrucPosBra) ce qui rendrait le code plus solide si vous effectuez des changements

Si un jour vous changez d'architecture pour aller vers un ESP ou MKR, il vaudrait mieux définir la structure en imposant 2 octets par entrée

struct StrucPosBra
{
  uint16_t Servo1;
  uint16_t Servo2;
  uint16_t Servo3;
  uint16_t Servo4;
  uint16_t Servo5;
  uint16_t Servo6;
  uint16_t Divers1;
  uint16_t Divers2;
  uint16_t Divers3;
  uint16_t Divers4;
};

Sans doute pour simplifier votre code mettre ça dans un tableau serait pas inutile et de demander vraiment au compilateur de tout tasser

struct __attribute__ ((packed)) StrucPosBra
{
  uint16_t Servo[6];
  uint16_t Divers[4];
}

si vous voulez lire la structure d'un coup, EEPROM.get() sait le faire aussi d'ailleurs