Хорошего дня,С до преобразования типа Pascal
я работать на I2C связи между Мастерами (малина пи 2В, с использованием Lazarus) и ведомым - Arduino Nano. На Arduino я определил
typedef union
{
float Temperature;
uint8_t bytes[4];
} floatuint;
floatuint fu;
На Raspberry Pi я определил
TFloatUint = packed record
case Boolean of
False: (dabDouble: Double);
True: (dabByte: packed array[0..3] of cuint8);
end;
с помощью команды
count := FpRead(I2DeviceHandle, fl.dabByte, 4);
получает одни и то же значение для массива байт, но fl.dabDouble показывает другим результат.
Например:
fu.Temperature = 19.19;
fu.bytes = (0, 128, 153, 65);
fl.dabByte = (0, 128, 153, 65);
fl.dabDouble = 2.6656892163191751e-314
Где я допустил ошибку?
Не полагайтесь на определенный формат данных. Вместо этого определите общий формат обмена (ASCII по-прежнему лучше всего подходит для с плавающей запятой) и записывайте функции/процедуры сериализации для обеих сторон. Но в целом вы не используете плавающие точки на таких небольших микроконтроллерах, как Arduino (включая варианты Cortex-M). Используйте фиксированную или дробную эмуляцию с помощью целых чисел. Таким образом, преобразование намного проще. – Olaf
Как вы можете видеть, связь идет с использованием байтов. –