Bonjour,
Je travaille actuellement sur un projet dans lequel j'utilise le protocole modbus.
Ce protocole met à disposition plusieurs registres, représentés dans le code par des tableaux d'uint16_t pour les holding registers par exemple (R/W de la part du maître et du slave).
Dans mon projet, j'ai créé une classe dans laquelle je ne veux pas utiliser de variables membres (recréées à chaque instanciation), mais un pointeur vers une case du tableau modbus (économie de mémoire + màj en direct des valeurs).
➜ Petit problème, les données que je souhaite stocker dans ce tableau proviennent de millis et sont des uint32_t. La question est donc de savoir comment je peux convertir mes valeurs sur 32 bits en valeurs stockables dans un tableau d'uint16_t ?
Je n’ai pas trop de temps mais il me semble sans avoir trop cherché à comprendre. Je n’ai pas lu la totalité de ta demande. À cette question peut-être une réponse simple :
MSB + LSB = 16 + 16 =32
Si j'ai bien compris, vous me suggérez de "construire" à partir de deux cases du tableau sur 16 bit une variable de 32 bit et inversement ? (D'ailleurs je viens enfin de comprendre le sens de bit de poid fort/faible ). C'est possible ?
Je ne suis pas sûr de comprendre, désolé Comment le fait de faire un cast du pointeur peut permettre d'utiliser deux uint16_t ensemble ?
Sachant qu'à ma question initiale je dois ajouter une contrainte, c'est que chaque instance va chercher plusieurs variables dans le tableau. Pour cela il suffit de faire : index réel de l'instance = index de l'instance * nombre de case du tableau pour chaque instance
Mais il faut que la méthode pour utiliser des uint32_t dans ce tableau soit compatible avec ce calcul, ou alors changer de système ici aussi ?
Je dois admettre que ça dépasse mes compétences...
Cordialement,
Pandaroux007
Bingo ça fonctionne (testé sur wokwi). Merci beaucoup! Mais je ne suis pas sûr de comprendre comment ça fonctionne, comment la variable uint32_t se "coupe"-t-elle toute seule en deux uint16_t ?
Oui et pour un stockage sur 328p ou esp32 c’est du Little-endian donc contrairement à mon message #3 il faut lire :
LSB + MSB sinon c’est du Big-endian