Bonne journée,C à la conversion de type Pascal
Je travaille sur la communication I2C entre le maître (Raspberry Pi 2B, en utilisant Lazarus) et esclave - Arduino Nano. Sur Arduino j'ai défini
typedef union
{
float Temperature;
uint8_t bytes[4];
} floatuint;
floatuint fu;
Sur Raspberry Pi J'ai défini
TFloatUint = packed record
case Boolean of
False: (dabDouble: Double);
True: (dabByte: packed array[0..3] of cuint8);
end;
Utilisation de la commande
count := FpRead(I2DeviceHandle, fl.dabByte, 4);
Je reçois les mêmes valeurs pour tableau d'octets, mais fl.dabDouble montre différents résultat.
Par exemple:
fu.Temperature = 19.19;
fu.bytes = (0, 128, 153, 65);
fl.dabByte = (0, 128, 153, 65);
fl.dabDouble = 2.6656892163191751e-314
Là où je fait une erreur?
Ne comptez pas sur un format de données spécifique. Au lieu de cela, définissez un format d'échange commun (ASCII est toujours le meilleur pour les virgules flottantes) et écrivez les fonctions/procédures de sérialisation pour les deux côtés. Mais en général, vous n'utilisez pas de point flottant sur de tels petits MCU comme Arduino (inclut les variantes Cortex-M). Utilisez l'émulation à virgule fixe ou fractionnaire via des entiers. De cette façon, la conversion est beaucoup plus facile. – Olaf
Comme vous pouvez le voir, la communication utilise des octets. –