Jul. 27th, 2021

Скажите, коллеги, и просто сочувствующие, а вот у вас такой код не вызывает подозрений?
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 — в прошивке, благо исходники доступны.

Редкостная пидерсия.

Profile

ex0_planet

April 2023

S M T W T F S
      1
234567 8
910111213 1415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 24th, 2026 12:05 pm
Powered by Dreamwidth Studios