Чёртовы эмбеддеры
Jul. 27th, 2021 11:06 pmСкажите, коллеги, и просто сочувствующие, а вот у вас такой код не вызывает подозрений?
Нет? Точно нет? А должен вызывать, потому что при попытке прочитать этот float32 с другого конца там вываливается чёрт знает что.
Хорошо, еще одна попытка. Я подскажу: вот этот 1e3 там неспроста, и битыый жизнью программист уже должен сделать на него стойку.
Ладно, леземв конец задачника в исходники и видим следующее:
Всё усугубляется тем, что _float32 — в документации к протоколу, а _int32 — в прошивке, благо исходники доступны.
Редкостная пидерсия.
uint8_t *buffer = malloc(...) size_t offset = 0 buf_append_float32(buffer, config->voltage, 1e3, &offset); buf_append_float32(buffer, config->current, 1e3, &offset); buf_append_float32(buffer, config->temperature, 1e2, &offset);
Нет? Точно нет? А должен вызывать, потому что при попытке прочитать этот float32 с другого конца там вываливается чёрт знает что.
Хорошо, еще одна попытка. Я подскажу: вот этот 1e3 там неспроста, и битыый жизнью программист уже должен сделать на него стойку.
Ладно, лезем
void buf_append_float32(uint8_t *buffer, float data, float scale, size_t *offset)
{
buf_append_int32(buffer, (int32_t)(data * scale), offset)
}
Всё усугубляется тем, что _float32 — в документации к протоколу, а _int32 — в прошивке, благо исходники доступны.
Редкостная пидерсия.